Skip to content

Commit 63a2dde

Browse files
committed
test: add aggregated dataset to testing ldm
risk: nonprod
1 parent 2423aeb commit 63a2dde

File tree

6 files changed

+79
-8
lines changed

6 files changed

+79
-8
lines changed

gooddata-sdk/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/dataset.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class CatalogDeclarativeDataset(Base):
4242
attributes: Optional[list[CatalogDeclarativeAttribute]] = None
4343
facts: Optional[list[CatalogDeclarativeFact]] = None
4444
aggregated_facts: Optional[list[CatalogDeclarativeAggregatedFact]] = None
45+
precedence: Optional[int] = None
4546
data_source_table_id: Optional[CatalogDataSourceTableIdentifier] = None
4647
sql: Optional[CatalogDeclarativeDatasetSql] = None
4748
tags: Optional[list[str]] = None

gooddata-sdk/gooddata_sdk/catalog/workspace/entity_model/content_objects/dataset.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,13 @@ def generate_facts_from_api(self) -> list[CatalogFact]:
145145
default=attr.Factory(lambda self: self.generate_facts_from_api(), takes_self=True),
146146
)
147147

148+
aggregated_facts: Optional[list[CatalogAggregatedFact]] = attr.field(
149+
default=attr.Factory(lambda self: self.json_api_attributes.get("aggregatedFacts"), takes_self=True),
150+
)
151+
precedence: Optional[int] = attr.field(
152+
default=attr.Factory(lambda self: self.json_api_attributes.get("precedence"), takes_self=True)
153+
)
154+
148155
grain: Optional[list] = attr.field(
149156
default=attr.Factory(lambda self: self.json_api_attributes.get("grain"), takes_self=True)
150157
)

gooddata-sdk/tests/catalog/test_catalog_workspace.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,8 +700,8 @@ def test_clone_workspace(test_config):
700700
default_cloned_decl_ws = sdk.catalog_workspace.get_declarative_workspace(default_cloned_ws_id)
701701
assert default_cloned_decl_ws.ldm.datasets[0].data_source_table_id.data_source_id == test_config["data_source2"]
702702
assert default_cloned_decl_ws.ldm.datasets[0].facts[0].source_column == "BUDGET"
703-
# TODO: Add a nontrivial test for agg facts here
704-
assert default_cloned_decl_ws.ldm.datasets[0].aggregated_facts == []
703+
print(default_cloned_decl_ws.ldm.datasets[2])
704+
assert default_cloned_decl_ws.ldm.datasets[1].aggregated_facts[0].source_column == "BUDGET"
705705

