def test_all_values(url_with_everything, param, value, default): url_with_this_one = make_url( f"bigquery://some-project/some-dataset" f"?{param}={url_with_everything.query[param]}") for url in url_with_everything, url_with_this_one: job_config = parse_url(url)[5] config_value = getattr(job_config, param) if callable(value): assert value(config_value) else: assert config_value == value url_with_nothing = make_url("bigquery://some-project/some-dataset") job_config = parse_url(url_with_nothing)[5] assert getattr(job_config, param) == default
def test_basic(url_with_everything): ( project_id, location, dataset_id, arraysize, credentials_path, job_config, list_tables_page_size, ) = parse_url(url_with_everything) assert project_id == "some-project" assert location == "some-location" assert dataset_id == "some-dataset" assert arraysize == 1000 assert list_tables_page_size == 5000 assert credentials_path == "/some/path/to.json" assert isinstance(job_config, QueryJobConfig)
def test_only_dataset(): url = parse_url(make_url("bigquery:///some-dataset")) ( project_id, location, dataset_id, arraysize, credentials_path, job_config, list_tables_page_size, ) = url assert project_id is None assert location is None assert dataset_id == "some-dataset" assert arraysize is None assert credentials_path is None assert list_tables_page_size is None assert isinstance(job_config, QueryJobConfig)
def test_empty_with_non_config(): url = parse_url( make_url( "bigquery:///?location=some-location&arraysize=1000&credentials_path=/some/path/to.json" )) ( project_id, location, dataset_id, arraysize, credentials_path, job_config, list_tables_page_size, ) = url assert project_id is None assert location == "some-location" assert dataset_id is None assert arraysize == 1000 assert credentials_path == "/some/path/to.json" assert job_config is None assert list_tables_page_size is None
def test_not_implemented(not_implemented_arg): url = make_url("bigquery://some-project/some-dataset/?" + not_implemented_arg + "=" + "whatever") with pytest.raises(NotImplementedError): parse_url(url)
def test_disallowed(disallowed_arg): url = make_url("bigquery://some-project/some-dataset/?" + disallowed_arg + "=" + "whatever") with pytest.raises(ValueError): parse_url(url)
def test_empty_url(): for value in parse_url(make_url("bigquery://")): assert value is None for value in parse_url(make_url("bigquery:///")): assert value is None
def test_bad_values(param, value): url = make_url("bigquery:///?" + param + "=" + value) with pytest.raises(ValueError): parse_url(url)