Skip to content
This repository was archived by the owner on Sep 2, 2025. It is now read-only.

Commit 18e55ce

Browse files
committed
implement funcitonal test
1 parent 808d41b commit 18e55ce

File tree

5 files changed

+62
-10
lines changed

5 files changed

+62
-10
lines changed

dbt/adapters/bigquery/dataset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def add_access_entry_to_dataset(dataset: Dataset, access_entry: AccessEntry) ->
4646

4747

4848

49-
def delete_access_entry_to_dataset(dataset: Dataset, access_entry: AccessEntry) -> Dataset:
49+
def delete_access_entry_from_dataset(dataset: Dataset, access_entry: AccessEntry) -> Dataset:
5050
"""Remove an access entry from a dataset, always use.
5151
5252
Args:

dbt/adapters/bigquery/impl.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
from dbt.adapters.bigquery import BigQueryColumn, BigQueryConnectionManager
4646
from dbt.adapters.bigquery.column import get_nested_column_data_types
4747
from dbt.adapters.bigquery.connections import BigQueryAdapterResponse
48-
from dbt.adapters.bigquery.dataset import add_access_entry_to_dataset, is_access_entry_in_dataset, delete_access_entry_to_dataset
48+
from dbt.adapters.bigquery.dataset import add_access_entry_to_dataset, is_access_entry_in_dataset, delete_access_entry_from_dataset
4949
from dbt.adapters.bigquery.python_submissions import (
5050
ClusterDataprocHelper,
5151
ServerlessDataProcHelper,
@@ -840,17 +840,17 @@ def grant_access_to(self, entity, entity_type, role, grant_target_dict,full_refr
840840
logger.warning(f"Access entry {access_entry} " f"already exists in dataset")
841841
return
842842
else:
843-
dataset = delete_access_entry_to_dataset(dataset,access_entry)
843+
dataset = delete_access_entry_from_dataset(dataset,access_entry)
844844
dataset = client.update_dataset(
845845
dataset,
846846
["access_entries"],
847847
) # Make an API request.
848848
full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
849-
print(f"Revoked dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
849+
logger.info(f"Revoked dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
850850
dataset = add_access_entry_to_dataset(dataset, access_entry)
851851
dataset = client.update_dataset(dataset, ["access_entries"])
852852
full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
853-
print(f"allowed dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
853+
logger.info(f"allowed dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
854854

855855

856856
@available.parse_none
@@ -870,14 +870,14 @@ def remove_grant_access_to(self, entity, entity_type, role, grant_target_dict):
870870
access_entry = AccessEntry(role, entity_type, entity)
871871
# only perform removing if access entry in dataset
872872
if is_access_entry_in_dataset(dataset, access_entry):
873-
dataset = delete_access_entry_to_dataset(dataset,access_entry)
873+
dataset = delete_access_entry_from_dataset(dataset,access_entry)
874874
dataset = client.update_dataset(
875875
dataset,
876876
["access_entries"],
877877
) # Make an API request.
878878

879879
full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
880-
print(f"Revoked dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
880+
logger.info(f"Revoked dataset access for '{access_entry.entity_id}' to ' dataset '{full_dataset_id}.'")
881881
else:
882882
logger.warning(f"Access entry {access_entry} not in the dataset {full_dataset_id} no need to remove it")
883883

dbt/include/bigquery/macros/materializations/view.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
{% if config.get('grant_access_to') %}
2222
{% for grant_target_dict in config.get('grant_access_to') %}
23-
{% do adapter.grant_access_to(this, 'view', None, grant_target_dict,should_full_refresh()) %}
23+
{% do adapter.grant_access_to(this, 'view', None, grant_target_dict, should_full_refresh()) %}
2424
{% endfor %}
2525
{% endif %}
2626

tests/functional/adapter/test_grant_access_to.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,58 @@ def test_grant_access_succeeds(self, project, setup_grant_schema, teardown_grant
8686
assert len(results) == 2
8787

8888

89+
90+
class TestAccessGrantSucceedsWithFullRefresh:
91+
@pytest.fixture(scope="class")
92+
def setup_grant_schema(
93+
self,
94+
project,
95+
unique_schema,
96+
):
97+
with project.adapter.connection_named("__test_grants"):
98+
relation = project.adapter.Relation.create(
99+
database=project.database,
100+
schema=get_schema_name(unique_schema),
101+
identifier="grant_access",
102+
)
103+
project.adapter.create_schema(relation)
104+
yield relation
105+
106+
@pytest.fixture(scope="class")
107+
def teardown_grant_schema(
108+
self,
109+
project,
110+
unique_schema,
111+
):
112+
yield
113+
with project.adapter.connection_named("__test_grants"):
114+
relation = project.adapter.Relation.create(
115+
database=project.database, schema=get_schema_name(unique_schema)
116+
)
117+
project.adapter.drop_schema(relation)
118+
119+
@pytest.fixture(scope="class")
120+
def models(self, unique_schema):
121+
dataset = get_schema_name(unique_schema)
122+
return {
123+
"select_1.sql": select_1(dataset=dataset, materialized="view"),
124+
"select_1_table.sql": select_1(dataset=dataset, materialized="table"),
125+
}
126+
127+
def test_grant_access_succeeds(self, project, setup_grant_schema, teardown_grant_schema):
128+
# Need to run twice to validate idempotency
129+
results = run_dbt(["run"])
130+
assert len(results) == 2
131+
time.sleep(10)
132+
results = run_dbt(["run","--full-refresh"])
133+
assert len(results) == 2
134+
time.sleep(10)
135+
results = run_dbt(["run"])
136+
assert len(results) == 2
137+
138+
139+
140+
89141
class TestAccessGrantFails:
90142
@pytest.fixture(scope="class")
91143
def models(self):

tests/unit/test_dataset.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dbt.adapters.bigquery.dataset import add_access_entry_to_dataset, is_access_entry_in_dataset, delete_access_entry_to_dataset
1+
from dbt.adapters.bigquery.dataset import add_access_entry_to_dataset, is_access_entry_in_dataset, delete_access_entry_from_dataset
22
from dbt.adapters.bigquery import BigQueryRelation
33

44
from google.cloud.bigquery import Dataset, AccessEntry, DatasetReference
@@ -114,5 +114,5 @@ def test_delete_access_to_dataset_updates_dataset():
114114
access_entry = AccessEntry(None, "table", entity)
115115
dataset = add_access_entry_to_dataset(dataset, access_entry)
116116
assert is_access_entry_in_dataset(dataset, access_entry)
117-
dataset = delete_access_entry_to_dataset(dataset, access_entry)
117+
dataset = delete_access_entry_from_dataset(dataset, access_entry)
118118
assert not is_access_entry_in_dataset(dataset, access_entry)

0 commit comments

Comments
 (0)