706706
sdk.catalog_workspace.clone_workspace(
707707
source_ws_id, target_workspace_id=custom_cloned_ws_id, target_workspace_name=custom_cloned_ws_name
@@ -755,7 +755,7 @@ def test_translate_workspace(test_config):
755755
for fact in dataset.facts:
756756
if fact.id == "budget":
757757
assert fact.title == "Rozpočet"
758-
# TODO: Add agg facts here for descriptions?
758+
# TODO: Do for aggregated facts descriptions
759759

760760
# Run second time without translation function. Previous execution created translation file, which is used.
761761
sdk.catalog_workspace.generate_localized_workspaces(

gooddata-sdk/tests/catalog/test_catalog_workspace_content.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ def test_catalog_list_facts(test_config):
6262
def test_catalog_list_aggregated_facts(test_config):
6363
sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
6464
agg_facts_list = sdk.catalog_workspace_content.get_aggregated_facts_catalog(test_config["workspace"])
65-
# TODO: Add a non-trivial test
66-
assert len(agg_facts_list) == 0
65+
assert len(agg_facts_list) == 1
6766

6867

6968
@gd_vcr.use_cassette(str(_fixtures_dir / "demo_catalog_list_attributes.yaml"))
@@ -165,7 +164,7 @@ def test_load_ldm_and_modify_tables_columns_case(test_config):
165164
assert ldm_e.ldm.datasets[0].data_source_table_id.id == table_id.upper()
166165
assert ldm_e.ldm.datasets[0].attributes[0].source_column == attribute_column.upper()
167166
assert ldm_e.ldm.datasets[0].facts[0].source_column == fact_column.upper()
168-
# TODO: Add agg facts here
167+
assert ldm_e.ldm.datasets[1].aggregated_facts[0].source_column == fact_column.upper()
169168
assert ldm_e.ldm.datasets[0].references[0].source_columns is None
170169
assert ldm_e.ldm.datasets[0].references[0].sources[0].column == reference_column.upper()
171170
# Test chaining approach as well
@@ -177,7 +176,7 @@ def test_load_ldm_and_modify_tables_columns_case(test_config):
177176
assert ldm_o.ldm.datasets[0].data_source_table_id.id == table_id
178177
assert ldm_o.ldm.datasets[0].attributes[0].source_column == attribute_column
179178
assert ldm_o.ldm.datasets[0].facts[0].source_column == fact_column
180-
# TODO: Add agg facts here
179+
assert ldm_o.ldm.datasets[1].aggregated_facts[0].source_column == fact_column
181180
assert ldm_o.ldm.datasets[0].references[0].source_columns is None
182181
assert ldm_e.ldm.datasets[0].references[0].sources[0].column == reference_column
183182

tests-support/fixtures/demo_declarative_hierarchy.json

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2346,6 +2346,70 @@
23462346
],
23472347
"title": "Campaign channels"
23482348
},
2349+
{
2350+
"attributes": [
2351+
{
2352+
"description": "Category Agg",
2353+
"id": "campaign_channels.category_agg",
2354+
"sourceColumn": "category",
2355+
"sourceColumnDataType": "STRING",
2356+
"labels": [],
2357+
"tags": [
2358+
"Campaign channels"
2359+
],
2360+
"title": "Category"
2361+
}
2362+
],
2363+
"description": "Campaign channels per categories",
2364+
"facts": [],
2365+
"aggregatedFacts": [
2366+
{
2367+
"description": "Budget Agg",
2368+
"id": "budget_agg",
2369+
"sourceColumn": "budget",
2370+
"sourceColumnDataType": "INT",
2371+
"tags": [
2372+
"Campaign channels per category"
2373+
],
2374+
"sourceFactReference": {
2375+
"reference": {
2376+
"id": "budget",
2377+
"type": "fact"
2378+
},
2379+
"operation": "SUM"
2380+
}
2381+
}
2382+
],
2383+
"grain": [
2384+
{
2385+
"id": "campaign_channels.category_agg",
2386+
"type": "attribute"
2387+
}
2388+
],
2389+
"id": "campaign_channels_per_category",
2390+
"precedence": 1,
2391+
"references": [
2392+
{
2393+
"identifier": {
2394+
"id": "campaign_channels",
2395+
"type": "dataset"
2396+
},
2397+
"multivalue": false,
2398+
"sourceColumns": [
2399+
"campaign_channel_category"
2400+
],
2401+
"sourceColumnDataTypes": [ "STRING" ]
2402+
}
2403+
],
2404+
"tags": [
2405+
"Campaign channels per category"
2406+
],
2407+
"sql": {
2408+
"statement": "SELECT category, SUM(budget) FROM campaign_channels GROUP BY category",
2409+
"dataSourceId": "demo-test-ds"
2410+
},
2411+
"title": "Campaign channels per category"
2412+
},
23492413
{
23502414
"attributes": [
23512415
{

tests-support/upload_demo_layout.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def rest_op(op, url_path, data=None, raise_ex=True):
3535

3636
if response.status_code < 200 or response.status_code > 299:
3737
if raise_ex:
38-
raise Exception(f"Call to {url} failed - {str(response)}")
38+
raise Exception(f"Call to {url} failed - {str(response.text)}")
3939
else:
4040
return None
4141

0 commit comments

Comments
 (0)