diff --git a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml index a855b277b..a26ccfeef 100644 --- a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml +++ b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml @@ -502,10 +502,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true @@ -573,18 +573,18 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: customer_id type: attribute - identifier: id: campaigns @@ -615,28 +615,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__state filterColumnDataType: STRING @@ -1225,18 +1225,18 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: customer_id type: attribute - identifier: id: campaigns @@ -1267,28 +1267,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__state filterColumnDataType: STRING diff --git a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml index 7a85267e5..86f1bdfcf 100644 --- a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml +++ b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml @@ -502,10 +502,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true @@ -573,18 +573,18 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: customer_id type: attribute - identifier: id: campaigns @@ -615,28 +615,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__state filterColumnDataType: STRING @@ -1225,18 +1225,18 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: customer_id type: attribute - identifier: id: campaigns @@ -1267,28 +1267,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__state filterColumnDataType: STRING @@ -3231,10 +3231,10 @@ interactions: type: label metrics: data: - - id: revenue - type: metric - id: amount_of_orders type: metric + - id: revenue + type: metric type: visualizationObject - attributes: areRelationsValid: true diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml index d3bf7419a..3010c77d7 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml @@ -250,10 +250,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute included: - attributes: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml index bdac7da3e..3ff9553e0 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml @@ -237,10 +237,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute included: - attributes: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_load_and_put_declarative_data_sources.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_load_and_put_declarative_data_sources.yaml index 757ae2fb8..434507a6a 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_load_and_put_declarative_data_sources.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_load_and_put_declarative_data_sources.yaml @@ -76,6 +76,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources.yaml index 47ea0054e..5ce7349c0 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources.yaml @@ -22,14 +22,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -58,14 +58,14 @@ interactions: name: demo-test-ds password: passw0rd permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -118,14 +118,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml index 74cd3e0ea..068c17ca2 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml @@ -22,14 +22,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -99,14 +99,14 @@ interactions: name: demo-test-ds password: passw0rd permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -159,14 +159,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml index 6883ccbba..e02f4b527 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml @@ -398,7 +398,7 @@ interactions: headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -406,7 +406,8 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -459,15 +460,18 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -488,14 +492,16 @@ interactions: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 204 message: No Content @@ -548,15 +554,18 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_store_declarative_data_sources.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_store_declarative_data_sources.yaml index 02dff26f1..f0003069e 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_store_declarative_data_sources.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_store_declarative_data_sources.yaml @@ -22,14 +22,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -71,14 +71,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer @@ -143,6 +143,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -219,6 +220,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml index 22b303906..de77d202f 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml @@ -22,14 +22,14 @@ interactions: id: demo-test-ds name: demo-test-ds permissions: - - assignee: - id: demo2 - type: user - name: MANAGE - assignee: id: demoGroup type: userGroup name: USE + - assignee: + id: demo2 + type: user + name: MANAGE schema: demo type: POSTGRESQL url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/organization.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/organization.yaml index f720f7bdf..6364fd4b2 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/organization.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/organization.yaml @@ -47,6 +47,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml index 180e5390b..f318862da 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml @@ -47,6 +47,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -123,6 +124,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml index 9c3f56a12..80d4f2ac4 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml @@ -47,6 +47,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -123,6 +124,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -178,6 +180,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -254,6 +257,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -330,6 +334,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting @@ -385,6 +390,7 @@ interactions: string: data: attributes: + allowedOrigins: [] earlyAccess: enableAlerting earlyAccessValues: - enableAlerting diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml index 07ba7d6a2..465fcd7f1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml @@ -502,10 +502,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true @@ -573,32 +573,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -615,28 +615,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__region filterColumnDataType: STRING @@ -1225,32 +1225,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -1267,28 +1267,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__region filterColumnDataType: STRING diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml index 5f51058ff..9efed801d 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml @@ -502,10 +502,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true @@ -573,32 +573,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -615,28 +615,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__region filterColumnDataType: STRING @@ -1225,32 +1225,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -1267,28 +1267,28 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - filterColumn: wdf__region filterColumnDataType: STRING diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_attributes.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_attributes.yaml index b741fac0f..66c5a9e89 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_attributes.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_attributes.yaml @@ -422,10 +422,10 @@ interactions: relationships: labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml index ce15ac550..c8039ce55 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml @@ -18,286 +18,290 @@ interactions: string: graph: edges: - - - id: campaign_channel_id - type: attribute - - id: campaign_channels - type: dataset - - - id: campaign_channels.category - type: attribute - - id: campaign_channels - type: dataset - - - id: campaign_id - type: attribute - - id: campaigns - type: dataset - - - id: campaign_name - type: attribute - - id: campaigns - type: dataset - - - id: customer_id - type: attribute + - - id: amount_of_active_customers + type: metric - id: amount_of_top_customers type: metric - - - id: customer_id - type: attribute - - id: amount_of_active_customers + - - id: amount_of_active_customers type: metric - - - id: customer_id + - id: customer_id type: attribute - - id: percent_revenue_from_top_10_percent_customers + - - id: amount_of_active_customers type: metric - - - id: customer_id - type: attribute - - id: customers - type: dataset - - - id: customer_id + - id: customers_trend + type: visualizationObject + - - id: amount_of_active_customers + type: metric + - id: order_line_id type: attribute - - id: revenue_per_customer + - - id: amount_of_active_customers type: metric - - - id: customer_id + - id: percentage_of_customers_by_region + type: visualizationObject + - - id: amount_of_orders + type: metric + - id: amount_of_valid_orders + type: metric + - - id: amount_of_orders + type: metric + - id: order_id type: attribute - - id: percent_revenue_from_top_10_customers + - - id: amount_of_orders type: metric - - - id: customer_name + - id: product_saleability + type: visualizationObject + - - id: amount_of_orders + type: metric + - id: revenue_trend + type: visualizationObject + - - id: amount_of_top_customers + type: metric + - id: customer_id type: attribute - - id: customers + - - id: amount_of_top_customers + type: metric + - id: revenue + type: metric + - - id: amount_of_valid_orders + type: metric + - id: order_status + type: label + - - id: budget + type: fact + - id: campaign_channels type: dataset - - - id: date.day + - - id: campaign + type: analyticalDashboard + - id: campaign_name_filter + type: filterContext + - - id: campaign + type: analyticalDashboard + - id: campaign_spend + type: visualizationObject + - - id: campaign + type: analyticalDashboard + - id: revenue_per_usd_vs_spend_by_campaign + type: visualizationObject + - - id: campaign_channel_id type: attribute - - id: date - type: dataset - - - id: date.month + - id: campaign_channel_id + type: label + - - id: campaign_channel_id type: attribute - - id: date + - id: campaign_channels type: dataset - - - id: date.quarter - type: attribute - - id: date + - - id: campaign_channels type: dataset - - - id: date.week + - id: campaign_channels.category type: attribute - - id: date + - - id: campaign_channels type: dataset - - - id: date.year - type: attribute - - id: date + - id: campaign_channels_per_category type: dataset - - - id: date.year + - - id: campaign_channels + type: dataset + - id: campaigns + type: dataset + - - id: campaign_channels + type: dataset + - id: spend + type: fact + - - id: campaign_channels + type: dataset + - id: type type: attribute - - id: product_revenue_comparison-over_previous_period + - - id: campaign_channels.category + type: attribute + - id: campaign_channels.category + type: label + - - id: campaign_channels.category + type: label + - id: campaign_spend type: visualizationObject - - - id: order_id + - - id: campaign_id type: attribute - - id: amount_of_orders - type: metric - - - id: order_id + - id: campaign_id + type: label + - - id: campaign_id type: attribute - - id: order_lines + - id: campaigns type: dataset - - - id: order_line_id + - - id: campaign_name type: attribute - - id: amount_of_active_customers - type: metric - - - id: order_line_id + - id: campaign_name + type: label + - - id: campaign_name type: attribute - - id: order_lines + - id: campaigns + type: dataset + - - id: campaign_name + type: label + - id: campaign_name_filter + type: filterContext + - - id: campaign_name + type: label + - id: campaign_spend + type: visualizationObject + - - id: campaign_name + type: label + - id: revenue_per_usd_vs_spend_by_campaign + type: visualizationObject + - - id: campaign_name_filter + type: filterContext + - id: dashboard_plugin + type: analyticalDashboard + - - id: campaign_spend + type: metric + - id: campaign_spend + type: visualizationObject + - - id: campaign_spend + type: metric + - id: revenue_per_dollar_spent + type: metric + - - id: campaign_spend + type: metric + - id: revenue_per_usd_vs_spend_by_campaign + type: visualizationObject + - - id: campaign_spend + type: metric + - id: spend + type: fact + - - id: campaign_spend + type: visualizationObject + - id: type + type: label + - - id: campaigns type: dataset - - - id: order_status - type: attribute - id: order_lines type: dataset - - - id: product_id - type: attribute - - id: percent_revenue_from_top_10_percent_products - type: metric - - - id: product_id + - - id: customer_id type: attribute - - id: percent_revenue_from_top_10_products - type: metric - - - id: product_id + - id: customer_id + type: label + - - id: customer_id type: attribute - - id: products + - id: customers type: dataset - - - id: product_id + - - id: customer_id type: attribute - - id: percent_revenue_per_product + - id: percent_revenue_from_top_10_customers type: metric - - - id: product_name - type: attribute - - id: products - type: dataset - - - id: products.category + - - id: customer_id type: attribute - - id: products - type: dataset - - - id: products.category + - id: percent_revenue_from_top_10_percent_customers + type: metric + - - id: customer_id type: attribute - - id: percent_revenue_in_category + - id: revenue_per_customer type: metric - - - id: region + - - id: customer_name type: attribute - - id: customers - type: dataset - - - id: state + - id: customer_name + type: label + - - id: customer_name type: attribute - id: customers type: dataset - - - id: type - type: attribute - - id: campaign_channels - type: dataset - - - id: dashboard_plugin_1 - type: dashboardPlugin - - id: dashboard_plugin - type: analyticalDashboard - - - id: campaign_channels - type: dataset - - id: campaign_channels_per_category - type: dataset - - - id: campaigns - type: dataset - - id: campaign_channels - type: dataset - - - id: campaigns + - - id: customer_name + type: label + - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject + - - id: customer_name + type: label + - id: revenue_and_quantity_by_product_and_category + type: visualizationObject + - - id: customer_name + type: label + - id: top_10_customers + type: visualizationObject + - - id: customers type: dataset - id: order_lines type: dataset - - id: customers type: dataset - - id: order_lines - type: dataset - - - id: date + - id: region + type: attribute + - - id: customers type: dataset - - id: customers_trend + - id: state + type: attribute + - - id: customers_trend type: visualizationObject - - - id: date + - id: date type: dataset - - id: revenue_by_category_trend + - - id: customers_trend type: visualizationObject - - - id: date - type: dataset - - id: revenue_trend + - id: date.month + type: label + - - id: customers_trend type: visualizationObject - - - id: date - type: dataset - id: product_and_category type: analyticalDashboard - - - id: date - type: dataset - - id: order_lines - type: dataset - - - id: date - type: dataset - - id: percentage_of_customers_by_region - type: visualizationObject - - - id: date - type: dataset - - id: product_revenue_comparison-over_previous_period - type: visualizationObject - - - id: products - type: dataset - - id: order_lines - type: dataset - - - id: budget - type: fact - - id: campaign_channels - type: dataset - - - id: price - type: fact - - id: revenue_and_quantity_by_product_and_category + - - id: customers_trend type: visualizationObject - - - id: price - type: fact - - id: order_lines - type: dataset - - - id: price - type: fact - - id: order_amount + - id: revenue_per_customer type: metric - - - id: quantity - type: fact - - id: revenue_and_quantity_by_product_and_category + - - id: dashboard_plugin + type: analyticalDashboard + - id: dashboard_plugin_1 + type: dashboardPlugin + - - id: dashboard_plugin + type: analyticalDashboard + - id: top_10_products type: visualizationObject - - - id: quantity - type: fact - - id: order_lines + - - id: date type: dataset - - - id: quantity - type: fact - - id: order_amount - type: metric - - - id: spend - type: fact - - id: campaign_spend - type: metric - - - id: spend - type: fact - - id: campaign_channels + - id: date.day + type: attribute + - - id: date type: dataset - - - id: campaign_channel_id - type: label - - id: campaign_channel_id + - id: date.month type: attribute - - - id: campaign_channels.category - type: label - - id: campaign_channels.category + - - id: date + type: dataset + - id: date.quarter type: attribute - - - id: campaign_channels.category - type: label - - id: campaign_spend - type: visualizationObject - - - id: campaign_id - type: label - - id: campaign_id + - - id: date + type: dataset + - id: date.week type: attribute - - - id: campaign_name - type: label - - id: campaign_spend - type: visualizationObject - - - id: campaign_name - type: label - - id: campaign_name_filter - type: filterContext - - - id: campaign_name - type: label - - id: campaign_name + - - id: date + type: dataset + - id: date.year type: attribute - - - id: campaign_name - type: label - - id: revenue_per_usd_vs_spend_by_campaign + - - id: date + type: dataset + - id: order_lines + type: dataset + - - id: date + type: dataset + - id: percentage_of_customers_by_region type: visualizationObject - - - id: customer_id - type: label - - id: customer_id - type: attribute - - - id: customer_name - type: label - - id: revenue_and_quantity_by_product_and_category + - - id: date + type: dataset + - id: product_and_category + type: analyticalDashboard + - - id: date + type: dataset + - id: product_revenue_comparison-over_previous_period type: visualizationObject - - - id: customer_name - type: label - - id: top_10_customers + - - id: date + type: dataset + - id: revenue_by_category_trend type: visualizationObject - - - id: customer_name - type: label - - id: percent_revenue_per_product_by_customer_and_category + - - id: date + type: dataset + - id: revenue_trend type: visualizationObject - - - id: customer_name - type: label - - id: customer_name - type: attribute - - id: date.day - type: label - - id: date.day type: attribute - - - id: date.month + - id: date.day type: label - - id: date.month - type: attribute - - id: date.month + type: attribute + - id: date.month type: label - - id: customers_trend - type: visualizationObject - - id: date.month type: label - id: percentage_of_customers_by_region @@ -311,401 +315,397 @@ interactions: - id: revenue_trend type: visualizationObject - - id: date.quarter - type: label - - id: date.quarter type: attribute - - - id: date.week + - id: date.quarter type: label - - id: date.week + - - id: date.week type: attribute - - - id: date.year + - id: date.week type: label + - - id: date.year + type: attribute - id: date.year + type: label + - - id: date.year type: attribute + - id: product_revenue_comparison-over_previous_period + type: visualizationObject - - id: geo__state__location type: label - id: state type: attribute + - - id: order_amount + type: metric + - id: price + type: fact + - - id: order_amount + type: metric + - id: quantity + type: fact + - - id: order_amount + type: metric + - id: revenue + type: metric - - id: order_id - type: label + type: attribute - id: order_id + type: label + - - id: order_id type: attribute + - id: order_lines + type: dataset - - id: order_line_id - type: label + type: attribute - id: order_line_id + type: label + - - id: order_line_id + type: attribute + - id: order_lines + type: dataset + - - id: order_lines + type: dataset + - id: order_status type: attribute + - - id: order_lines + type: dataset + - id: price + type: fact + - - id: order_lines + type: dataset + - id: products + type: dataset + - - id: order_lines + type: dataset + - id: quantity + type: fact - - id: order_status + type: attribute + - id: order_status type: label - - id: amount_of_valid_orders - type: metric - - id: order_status type: label - - id: order_status + - id: revenue + type: metric + - - id: percent_revenue + type: metric + - id: revenue + type: metric + - - id: percent_revenue + type: metric + - id: total_revenue + type: metric + - - id: percent_revenue_from_top_10_customers + type: metric + - id: revenue + type: metric + - - id: percent_revenue_from_top_10_customers + type: metric + - id: revenue_top_10 + type: metric + - - id: percent_revenue_from_top_10_percent_customers + type: metric + - id: revenue + type: metric + - - id: percent_revenue_from_top_10_percent_customers + type: metric + - id: revenue_top_10_percent + type: metric + - - id: percent_revenue_from_top_10_percent_products + type: metric + - id: product_id type: attribute - - - id: order_status - type: label + - - id: percent_revenue_from_top_10_percent_products + type: metric - id: revenue type: metric - - - id: product_id - type: label + - - id: percent_revenue_from_top_10_percent_products + type: metric + - id: revenue_top_10_percent + type: metric + - - id: percent_revenue_from_top_10_products + type: metric - id: product_id type: attribute - - - id: product_name + - - id: percent_revenue_from_top_10_products + type: metric + - id: revenue + type: metric + - - id: percent_revenue_from_top_10_products + type: metric + - id: revenue_top_10 + type: metric + - - id: percent_revenue_in_category + type: metric + - id: products.category + type: attribute + - - id: percent_revenue_in_category + type: metric + - id: revenue + type: metric + - - id: percent_revenue_in_category + type: metric + - id: revenue_and_quantity_by_product_and_category + type: visualizationObject + - - id: percent_revenue_per_product + type: metric + - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject + - - id: percent_revenue_per_product + type: metric + - id: product_id + type: attribute + - - id: percent_revenue_per_product + type: metric + - id: revenue + type: metric + - - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject + - id: product_and_category + type: analyticalDashboard + - - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject + - id: product_name type: label - - id: product_saleability + - - id: percent_revenue_per_product_by_customer_and_category type: visualizationObject - - - id: product_name + - id: products.category + type: label + - - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject + - id: revenue + type: metric + - - id: percentage_of_customers_by_region + type: visualizationObject + - id: region type: label + - - id: price + type: fact - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - - id: product_name + - - id: product_and_category + type: analyticalDashboard + - id: product_breakdown + type: visualizationObject + - - id: product_and_category + type: analyticalDashboard + - id: product_categories_pie_chart + type: visualizationObject + - - id: product_and_category + type: analyticalDashboard + - id: product_saleability + type: visualizationObject + - - id: product_and_category + type: analyticalDashboard + - id: region_filter + type: filterContext + - - id: product_and_category + type: analyticalDashboard + - id: revenue_trend + type: visualizationObject + - - id: product_and_category + type: analyticalDashboard + - id: top_10_products + type: visualizationObject + - - id: product_breakdown + type: visualizationObject + - id: product_name + type: label + - - id: product_breakdown + type: visualizationObject + - id: products.category + type: label + - - id: product_breakdown + type: visualizationObject + - id: revenue + type: metric + - - id: product_categories_pie_chart + type: visualizationObject + - id: product_name + type: label + - - id: product_categories_pie_chart + type: visualizationObject + - id: products.category + type: label + - - id: product_categories_pie_chart + type: visualizationObject + - id: revenue + type: metric + - - id: product_id + type: attribute + - id: product_id type: label + - - id: product_id + type: attribute + - id: products + type: dataset + - - id: product_name + type: attribute - id: product_name + type: label + - - id: product_name type: attribute + - id: products + type: dataset - - id: product_name type: label - - id: percent_revenue_per_product_by_customer_and_category + - id: product_revenue_comparison-over_previous_period type: visualizationObject - - id: product_name type: label - - id: revenue_by_product + - id: product_saleability type: visualizationObject - - id: product_name type: label - - id: product_breakdown + - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - id: product_name type: label - - id: product_categories_pie_chart + - id: revenue_by_product type: visualizationObject - - id: product_name type: label - id: top_10_products type: visualizationObject - - - id: product_name - type: label - - id: product_revenue_comparison-over_previous_period + - - id: product_revenue_comparison-over_previous_period type: visualizationObject - - - id: products.category + - id: products.category type: label + - - id: product_revenue_comparison-over_previous_period + type: visualizationObject + - id: revenue + type: metric + - - id: product_saleability + type: visualizationObject + - id: revenue + type: metric + - - id: products + type: dataset - id: products.category type: attribute - - id: products.category + type: attribute + - id: products.category type: label - - id: revenue-outdoor - type: metric - - - id: products.category - type: label - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject - - id: products.category type: label - - id: revenue-home + - id: revenue-clothing type: metric - - id: products.category type: label - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - - id: products.category - type: label - - id: revenue_by_category_trend - type: visualizationObject + - id: revenue-electronic + type: metric - - id: products.category type: label - - id: revenue-electronic + - id: revenue-home type: metric - - id: products.category type: label - - id: revenue-clothing + - id: revenue-outdoor type: metric - - id: products.category type: label - - id: product_breakdown + - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - id: products.category type: label - - id: product_categories_pie_chart + - id: revenue_by_category_trend type: visualizationObject - - id: products.category type: label - id: top_10_products type: visualizationObject - - - id: products.category - type: label - - id: product_revenue_comparison-over_previous_period + - - id: quantity + type: fact + - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - id: region - type: label - - id: region type: attribute - - - id: region + - id: region type: label - - id: percentage_of_customers_by_region - type: visualizationObject - - id: region type: label - id: region_filter type: filterContext - - - id: state - type: label - - id: top_10_customers - type: visualizationObject - - - id: state - type: label - - id: state - type: attribute - - - id: type - type: label - - id: type - type: attribute - - - id: type - type: label - - id: campaign_spend - type: visualizationObject - - - id: amount_of_active_customers - type: metric - - id: amount_of_top_customers - type: metric - - - id: amount_of_active_customers - type: metric - - id: customers_trend - type: visualizationObject - - - id: amount_of_active_customers - type: metric - - id: percentage_of_customers_by_region - type: visualizationObject - - - id: amount_of_orders - type: metric - - id: amount_of_valid_orders - type: metric - - - id: amount_of_orders - type: metric - - id: product_saleability - type: visualizationObject - - - id: amount_of_orders - type: metric - - id: revenue_trend - type: visualizationObject - - - id: campaign_spend - type: metric - - id: campaign_spend - type: visualizationObject - - - id: campaign_spend - type: metric - - id: revenue_per_usd_vs_spend_by_campaign - type: visualizationObject - - - id: campaign_spend - type: metric - - id: revenue_per_dollar_spent - type: metric - - - id: order_amount - type: metric - - id: revenue - type: metric - - - id: percent_revenue_in_category - type: metric - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject - - - id: percent_revenue_per_product - type: metric - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - - id: revenue - type: metric - - id: amount_of_top_customers - type: metric - - - id: revenue - type: metric - - id: revenue_top_10_percent - type: metric - - - id: revenue - type: metric - - id: percent_revenue_from_top_10_percent_customers - type: metric - - - id: revenue - type: metric - - id: product_saleability - type: visualizationObject - - - id: revenue - type: metric - - id: revenue_per_customer - type: metric - - - id: revenue - type: metric - - id: percent_revenue_in_category - type: metric - - - id: revenue - type: metric - - id: percent_revenue_per_product - type: metric - - - id: revenue - type: metric - - id: revenue-electronic - type: metric - - id: revenue type: metric - id: revenue-clothing type: metric - - id: revenue type: metric - - id: product_breakdown - type: visualizationObject - - - id: revenue - type: metric - - id: revenue_per_dollar_spent - type: metric - - - id: revenue - type: metric - - id: percent_revenue_from_top_10_customers + - id: revenue-electronic type: metric - - id: revenue type: metric - - id: percent_revenue_from_top_10_percent_products + - id: revenue-home type: metric - - id: revenue type: metric - - id: percent_revenue + - id: revenue-outdoor type: metric - - id: revenue type: metric - - id: total_revenue - type: metric + - id: revenue_and_quantity_by_product_and_category + type: visualizationObject - - id: revenue type: metric - - id: product_revenue_comparison-over_previous_period + - id: revenue_by_category_trend type: visualizationObject - - id: revenue type: metric - - id: revenue-outdoor - type: metric + - id: revenue_by_product + type: visualizationObject - - id: revenue type: metric - - id: revenue_top_10 - type: metric - - - id: revenue + - id: revenue_per_customer type: metric - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject - - id: revenue type: metric - - id: percent_revenue_from_top_10_products + - id: revenue_per_dollar_spent type: metric - - id: revenue type: metric - - id: revenue-home + - id: revenue_top_10 type: metric - - id: revenue type: metric - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - - id: revenue + - id: revenue_top_10_percent type: metric - - id: revenue_by_category_trend - type: visualizationObject - - id: revenue type: metric - id: revenue_trend type: visualizationObject - - id: revenue type: metric - - id: revenue_by_product - type: visualizationObject - - - id: revenue - type: metric - - id: product_categories_pie_chart - type: visualizationObject - - - id: revenue_per_customer + - id: total_revenue type: metric - - id: customers_trend - type: visualizationObject - - id: revenue_per_dollar_spent type: metric - id: revenue_per_usd_vs_spend_by_campaign type: visualizationObject - - id: revenue_top_10 type: metric - - id: top_10_products + - id: top_10_customers type: visualizationObject - - id: revenue_top_10 type: metric + - id: top_10_products + type: visualizationObject + - - id: state + type: attribute + - id: state + type: label + - - id: state + type: label - id: top_10_customers type: visualizationObject - - - id: revenue_top_10 - type: metric - - id: percent_revenue_from_top_10_customers - type: metric - - - id: revenue_top_10 - type: metric - - id: percent_revenue_from_top_10_products - type: metric - - - id: revenue_top_10_percent - type: metric - - id: percent_revenue_from_top_10_percent_products - type: metric - - - id: revenue_top_10_percent - type: metric - - id: percent_revenue_from_top_10_percent_customers - type: metric - - id: total_revenue type: metric - id: total_revenue-no_filters type: metric - - - id: total_revenue - type: metric - - id: percent_revenue - type: metric - - - id: campaign_spend - type: visualizationObject - - id: campaign - type: analyticalDashboard - - - id: customers_trend - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: product_breakdown - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: product_categories_pie_chart - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: product_saleability - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: revenue_per_usd_vs_spend_by_campaign - type: visualizationObject - - id: campaign - type: analyticalDashboard - - - id: revenue_trend - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: top_10_products - type: visualizationObject - - id: product_and_category - type: analyticalDashboard - - - id: top_10_products - type: visualizationObject - - id: dashboard_plugin - type: analyticalDashboard - - - id: campaign_name_filter - type: filterContext - - id: campaign - type: analyticalDashboard - - - id: campaign_name_filter - type: filterContext - - id: dashboard_plugin - type: analyticalDashboard - - - id: region_filter - type: filterContext - - id: product_and_category - type: analyticalDashboard + - - id: type + type: attribute + - id: type + type: label nodes: - id: campaign title: Campaign diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml index 68d7e0129..9fe301256 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml @@ -1776,10 +1776,10 @@ interactions: type: label labels: data: - - id: state - type: label - id: geo__state__location type: label + - id: state + type: label type: attribute - attributes: areRelationsValid: true @@ -1847,32 +1847,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -1889,38 +1889,38 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - - filterColumn: wdf__state + - filterColumn: wdf__region filterColumnDataType: STRING filterId: - id: wdf__state + id: wdf__region type: workspaceDataFilter - - filterColumn: wdf__region + - filterColumn: wdf__state filterColumnDataType: STRING filterId: - id: wdf__region + id: wdf__state type: workspaceDataFilter id: order_lines links: @@ -2510,32 +2510,32 @@ interactions: type: attribute referenceProperties: - identifier: - id: products + id: campaigns type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: product_id + - column: campaign_id dataType: INT isNullable: true nullValue: null target: - id: product_id + id: campaign_id type: attribute - identifier: - id: campaigns + id: customers type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: campaign_id + - column: customer_id dataType: INT isNullable: true nullValue: null target: - id: campaign_id + id: customer_id type: attribute - identifier: id: date @@ -2552,38 +2552,38 @@ interactions: id: date type: date - identifier: - id: customers + id: products type: dataset multivalue: false sourceColumnDataTypes: null sourceColumns: null sources: - - column: customer_id + - column: product_id dataType: INT isNullable: true nullValue: null target: - id: customer_id + id: product_id type: attribute tags: - Order lines title: Order lines type: NORMAL workspaceDataFilterColumns: - - dataType: STRING - name: wdf__state - dataType: STRING name: wdf__region + - dataType: STRING + name: wdf__state workspaceDataFilterReferences: - - filterColumn: wdf__state + - filterColumn: wdf__region filterColumnDataType: STRING filterId: - id: wdf__state + id: wdf__region type: workspaceDataFilter - - filterColumn: wdf__region + - filterColumn: wdf__state filterColumnDataType: STRING filterId: - id: wdf__region + id: wdf__state type: workspaceDataFilter id: order_lines links: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml index 1183aab6e..1739f860a 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml @@ -48,72 +48,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -146,24 +164,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -178,16 +187,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml @@ -495,72 +506,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -593,24 +622,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -625,16 +645,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml @@ -928,8 +950,12 @@ interactions: body: ' CampaignCampaign.Budget AggBudget + Agg.Campaign + channels per categoryCampaign channels per category.CampaignCampaign.Free-form translations are marked by the ''id'' attribute, which is a hash combining @@ -1003,10 +1029,6 @@ interactions: id="attribute.campaign_channels.category.title">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1020,9 +1042,25 @@ interactions: id="attribute.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Order idOrder id.Order idOrder id.Order @@ -1044,29 +1082,17 @@ interactions: id="attribute.products.category">CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year - (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Campaign + id="attribute.state.tags">CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign channelsCampaign channels.Campaign channelsCampaign channels.Campaign @@ -1083,15 +1109,15 @@ interactions: id="dataset.customers">CustomersCustomers.CustomersCustomers.CustomersCustomers.DateDate.DateDate.Order linesOrder lines.Order linesOrder lines.Order linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.ProductsProducts.BudgetBudget.BudgetBudget.Campaign channelsCampaign @@ -1104,11 +1130,11 @@ interactions: lines.SpendSpend.SpendSpend.Campaign channelsCampaign - channels.Budget - AggBudget Agg.Campaign - channels per categoryCampaign channels per category.filterContextfilterContext.filterContextfilterContext.Campaign channel idCampaign channel id.Campaign channel @@ -1117,9 +1143,6 @@ interactions: id="label.campaign_channels.category">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1133,12 +1156,24 @@ interactions: id="label.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.LocationLocation.LocationLocation.CustomersCustomers.CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter - and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.# + id="label.region">RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.# of Active Customers# of Active Customers.# of Orders# of Orders.% Revenue from Top 10 Customers.% Revenue from Top 10% Customers% Revenue from Top 10% Customers.Revenue - (Outdoor)Revenue (Outdoor).% Revenue from Top 10% Products% Revenue from Top 10% Products.% @@ -1218,6 +1243,8 @@ interactions: (Electronic)Revenue (Electronic).Revenue (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue per CustomerRevenue per Customer.Revenue @@ -1395,11 +1422,7 @@ interactions: the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext.' + / Top 10Revenue / Top 10.' headers: Accept: - '*/*' @@ -1446,70 +1469,83 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: CampaignCampaign. + + Budget AggBudget + Agg.Campaign + channels per categoryCampaign channels per category.CampaignCampaign.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueSpend breakdown and Revenue.The - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.The first insight shows a breakdown of spend - by category and campaign. The second shows revenue per $ spend, for each - campaign, to demonstrate, how campaigns are successful..The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.The first insight shows a + breakdown of spend by category and campaign. The second shows revenue per + $ spend, for each campaign, to demonstrate, how campaigns are successful..Campaign - SpendCampaign Spend.Revenue - per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Dashboard + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />Campaign SpendCampaign Spend.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend + by Campaign.Dashboard pluginDashboard plugin.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleDHO simple.Product + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />DHO simpleDHO simple.Product & CategoryProduct & Category.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsTop 10 Products.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsTop 10 Products.Revenue - TrendRevenue Trend.Customers - TrendCustomers Trend.Product - Categories Pie ChartProduct Categories Pie Chart.Revenue TrendRevenue Trend.Customers TrendCustomers Trend.Product Categories Pie ChartProduct Categories Pie Chart.Product - BreakdownProduct Breakdown.Product BreakdownProduct Breakdown.Product - SaleabilityProduct Saleability.Product SaleabilityProduct Saleability.% - Revenue per Product by Customer and Category% Revenue per - Product by Customer and Category.Campaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />% Revenue per Product by Customer and Category% Revenue + per Product by Customer and Category.Campaign channel idCampaign channel id.Campaign channel idCampaign channel id.CategoryCategory.Campaign channelsCampaign channels.TypeType.TypeType.Campaign channelsCampaign - channels.Campaign idCampaign - id.Campaign + id="attribute.campaign_id">Campaign + idCampaign id.Campaign idCampaign id.CampaignsCampaigns.Campaign nameCampaign name.Campaign @@ -1535,9 +1567,25 @@ interactions: id="attribute.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Order idOrder id.Order idOrder id.Order @@ -1559,29 +1607,17 @@ interactions: id="attribute.products.category">CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year - (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Campaign + id="attribute.state.tags">CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign channelsCampaign channels.Campaign channelsCampaign channels.Campaign @@ -1598,16 +1634,16 @@ interactions: id="dataset.customers">CustomersCustomers.CustomersCustomers.CustomersCustomers.DateDate.DateDate.Order linesOrder lines.Order linesOrder lines.Order linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.ProductsProducts.BudgetBudget.BudgetBudget.Campaign channelsCampaign @@ -1622,11 +1658,11 @@ interactions: lines.SpendSpend.SpendSpend.Campaign channelsCampaign - channels.Budget AggBudget - Agg.Campaign - channels per categoryCampaign channels per category.filterContextfilterContext.filterContextfilterContext.Campaign channel idCampaign channel id.Campaign channel @@ -1635,10 +1671,6 @@ interactions: id="label.campaign_channels.category">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1652,12 +1684,24 @@ interactions: id="label.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.LocationLocation.LocationLocation.CustomersCustomers.CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter - and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.# + id="label.region">RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.# of Active Customers# of Active Customers.# of Orders# of Orders.# of Top Customers.# of Valid Orders# of Valid Orders.Campaign SpendCampaign Spend.Order @@ -1719,8 +1755,6 @@ interactions: Revenue from Top 10 Customers% Revenue from Top 10 Customers.% Revenue from Top 10% Customers% Revenue from Top 10% Customers.Revenue - (Outdoor)Revenue (Outdoor).% Revenue from Top 10% Products% Revenue from Top 10% Products.% @@ -1730,13 +1764,15 @@ interactions: id="metric.percent_revenue_per_product">% Revenue per Product% Revenue per Product.RevenueRevenue.Revenue (Clothing)Revenue (Clothing).Revenue (Electronic)Revenue (Electronic).Revenue (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue per CustomerRevenue per Customer.Revenue @@ -1752,175 +1788,176 @@ interactions: id="visualizationObject">Campaign SpendCampaign Spend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign Spend.Campaign SpendCampaign Spend.Customers TrendCustomers Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active Customers.# of Active Customers# of Active Customers.Revenue - per CustomerRevenue per Customer.Revenue per CustomerRevenue per Customer.Active - CustomersActive Customers.Active CustomersActive Customers.% Revenue per Product by Customer and Category% Revenue per Product by Customer and Category.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per Product% Revenue per Product.% Revenue per Product% Revenue per Product.RevenueRevenue.RevenueRevenue.Percentage of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active Customers.# of Active Customers# of Active Customers.Product BreakdownProduct Breakdown.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Product Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% Revenue.% Revenue% Revenue.Product Revenue Comparison (over previous period)Product Revenue Comparison (over previous period).Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.Previous - PeriodPrevious Period.This - PeriodThis Period.RevenueRevenue.Previous PeriodPrevious Period.This PeriodThis Period.Product SaleabilityProduct Saleability.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Orders# of Orders.RevenueRevenue.Number - of OrdersNumber of Orders.# of Orders# of Orders.RevenueRevenue.Number of OrdersNumber of Orders.Revenue and Quantity by Product and CategoryRevenue and Quantity by Product and Category.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantitySum of Quantity.Sum of QuantitySum of Quantity.Avg - PriceAvg Price.% - Revenue in Category% Revenue in Category.Avg PriceAvg Price.% Revenue in Category% Revenue in Category.RevenueRevenue.Items - SoldItems Sold.Total - RevenueTotal Revenue.RevenueRevenue.Items SoldItems Sold.Total RevenueTotal Revenue.Revenue by Category TrendRevenue by Category Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Revenue by ProductRevenue by Product.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign Spend.Revenue - per Dollar SpentRevenue per Dollar Spent.Campaign SpendCampaign Spend.Revenue per Dollar SpentRevenue per Dollar Spent.Revenue TrendRevenue Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.# - of Orders# of Orders.Number - of OrdersNumber of Orders.RevenueRevenue.# of Orders# of Orders.Number of OrdersNumber of Orders.Top 10 CustomersTop 10 Customers.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.Revenue / Top 10Revenue / Top 10.Top 10 ProductsTop 10 Products.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext. + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10Revenue / Top 10.' headers: Content-Type: - application/xml diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml index 88e75d5ac..fc332def2 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml @@ -48,72 +48,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -146,24 +164,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -178,16 +187,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml @@ -495,72 +506,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -593,24 +622,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -625,16 +645,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml @@ -928,8 +950,12 @@ interactions: body: ' CampaignCampaign.Budget AggBudget + Agg.Campaign + channels per categoryCampaign channels per category.CampaignCampaign.Free-form translations are marked by the ''id'' attribute, which is a hash combining @@ -1003,10 +1029,6 @@ interactions: id="attribute.campaign_channels.category.title">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1020,9 +1042,25 @@ interactions: id="attribute.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Order idOrder id.Order idOrder id.Order @@ -1044,29 +1082,17 @@ interactions: id="attribute.products.category">CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year - (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Campaign + id="attribute.state.tags">CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign channelsCampaign channels.Campaign channelsCampaign channels.Campaign @@ -1083,15 +1109,15 @@ interactions: id="dataset.customers">CustomersCustomers.CustomersCustomers.CustomersCustomers.DateDate.DateDate.Order linesOrder lines.Order linesOrder lines.Order linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.ProductsProducts.BudgetBudget.BudgetBudget.Campaign channelsCampaign @@ -1104,11 +1130,11 @@ interactions: lines.SpendSpend.SpendSpend.Campaign channelsCampaign - channels.Budget - AggBudget Agg.Campaign - channels per categoryCampaign channels per category.filterContextfilterContext.filterContextfilterContext.Campaign channel idCampaign channel id.Campaign channel @@ -1117,9 +1143,6 @@ interactions: id="label.campaign_channels.category">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1133,12 +1156,24 @@ interactions: id="label.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.LocationLocation.LocationLocation.CustomersCustomers.Product idProduct id.Product idProduct id.ProductsProducts.Product - nameProduct name.Product - nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter - and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.# + id="label.product_name">Product + nameProduct name.Product + nameProduct name.ProductsProducts.CategoryCategory.CategoryCategory.ProductsProducts.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.# of Active Customers# of Active Customers.# of Orders# of Orders.% Revenue from Top 10 Customers.% Revenue from Top 10% Customers% Revenue from Top 10% Customers.Revenue - (Outdoor)Revenue (Outdoor).% Revenue from Top 10% Products% Revenue from Top 10% Products.% @@ -1218,6 +1243,8 @@ interactions: (Electronic)Revenue (Electronic).Revenue (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue per CustomerRevenue per Customer.Revenue @@ -1395,11 +1422,7 @@ interactions: the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext.' + / Top 10Revenue / Top 10.' headers: Accept: - '*/*' @@ -1446,70 +1469,83 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: CampaignCampaign. + + Budget AggBudget + Agg.Campaign + channels per categoryCampaign channels per category.CampaignCampaign.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueSpend breakdown and Revenue.The - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.The first insight shows a breakdown of spend - by category and campaign. The second shows revenue per $ spend, for each - campaign, to demonstrate, how campaigns are successful..The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.The first insight shows a + breakdown of spend by category and campaign. The second shows revenue per + $ spend, for each campaign, to demonstrate, how campaigns are successful..Campaign - SpendCampaign Spend.Revenue - per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Dashboard + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />Campaign SpendCampaign Spend.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend + by Campaign.Dashboard pluginDashboard plugin.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleDHO simple.Product + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />DHO simpleDHO simple.Product & CategoryProduct & Category.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsTop 10 Products.Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsTop 10 Products.Revenue - TrendRevenue Trend.Customers - TrendCustomers Trend.Product - Categories Pie ChartProduct Categories Pie Chart.Revenue TrendRevenue Trend.Customers TrendCustomers Trend.Product Categories Pie ChartProduct Categories Pie Chart.Product - BreakdownProduct Breakdown.Product BreakdownProduct Breakdown.Product - SaleabilityProduct Saleability.Product SaleabilityProduct Saleability.% - Revenue per Product by Customer and Category% Revenue per - Product by Customer and Category.Campaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />% Revenue per Product by Customer and Category% Revenue + per Product by Customer and Category.Campaign channel idCampaign channel id.Campaign channel idCampaign channel id.CategoryCategory.Campaign channelsCampaign channels.TypeType.TypeType.Campaign channelsCampaign - channels.Campaign idCampaign - id.Campaign + id="attribute.campaign_id">Campaign + idCampaign id.Campaign idCampaign id.CampaignsCampaigns.Campaign nameCampaign name.Campaign @@ -1535,9 +1567,25 @@ interactions: id="attribute.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year + (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.Order idOrder id.Order idOrder id.Order @@ -1559,29 +1607,17 @@ interactions: id="attribute.products.category">CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year - (Q1/2020)Quarter and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Campaign + id="attribute.state.tags">CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.Campaign channelsCampaign channels.Campaign channelsCampaign channels.Campaign @@ -1598,16 +1634,16 @@ interactions: id="dataset.customers">CustomersCustomers.CustomersCustomers.CustomersCustomers.DateDate.DateDate.Order linesOrder lines.Order linesOrder lines.Order linesOrder lines.ProductsProducts.ProductsProducts.ProductsProducts.DateDate.DateDate.ProductsProducts.BudgetBudget.BudgetBudget.Campaign channelsCampaign @@ -1622,11 +1658,11 @@ interactions: lines.SpendSpend.SpendSpend.Campaign channelsCampaign - channels.Budget AggBudget - Agg.Campaign - channels per categoryCampaign channels per category.filterContextfilterContext.filterContextfilterContext.Campaign channel idCampaign channel id.Campaign channel @@ -1635,10 +1671,6 @@ interactions: id="label.campaign_channels.category">CategoryCategory.CategoryCategory.Campaign channelsCampaign - channels.TypeType.TypeType.Campaign channelsCampaign channels.Campaign idCampaign id.Campaign @@ -1652,12 +1684,24 @@ interactions: id="label.customer_name">Customer nameCustomer name.Customer nameCustomer name.CustomersCustomers.RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.Date + - DateDate - Date.DateDate.DateDate.Date + - Month/YearDate - Month/Year.Month and Year (12/2020)Month + and Year (12/2020).DateDate.Date + - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter + and Year (Q1/2020).DateDate.Date + - Week/YearDate - Week/Year.Week and Year (W52/2020)Week + and Year (W52/2020).DateDate.Date + - YearDate - Year.YearYear.DateDate.LocationLocation.LocationLocation.CustomersCustomers.CategoryCategory.CategoryCategory.ProductsProducts.Date - - DateDate - Date.DateDate.DateDate.Date - - Week/YearDate - Week/Year.Week and Year (W52/2020)Week - and Year (W52/2020).DateDate.Date - - Month/YearDate - Month/Year.Month and Year (12/2020)Month - and Year (12/2020).DateDate.Date - - Quarter/YearDate - Quarter/Year.Quarter and Year (Q1/2020)Quarter - and Year (Q1/2020).DateDate.Date - - YearDate - Year.YearYear.DateDate.# + id="label.region">RegionRegion.RegionRegion.CustomersCustomers.StateState.StateState.CustomersCustomers.TypeType.TypeType.Campaign channelsCampaign + channels.# of Active Customers# of Active Customers.# of Orders# of Orders.# of Top Customers.# of Valid Orders# of Valid Orders.Campaign SpendCampaign Spend.Order @@ -1719,8 +1755,6 @@ interactions: Revenue from Top 10 Customers% Revenue from Top 10 Customers.% Revenue from Top 10% Customers% Revenue from Top 10% Customers.Revenue - (Outdoor)Revenue (Outdoor).% Revenue from Top 10% Products% Revenue from Top 10% Products.% @@ -1730,13 +1764,15 @@ interactions: id="metric.percent_revenue_per_product">% Revenue per Product% Revenue per Product.RevenueRevenue.Revenue (Clothing)Revenue (Clothing).Revenue (Electronic)Revenue (Electronic).Revenue (Home)Revenue (Home).Revenue + (Outdoor)Revenue (Outdoor).Revenue per CustomerRevenue per Customer.Revenue @@ -1752,175 +1788,176 @@ interactions: id="visualizationObject">Campaign SpendCampaign Spend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign Spend.Campaign SpendCampaign Spend.Customers TrendCustomers Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active Customers.# of Active Customers# of Active Customers.Revenue - per CustomerRevenue per Customer.Revenue per CustomerRevenue per Customer.Active - CustomersActive Customers.Active CustomersActive Customers.% Revenue per Product by Customer and Category% Revenue per Product by Customer and Category.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per Product% Revenue per Product.% Revenue per Product% Revenue per Product.RevenueRevenue.RevenueRevenue.Percentage of Customers by RegionPercentage of Customers by Region.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active Customers.# of Active Customers# of Active Customers.Product BreakdownProduct Breakdown.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Product Categories Pie ChartProduct Categories Pie Chart.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% Revenue.% Revenue% Revenue.Product Revenue Comparison (over previous period)Product Revenue Comparison (over previous period).Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.Previous - PeriodPrevious Period.This - PeriodThis Period.RevenueRevenue.Previous PeriodPrevious Period.This PeriodThis Period.Product SaleabilityProduct Saleability.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Orders# of Orders.RevenueRevenue.Number - of OrdersNumber of Orders.# of Orders# of Orders.RevenueRevenue.Number of OrdersNumber of Orders.Revenue and Quantity by Product and CategoryRevenue and Quantity by Product and Category.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantitySum of Quantity.Sum of QuantitySum of Quantity.Avg - PriceAvg Price.% - Revenue in Category% Revenue in Category.Avg PriceAvg Price.% Revenue in Category% Revenue in Category.RevenueRevenue.Items - SoldItems Sold.Total - RevenueTotal Revenue.RevenueRevenue.Items SoldItems Sold.Total RevenueTotal Revenue.Revenue by Category TrendRevenue by Category Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Revenue by ProductRevenue by Product.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.RevenueRevenue.Revenue per $ vs Spend by CampaignRevenue per $ vs Spend by Campaign.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign Spend.Revenue - per Dollar SpentRevenue per Dollar Spent.Campaign SpendCampaign Spend.Revenue per Dollar SpentRevenue per Dollar Spent.Revenue TrendRevenue Trend.Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue.# - of Orders# of Orders.Number - of OrdersNumber of Orders.RevenueRevenue.# of Orders# of Orders.Number of OrdersNumber of Orders.Top 10 CustomersTop 10 Customers.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.Revenue / Top 10Revenue / Top 10.Top 10 ProductsTop 10 Products.Free-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10.filterContextfilterContext.filterContextfilterContext. + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10Revenue / Top 10.' headers: Content-Type: - application/xml @@ -1982,72 +2019,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -2080,24 +2135,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -2112,16 +2158,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml index f01409e71..71e9cf70e 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml @@ -18,72 +18,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -116,24 +134,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -148,16 +157,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml index e9ca4b40a..b1e95a3bf 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml @@ -18,72 +18,78 @@ interactions: uri: http://localhost:3000/api/v1/actions/workspaces/demo/translations/retrieve response: body: - string: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns - are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. + The second shows revenue per $ spend, for each campaign, to demonstrate, + how campaigns are successful.Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, - the source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryDHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about + its general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.description" + />Campaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign - channelsTypeTypeCampaign channelsCampaign - idCampaign - idCampaignsCampaign idCampaign idCampaignsCampaign nameCampaign nameCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -116,24 +134,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -148,16 +157,16 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per + Dollar SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendCampaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active CustomersRevenue - per CustomerActive - Customers# of Active CustomersRevenue per CustomerActive Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue per ProductRevenuePercentage + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />% Revenue per ProductRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of Active Customers# of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueProduct + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% - Revenue% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenuePrevious - PeriodThis - PeriodRevenuePrevious PeriodThis PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# - of OrdersRevenueNumber - of Orders# of OrdersRevenueNumber of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum - of QuantityAvg - Price% - Revenue in CategoryRevenueItems - SoldTotal - RevenueSum of QuantityAvg Price% Revenue in CategoryRevenueItems SoldTotal RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />RevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign - SpendRevenue - per Dollar SpentCampaign SpendRevenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue# - of OrdersNumber - of OrdersRevenue# of OrdersNumber of OrdersTop 10 CustomersFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining - the JSON path and the source text's value. Since this hash is hard to read, + translations are marked by the ''id'' attribute, which is a hash combining + the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" + />Revenue / Top 10' headers: Content-Type: - application/xml @@ -449,67 +460,74 @@ interactions: code: 200 message: OK - request: - body: + + Budget AggCampaign channels per + categoryCampaignFree-form - translations are marked by the 'id' attribute, which is a hash combining the - JSON path and the source text's value. Since this hash is hard to read, the - source text includes extra details about its general location.Spend + id="1" type="free-form:path" value="$.layout.sections[*].header.title" />Spend breakdown and RevenueThe - first insight shows a breakdown of spend by category and campaign. The second - shows revenue per $ spend, for each campaign, to demonstrate, how campaigns + id="1" type="free-form:path" value="$.layout.sections[*].header.description" + />The first insight shows a breakdown of spend by category and campaign. The + second shows revenue per $ spend, for each campaign, to demonstrate, how campaigns are successful.Campaign - SpendRevenue - per $ vs Spend by CampaignDashboard + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />Campaign SpendRevenue per $ vs Spend by CampaignDashboard pluginFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.DHO - simpleProduct - & CategoryFree-form - translations are marked by the 'id' attribute, which is a hash combining the - JSON path and the source text's value. Since this hash is hard to read, the - source text includes extra details about its general location.Top - 10 ProductsRevenue - TrendCustomers - TrendProduct - Categories Pie ChartProduct - BreakdownProduct - Saleability% - Revenue per Product by Customer and CategoryCampaign - channel idCampaign + id="1" type="free-form:path" value="$.layout.sections[*].items[*].widget.title" + />DHO simpleProduct + & CategoryFree-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since + this hash is hard to read, the source text includes extra details about its + general location.Top 10 ProductsRevenue TrendCustomers TrendProduct Categories Pie ChartProduct BreakdownProduct Saleability% Revenue per Product by Customer and CategoryCampaign channel + idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateOrder idOrder idOrder @@ -545,24 +575,15 @@ interactions: id="attribute.products.category">CategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersCustomersTypeTypeCampaign channelsCampaign channelsCampaign channelsCampaign @@ -577,16 +598,15 @@ interactions: id="dataset.customers">CustomersCustomersCustomersDateDateOrder linesOrder linesOrder linesProductsProductsProductsDateDateProductsBudgetBudgetCampaign channelsSpendSpendCampaign channelsBudget AggCampaign channels per - categoryCampaign + id="filterContext">filterContextfilterContextCampaign channel idCampaign channel idCampaign channelsCategoryCategoryCampaign channelsTypeTypeCampaign channelsCampaign idCampaign idCampaignsCustomer nameCustomer nameCustomersRegionRegionCustomersStateStateCustomersDate + - DateDateDateDate + - Month/YearMonth + and Year (12/2020)DateDate + - Quarter/YearQuarter + and Year (Q1/2020)DateDate + - Week/YearWeek + and Year (W52/2020)DateDate + - YearYearDateLocationLocationCustomersCategoryCategoryProductsDate - - DateDateDateDate - - Week/YearWeek - and Year (W52/2020)DateDate - - Month/YearMonth - and Year (12/2020)DateDate - - Quarter/YearQuarter - and Year (Q1/2020)DateDate - - YearYearDateRegionRegionCustomersStateStateCustomersTypeTypeCampaign channels# of Active Customers# of Orders# of Top Customers# of Valid OrdersCampaign SpendOrder Amount% Revenue from Top 10 Customers% - Revenue from Top 10% CustomersRevenue (Outdoor)% + Revenue from Top 10% Customers% Revenue from Top 10% Products% Revenue from Top 10 Products% Revenue per ProductRevenueRevenue (Clothing)Revenue (Electronic)Revenue - (Home)Revenue per CustomerRevenue - per Dollar SpentRevenue (Outdoor)Revenue + per CustomerRevenue per Dollar + SpentRevenue / Top 10Revenue / Top 10%Campaign SpendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Campaign SpendCustomers TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" /># of Active CustomersRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Revenue per CustomerActive + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Active Customers% Revenue per Product by Customer and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />% Revenue per ProductRevenueRevenuePercentage of Customers by RegionFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" /># of Active CustomersProduct BreakdownFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenueProduct Categories Pie ChartFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.% + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />% RevenueProduct Revenue Comparison (over previous period)Free-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenuePrevious + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Previous PeriodThis + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />This PeriodProduct SaleabilityFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.# + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" /># of OrdersRevenueRevenueNumber + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Number of OrdersRevenue and Quantity by Product and CategoryFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Sum + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Sum of QuantityAvg + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Avg Price% + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />% Revenue in CategoryRevenueRevenueItems + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Items SoldTotal + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Total RevenueRevenue by Category TrendFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenueRevenue by ProductFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.RevenueRevenueRevenue per $ vs Spend by CampaignFree-form translations are marked by the 'id' attribute, - which is a hash combining the JSON path and the source text's value. Since + appliesTo="source">Free-form translations are marked by the ''id'' attribute, + which is a hash combining the JSON path and the source text''s value. Since this hash is hard to read, the source text includes extra details about its general location.Campaign + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Campaign SpendRevenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Revenue per Dollar SpentRevenue TrendFree-form - translations are marked by the 'id' attribute, which is a hash combining the - JSON path and the source text's value. Since this hash is hard to read, the - source text includes extra details about its general location.RevenueRevenue# + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" /># of OrdersNumber + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.alias" />Number of OrdersTop 10 CustomersFree-form - translations are marked by the 'id' attribute, which is a hash combining the - JSON path and the source text's value. Since this hash is hard to read, the - source text includes extra details about its general location.Revenue + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Revenue / Top 10Top 10 ProductsFree-form - translations are marked by the 'id' attribute, which is a hash combining the - JSON path and the source text's value. Since this hash is hard to read, the - source text includes extra details about its general location.Revenue - / Top 10filterContextfilterContext + id="1" type="free-form:path" value="$.buckets[*].items[*].measure.title" />Revenue + / Top 10' headers: Accept: - '*/*' diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml index 98ea039e4..64626d3ba 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml @@ -102,11 +102,11 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_3 + executionResult: EXECUTION_NORMALIZED_CSV headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -114,8 +114,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -132,7 +134,7 @@ interactions: price: format: '' title: Sum Of Price - executionResult: EXECUTION_NORMALIZED_3 + executionResult: EXECUTION_NORMALIZED_CSV fileName: test_csv format: CSV headers: @@ -151,18 +153,20 @@ interactions: response: body: string: - exportResult: EXPORT_NORMALIZED_1 + exportResult: EXPORT_NORMALIZED_CSV headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 201 message: Created @@ -179,19 +183,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -208,19 +214,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -237,7 +245,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: "\uFEFF\"state\",\"Custom Title Region\",\"Sum Of Price\",\"Order\ @@ -272,14 +280,16 @@ interactions: - attachment; filename="=?UTF-8?Q?test=5Fcsv.csv?="; filename*=UTF-8''test_csv.csv Content-Type: - text/csv - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml index 119388e02..1a6be23ad 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml @@ -168,7 +168,7 @@ interactions: headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -176,7 +176,8 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -201,18 +202,20 @@ interactions: response: body: string: - exportResult: EXPORT_NORMALIZED_3 + exportResult: EXPORT_NORMALIZED_CSV headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 201 message: Created @@ -229,19 +232,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_3 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -258,19 +263,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_3 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -287,19 +294,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_3 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -316,19 +325,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_3 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -345,7 +356,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_3 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_CSV response: body: string: "\uFEFF\"Date - Month/Year\",\"2025-04\",\"2025-05\",\"2025-06\",\"\ @@ -357,14 +368,16 @@ interactions: - attachment; filename="=?UTF-8?Q?Customers_Trend.csv?="; filename*=UTF-8''Customers%20Trend.csv Content-Type: - text/csv - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml index 339cde91c..ac7d9b3bb 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml @@ -102,11 +102,11 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_3 + executionResult: EXECUTION_NORMALIZED_XLSX headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -114,8 +114,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -132,7 +134,7 @@ interactions: price: format: '' title: Sum Of Price - executionResult: EXECUTION_NORMALIZED_3 + executionResult: EXECUTION_NORMALIZED_XLSX fileName: test_xlsx format: XLSX headers: @@ -151,18 +153,20 @@ interactions: response: body: string: - exportResult: EXPORT_NORMALIZED_2 + exportResult: EXPORT_NORMALIZED_XLSX headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 201 message: Created @@ -179,19 +183,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_2 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -208,7 +214,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_2 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: "PK\x03\x04\x14\0\0\0\b\0\0\0?\0a]I:O\x01\0\0\uFFFD\x04\0\0\x13\0\0\ @@ -490,72 +496,76 @@ interactions: ,\uFFFD\uFFFD\uFFFD\x10tni\uFFFDe\uFFFD\uFFFD\uFFFD1j\x11\uFFFD\u058Ax_\uFFFD\ \uFFFD9\uFFFD\uFFFD\uFFFD\uFFFDg\uFFFD{sg{\x06_{g\uFFFD\uFFFD^.Q[;\uFFFD\ \u4AE5?\uFFFD\uFFFD\uFFFD>\uFFFD\u0781\uFFFD\u0484)Y\uFFFDMz\0G\uFFFD\uFFFD\ - \uFFFD/\x03\uFFFDc/H\uFFFD\uFFFD\x06PK\x03\x04\x14\0\0\0\b\0\0\0?\0yG\x05\ - n%\x01\0\0P\x02\0\0\x11\0\0\0docProps/core.xml\uFFFD\uFFFD\uFFFDj\uFFFD\ - 0\x10\uFFFD\uFFFD}\n\uFFFD\uFFFD-\uFFFDiC\x10\uFFFD\x03m\u0269\uFFFDB]Zz\x13\ - \uFFFD&\x11\uFFFD~\uFFFD\uFFFD:y\uFFFD*\uFFFD\uFFFD$\uFFFDSA\x17if\uFFFD\ - \uFFFD]T.\uFFFD\uFFFDM~\uFFFDyit\uFFFD\uFFFD\x0447B\uFFFDm\uFFFD\u079BU\uFFFD\ - @\uFFFD\x0FL\v\uFFFD\x1A\r\x15:\uFFFDG\uFFFD\uFFFD\uFFFD\uFFFDr\uFFFD\uFFFD\ - \uFFFD\x19\v.H\uFFFDI\x04iO\uFFFD\uFFFD\uFFFD.\x04K1\uFFFD|\a\uFFFD\uFFFD\ - ,:t\x147\uFFFD)\x16\uFFFD\uFFFDm\uFFFDe\uFFFD\uFFFDm\x01\x17\uFFFD\u0331\ - \uFFFD\uFFFD\x04\v\f\x1F\uFFFD\uFFFD\uFFFD\uFFFDhD\n>!\uFFFDk{\uFFFD\uFFFD\ - \x18ZP\uFFFD\uFFFD\uFFFDy\uFFFD\uFFFD7\uFFFDS\uFFFDfA\uFFFD\\8\uFFFD\f\a\ - \v7\uFFFD'qr\uFF5C\uFFFD]\uFFFDe\u076C\uFFFD\uFFFD\uFFFD9\uFFFD\\\uFFFD\uFFFD\ - \uFFFD\uFFFD\uFFFDR\x1FW\uFFFD\x01\u0565\uFFFD\uFFFD;`\uFFFD\uFFFD\uFFFD\ - \u0117\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD+\uFFFDH\x10\uFFFD\uFFFD\ - \uFFFD\uFFFDx\e\a\x19\uFFFD@$1\0\x1D\u2794\uFFFD\uFFFD\uFFFDs\uFFFDBuA\uFFFD\ - yJ\uFFFDS\uFFFDh\nB\x1F\uFFFD)\uFFFD\uFFFD-\uFFFD\uFFFD\uFFFD@56\uFFFD7\uFFFD\ - \x04\x18r_\x7F\uFFFD\uFFFD\x0FPK\x03\x04\x14\0\0\0\b\0\0\0?\0\x04qEc{\x01\ - \0\0\x13\x03\0\0\x10\0\0\0docProps/app.xml\uFFFDR\uFFFDN\uFFFD0\x10\uFFFD\ - \uFFFD\x15\uFFFD\uFFFD\uFFFDi\uFFFDZ\uFFFD\uFFFD1Z\uFFFD]\uFFFD\uFFFD\uFFFD\ - J-p\\\x19g\uFFFDXul\uFFFD3D)_\uFFFD\uFFFD\uFFFD!\uFFFD=\uFFFD\u04DB7O\uFFFD\ - \uFFFD3\x16\uFFFD]c\uFFFD\x16\"\x1A\uFFFD\n6\uFFFD\uFFFD,\x03\uFFFD}i\u073E\ - `\uFFFD\uFFFD?\uFFFD7,CR\uFFFDT\uFFFD;(\uFFFD\x11\uFFFD\uFFFD\uFFFD+\uFFFD\ - \uFFFD>@$\x03\uFFFD%\a\uFFFD\x05\uFFFD\uFFFD\x92s\uFFFD54\ng\uFFFD\uFFFD\ - R\uFFFD\uFFFDQ\uFFFD\u02B8\u7FAA\uFFFD\uFFFD;\uFFFD_\ep\uFFFD\x17y\uFFFD\ - \uFFFDCG\uFFFDJ(\uFFFD\uFFFDh\uFFFDN\uFFFD\u02D6\uFFFDkZz\uFFFD\uFFFD\xE7\ - \uFFFD1$?)~\uFFFD`\uFFFDV\uFFFD\x1E)\uF34E\x1E}E\uFFFD\uFFFDN\uFFFD\x15\ - |\uFFFD\x14\uFFFDh\v\uFFFD5\x1A:\uFFFD\\\uFFFDi)\uFFFDZYX%cY)\uFFFD \uFFFD\ - \a!\u05A0\uFFFD\uFFFDm\uFFFD\uFFFD(EK\uFFFD\x164\uFFFD\uFFFD\uFFFDyKS[\uFFFD\ - \uFFFDE!\uFFFDq\n\u05AAh\uFFFD#v\uFFFD\uFFFD\uFFFD\x01\u06C0\x14\u5CCF\a\ - \uFFFD\x01\b\x05\x1F\uFFFD\x01N\uFFFDSl~\uFFFD\uFFFD H\uFFFDR\uFFFD\uFFFD\ - \ \t_F\uFFFD\x19\uFFFD\uFFFD\x0F\uFFFDFE\uFFFDO\uFFFD\uFFFD4\uFFFDM2\x12\ - \ \uFFFD\uFFFD,v_\"\uFFFD/\uFFFDd\uFFFD\uFFFDMP.\u0350\uFFFD\uFFFDq\a|\f\ - ;\x7F\uFFFD\b\uFFFD\x13\uFFFD$\u0176V\x11\u02B4\uFFFDq\uFFFD#!\uFFFD)Z\uFFFD\ - \uFFFD~U+\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFDt\uFFFD\uFFFDr\uFFFD\ - \uFFFD\uFFFD\uFFFD\fk?s\uFFFD\x7F|g\uFFFD\x0EPK\x01\x02\x14\x03\x14\0\0\0\ - \b\0\0\0?\0a]I:O\x01\0\0\uFFFD\x04\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\ - \0\0\0\0[Content_Types].xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0\uFFFD\ - I\uFFFD\uFFFD\0\0\0K\x02\0\0\v\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x01\ - \0\0_rels/.relsPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0Du[\uFFFD\uFFFD\0\0\ - \0\uFFFD\x02\0\0\x1A\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x02\0\0xl/_rels/workbook.xml.relsPK\x01\ - \x02\x14\x03\x14\0\0\0\b\0\0\0?\0\f\uFFFD\uFFFD\fR\a\0\0 #\0\0\x18\0\0\0\ - \0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x03\0\0xl/worksheets/sheet1.xmlPK\x01\ - \x02\x14\x03\x14\0\0\0\b\0\0\0?\0\b\uFFFD\uFFFD\uFFFDL\x01\0\0)\x02\0\0\x0F\ - \0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD:\v\0\0xl/workbook.xmlPK\x01\x02\x14\x03\ - \x14\0\0\0\b\0\0\0?\0uW\x7F\uFFFD\x12\x02\0\00\x06\0\0\x14\0\0\0\0\0\0\0\ - \0\0\0\0\uFFFD\uFFFD\uFFFD\f\0\0xl/sharedStrings.xmlPK\x01\x02\x14\x03\x14\ - \0\0\0\b\0\0\0?\0]\uFFFD:4\uFFFD\x02\0\0\uFFFD\x0F\0\0\r\0\0\0\0\0\0\0\0\ - \0\0\0\uFFFD\uFFFD\uFFFD\x0E\0\0xl/styles.xmlPK\x01\x02\x14\x03\x14\0\0\0\ - \b\0\0\0?\0\x18\uFFFDFT\uFFFD\x05\0\0R\e\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\uFFFD\ - \uFFFD\x01\x12\0\0xl/theme/theme1.xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0\ - ?\0yG\x05n%\x01\0\0P\x02\0\0\x11\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\ - \x17\0\0docProps/core.xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0\x04qEc{\x01\ - \0\0\x13\x03\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD6\x19\0\0docProps/app.xmlPK\x05\ - \x06\0\0\0\0\n\0\n\0\uFFFD\x02\0\0\uFFFD\x1A\0\0\0\0" + \uFFFD/\x03\uFFFDc/H\uFFFD\uFFFD\x06PK\x03\x04\x14\0\0\0\b\0\0\0?\0\u04D2\ + 2(%\x01\0\0P\x02\0\0\x11\0\0\0docProps/core.xml\uFFFD\uFFFD\uFFFDn\uFFFD\ + 0\x10\uFFFD\uFFFD}\uFFFD\uFFFD\uFFFD\uFFFD\x0E\uFFFD\uFFFDXI\uFFFD\u068A\ + S\uFFFD*\uFFFD\uFFFD\uFFFD7\uFFFD^\uFFFD\uFFFD\uFFFDG\uFFFD\u06D0\uFFFD\uFFFD\ + \x13 \uFFFD\u0129\uFFFD\uFFFD\uFFFD~;\uFFFDr\uFFFD\u062B&\uFFFD\x05\uFFFD\ + \uFFFD%\uFFFD3\uFFFD\x12\uFFFD\uFFFD\b\uFFFD\uFFFD\x12}\uFFFD\uFFFD\uFFFD\ + #J|`Z\uFFFD\uFFFDh(Q\a\x1E-\uFFFD\uFFFD\uFFFD[\u028D\uFFFD7g,\uFFFD \uFFFD\ + '\x11\uFFFD=\uFFFDD\uFFFD\x10,\uFFFD\uFFFD\uFFFD\x1D(\uFFFD\uFFFD\uFFFD\ + Q\uFFFD\x1A\uFFFDX\uFFFD\uFFFD\uFFFD\uFFFDe\uFFFD\uFFFD\u0540'\uFFFD\u0330\ + \uFFFD\uFFFD\x04\v\f\uFFFD\uFFFD\u050EDtD\n>\"\uFFFDk\x06\uFFFD\uFFFD\x18\ + \x1AP\uFFFD\uFFFD\uFFFDy\uFFFD\uFFFD7\uFFFDS\uFFFDf\xE0\\8\uFFFD\f\uFFFD\ + \uFFFD\uFFFD\u05938\uFFFD\uFFFD^\uFFFD\u01B6m\uFFFDv:Xc\uFFFD\x1CoV\uFFFD\ + \uFFFD\xEA\uFFFD\uFFFD\uFFFD\uFFFD8\uFFFD\uFFFD\x10\uFFFDr\a,\x18W\x15\uFFFD\ + \uFFFD\uFFFD\uFFFDk\uFFFD\x0F\uFFFDx\uFFFD\x04\uFFFD\uFFFDE\uFFFD\uFFFD\uFFFD\ + q\uFFFDC\x1F\uFFFD$\x06\uFFFD\uFFFD\uFFFD'\uFFFDs\uFFFD\uFFFD\uFFFD^\uFFFD\ + jB&\uFFFD\uFFFD\u0727d\uFFFD&s\uFFFD\uFFFD\uFFFD|\uFFFD#\uFFFD\uFFFD\uFFFD\ + @u\x1C\uFFFDo\uFFFD\tp\uFFFD}\uFFFD\t\uFFFD?PK\x03\x04\x14\0\0\0\b\0\0\0\ + ?\0\x04qEc{\x01\0\0\x13\x03\0\0\x10\0\0\0docProps/app.xml\uFFFDR\uFFFDN\uFFFD\ + 0\x10\uFFFD\uFFFD\x15\uFFFD\uFFFD\uFFFDi\uFFFDZ\uFFFD\uFFFD1Z\uFFFD]\uFFFD\ + \uFFFD\uFFFDJ-p\\\x19g\uFFFDXul\uFFFD3D)_\uFFFD\uFFFD\uFFFD!\uFFFD=\uFFFD\ + \u04DB7O\uFFFD\uFFFD3\x16\uFFFD]c\uFFFD\x16\"\x1A\uFFFD\n6\uFFFD\uFFFD,\x03\ + \uFFFD}i\u073E`\uFFFD\uFFFD?\uFFFD7,CR\uFFFDT\uFFFD;(\uFFFD\x11\uFFFD\uFFFD\ + \uFFFD+\uFFFD\uFFFD>@$\x03\uFFFD%\a\uFFFD\x05\uFFFD\uFFFD\x92s\uFFFD54\n\ + g\uFFFD\uFFFDR\uFFFD\uFFFDQ\uFFFD\u02B8\u7FAA\uFFFD\uFFFD;\uFFFD_\ep\uFFFD\ + \x17y\uFFFD\uFFFDCG\uFFFDJ(\uFFFD\uFFFDh\uFFFDN\uFFFD\u02D6\uFFFDkZz\uFFFD\ + \uFFFD\xE7\uFFFD1$?)~\uFFFD`\uFFFDV\uFFFD\x1E)\uF34E\x1E}E\uFFFD\uFFFDN\uFFFD\ + \x15|\uFFFD\x14\uFFFDh\v\uFFFD5\x1A:\uFFFD\\\uFFFDi)\uFFFDZYX%cY)\uFFFD\ + \ \uFFFD\a!\u05A0\uFFFD\uFFFDm\uFFFD\uFFFD(EK\uFFFD\x164\uFFFD\uFFFD\uFFFD\ + yKS[\uFFFD\uFFFDE!\uFFFDq\n\u05AAh\uFFFD#v\uFFFD\uFFFD\uFFFD\x01\u06C0\x14\ + \u5CCF\a\uFFFD\x01\b\x05\x1F\uFFFD\x01N\uFFFDSl~\uFFFD\uFFFD H\uFFFDR\uFFFD\ + \uFFFD \t_F\uFFFD\x19\uFFFD\uFFFD\x0F\uFFFDFE\uFFFDO\uFFFD\uFFFD4\uFFFD\ + M2\x12 \uFFFD\uFFFD,v_\"\uFFFD/\uFFFDd\uFFFD\uFFFDMP.\u0350\uFFFD\uFFFD\ + q\a|\f;\x7F\uFFFD\b\uFFFD\x13\uFFFD$\u0176V\x11\u02B4\uFFFDq\uFFFD#!\uFFFD\ + )Z\uFFFD\uFFFD~U+\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFDt\uFFFD\ + \uFFFDr\uFFFD\uFFFD\uFFFD\uFFFD\fk?s\uFFFD\x7F|g\uFFFD\x0EPK\x01\x02\x14\ + \x03\x14\0\0\0\b\0\0\0?\0a]I:O\x01\0\0\uFFFD\x04\0\0\x13\0\0\0\0\0\0\0\0\ + \0\0\0\uFFFD\uFFFD\0\0\0\0[Content_Types].xmlPK\x01\x02\x14\x03\x14\0\0\0\ + \b\0\0\0?\0\uFFFDI\uFFFD\uFFFD\0\0\0K\x02\0\0\v\0\0\0\0\0\0\0\0\0\0\0\uFFFD\ + \uFFFD\uFFFD\x01\0\0_rels/.relsPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0Du[\uFFFD\ + \uFFFD\0\0\0\uFFFD\x02\0\0\x1A\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x02\ + \0\0xl/_rels/workbook.xml.relsPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0\f\uFFFD\ + \uFFFD\fR\a\0\0 #\0\0\x18\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x03\0\0\ + xl/worksheets/sheet1.xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0?\0\b\uFFFD\uFFFD\ + \uFFFDL\x01\0\0)\x02\0\0\x0F\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD:\v\0\0xl/workbook.xmlPK\x01\ + \x02\x14\x03\x14\0\0\0\b\0\0\0?\0uW\x7F\uFFFD\x12\x02\0\00\x06\0\0\x14\0\ + \0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\f\0\0xl/sharedStrings.xmlPK\x01\x02\ + \x14\x03\x14\0\0\0\b\0\0\0?\0]\uFFFD:4\uFFFD\x02\0\0\uFFFD\x0F\0\0\r\0\0\ + \0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\uFFFD\x0E\0\0xl/styles.xmlPK\x01\x02\x14\x03\ + \x14\0\0\0\b\0\0\0?\0\x18\uFFFDFT\uFFFD\x05\0\0R\e\0\0\x13\0\0\0\0\0\0\0\ + \0\0\0\0\uFFFD\uFFFD\x01\x12\0\0xl/theme/theme1.xmlPK\x01\x02\x14\x03\x14\ + \0\0\0\b\0\0\0?\0\u04D22(%\x01\0\0P\x02\0\0\x11\0\0\0\0\0\0\0\0\0\0\0\uFFFD\ + \uFFFD\uFFFD\x17\0\0docProps/core.xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0\ + ?\0\x04qEc{\x01\0\0\x13\x03\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD6\x19\ + \0\0docProps/app.xmlPK\x05\x06\0\0\0\0\n\0\n\0\uFFFD\x02\0\0\uFFFD\x1A\0\ + \0\0\0" headers: Content-Disposition: - attachment; filename="=?UTF-8?Q?test=5Fxlsx.xlsx?="; filename*=UTF-8''test_xlsx.xlsx Content-Type: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml index 828674174..fcf675413 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml @@ -168,7 +168,7 @@ interactions: headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -176,7 +176,8 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -201,18 +202,20 @@ interactions: response: body: string: - exportResult: EXPORT_NORMALIZED_4 + exportResult: EXPORT_NORMALIZED_XLSX headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 201 message: Created @@ -229,19 +232,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -258,19 +263,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -287,19 +294,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -316,19 +325,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -345,19 +356,21 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: '' headers: - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 202 message: Accepted @@ -374,7 +387,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_4 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/EXPORT_NORMALIZED_XLSX response: body: string: "PK\x03\x04\x14\0\0\0\b\0\0\0?\0a]I:O\x01\0\0\uFFFD\x04\0\0\x13\0\0\ @@ -588,21 +601,22 @@ interactions: ,\uFFFD\uFFFD\uFFFD\x10tni\uFFFDe\uFFFD\uFFFD\uFFFD1j\x11\uFFFD\u058Ax_\uFFFD\ \uFFFD9\uFFFD\uFFFD\uFFFD\uFFFDg\uFFFD{sg{\x06_{g\uFFFD\uFFFD^.Q[;\uFFFD\ \u4AE5?\uFFFD\uFFFD\uFFFD>\uFFFD\u0781\uFFFD\u0484)Y\uFFFDMz\0G\uFFFD\uFFFD\ - \uFFFD/\x03\uFFFDc/H\uFFFD\uFFFD\x06PK\x03\x04\x14\0\0\0\b\0\0\0?\0\x11\uFFFD\ - ,\uFFFD%\x01\0\0P\x02\0\0\x11\0\0\0docProps/core.xml\uFFFD\uFFFD\uFFFDj\uFFFD\ - 0\x10\uFFFD\uFFFD}\n\uFFFD\uFFFD-\uFFFDiC\x10\uFFFD\x03m\u0269\uFFFDBSZz\x13\ - \uFFFD&\x11\uFFFD~\uFFFD\uFFFD:~\uFFFD\u028E\uFFFD$\uFFFDS\uFFFD\uFFFD\uFFFD\ - \uFFFDvvQ\uFFFD<\uFFFD&\uFFFD\x05\uFFFD\uFFFD\x15\uFFFD3\uFFFD\x12\uFFFD\ - \uFFFD\b\uFFFDw\x15z\u07EC\uFFFD\x05J|`Z\uFFFD\uFFFDh\uFFFDP\a\x1E-\uBED2\ - [\u028D\uFFFDWg,\uFFFD \uFFFD'\x11\uFFFD=\uFFFDB\uFFFD\x10,\uFFFD\uFFFD\uFFFD\ - =(\uFFFD\uFFFD\uFFFDQ\uFFFD\x1A\uFFFDX\uFFFD\uFFFD\uFFFDa\uFFFD\uFFFD7\uFFFD\ - \x01.\b\uFFFDc\x05\uFFFD\t\x16\x18\uE069\uFFFD\uFFFDhD\n>!\uFFFDk\x06\uFFFD\ - \uFFFD\x18\x1AP\uFFFD\uFFFD\uFFFDy\uFFFD\uFFFD7\uFFFDS\uFFFDf\xE0\\8\uFFFD\ - \f\uFFFD\uFFFD\uFFFD\u05938\uFFFD\x0F^N\u01B6m\uFFFDv6Xc\uFFFD\x1C\x7F\uFFFD\ - _\u0786US\uFFFD\uFFFDSq@u)8\uFFFD\x0EX0\uFFFD.\uFFFDe\x11\x0F\uFFFD0\x1F\ - \uFFFD\uFFFD\uFFFD[\t\u2C4B\uFFFD\uFFFD\uFFFDq\uFFFDc\x1F\uFFFD$\x06\uFFFD\ - \u01F8'\uFFFDc\uFFFD\uFFFD\uFFFDY\uFFFD\uFFFD \uFFFD<%\uFFFD)Yl\nB\x1FrJ\uFFFD\ - W?\uFFFD\uFFFD\fT\uFFFD\x7F\x13O\uFFFDc\uFFFD\uFFFDOP\uFFFD\x01PK\x03\x04\ + \uFFFD/\x03\uFFFDc/H\uFFFD\uFFFD\x06PK\x03\x04\x14\0\0\0\b\0\0\0?\0\0a]\uFFFD\ + &\x01\0\0P\x02\0\0\x11\0\0\0docProps/core.xml\uFFFD\uFFFD\uFFFDn\uFFFD0\x10\ + \uFFFD\uFFFD}\uFFFD\uFFFD\uFFFD\uFFFD\x0E\uFFFD\b\uFFFD$Hm\u0169H\uFFFD\ + J\u056A7\uFFFD^\uFFFD\uFFFD\uFFFDG\uFFFD\u06D0\uFFFD\uFFFDI \uFFFD\u0129\ + \uFFFD\uFFFD\uFFFD~;\uFFFDr\uFFFD\u072B&\uFFFD\x05\uFFFD\uFFFD%\uFFFD3\uFFFD\ + \x12\uFFFD\uFFFD\b\uFFFD\uFFFD\x12\uFFFDoV\uFFFD\x1C%>0-Xc4\uFFFD\uFFFD\x03\ + \uFFFD\uFFFD\uFFFD]\uFFFD-\uFFFD\uFFFD\uFFFD\uFFFD3\x16\\\uFFFD\uFFFD\uFFFD\ + \b\u049Er[\uFFFD]\b\uFFFDb\uFFFD\uFFFD\x0E\x14\uFFFDYt\uFFFD(n\uFFFDS,\uFFFD\ + \uFFFD\uFFFD\uFFFD2\uFFFD\uFFFDj\uFFFD\x13BfXA`\uFFFD\x05\uFFFD\x0F\uFFFD\ + \u050EDtD\n>\"\uFFFDkz\uFFFD\uFFFD\x18\x1AP\uFFFD\uFFFD\uFFFDy\uFFFD\uFFFD\ + 7\uFFFDS\uFFFDfC\uFFFD\\8\uFFFD\f\uFFFD\uFFFD\uFFFD\u05938\uFFFD\uFFFD^\uFFFD\ + \u01B6m\uFFFDv\uFFFD[c\uFFFD\x1C\x7F\uFFFD_\uFFFD\uFFFDUS\uFFFD\x0F\uFFFD\ + \u202ABp\uFFFD\x1D\uFFFD`\\U\uFFFD\uFFFD\"\x1E\uFFFDa>\uFFFD\u3277\x12\uFFFD\ + c\x17\uFFFD\eo\uFFFDE\uFFFD>\x10I\f@\uFFFD\uFFFD'\uFFFDc\uFFFD\uFFFD\uFFFD\ + Y\uFFFDjB&\uFFFD\uFFFD\u0727d\uFFFD!\v\uFFFD\uFFFD\uFFFDa\uFFFDu\x18y\uFFFD\ + \x7F\x06\uFFFD\uFFFD\x7F\x13O\uFFFD!\uFFFD\uFFFD'\uFFFD\uFFFD\0PK\x03\x04\ \x14\0\0\0\b\0\0\0?\0\uFFFD\uFFFD2G~\x01\0\0\x19\x03\0\0\x10\0\0\0docProps/app.xml\uFFFD\ R\uFFFDN\uFFFD0\x10\uFFFD\uFFFD\x15\uFFFD\uFFFD\uFFFDi\uFFFD\uFFFDS\uFFFD\ \x18\uFFFD\x02\uFFFD\uFFFD\u04EB\uFFFD\0g\uFFFDl\x1A\v\u01F6\uFFFD\u06E8\ @@ -637,24 +651,26 @@ interactions: \0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\x02\t\0\0xl/styles.xmlPK\x01\x02\x14\x03\ \x14\0\0\0\b\0\0\0?\0\x18\uFFFDFT\uFFFD\x05\0\0R\e\0\0\x13\0\0\0\0\0\0\0\ \0\0\0\0\uFFFD\uFFFD\x1C\f\0\0xl/theme/theme1.xmlPK\x01\x02\x14\x03\x14\0\ - \0\0\b\0\0\0?\0\x11\uFFFD,\uFFFD%\x01\0\0P\x02\0\0\x11\0\0\0\0\0\0\0\0\0\ - \0\0\uFFFD\uFFFD\uFFFD\x11\0\0docProps/core.xmlPK\x01\x02\x14\x03\x14\0\0\ - \0\b\0\0\0?\0\uFFFD\uFFFD2G~\x01\0\0\x19\x03\0\0\x10\0\0\0\0\0\0\0\0\0\0\ - \0\uFFFD\uFFFDQ\x13\0\0docProps/app.xmlPK\x05\x06\0\0\0\0\n\0\n\0\uFFFD\x02\ - \0\0\uFFFD\x14\0\0\0\0" + \0\0\b\0\0\0?\0\0a]\uFFFD&\x01\0\0P\x02\0\0\x11\0\0\0\0\0\0\0\0\0\0\0\uFFFD\ + \uFFFD\uFFFD\x11\0\0docProps/core.xmlPK\x01\x02\x14\x03\x14\0\0\0\b\0\0\0\ + ?\0\uFFFD\uFFFD2G~\x01\0\0\x19\x03\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\uFFFD\uFFFD\ + R\x13\0\0docProps/app.xmlPK\x05\x06\0\0\0\0\n\0\n\0\uFFFD\x02\0\0\uFFFD\x14\ + \0\0\0\0" headers: Content-Disposition: - attachment; filename="=?UTF-8?Q?Customers_Trend.xlsx?="; filename*=UTF-8''Customers%20Trend.xlsx Content-Type: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml index 0004428b5..effc1dcf3 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml @@ -70,11 +70,11 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_6 + executionResult: EXECUTION_NORMALIZED_1 headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -82,8 +82,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -99,7 +101,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_6?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_1?offset=0%2C0&limit=512%2C256 response: body: string: @@ -147,14 +149,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml index 09a5f98c7..6cfdba071 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml @@ -77,11 +77,11 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_7 + executionResult: EXECUTION_NORMALIZED_1 headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -89,8 +89,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -106,7 +108,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_7?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_1?offset=0%2C0&limit=512%2C256 response: body: string: @@ -142,14 +144,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml index 9b6cc5f0a..948264bec 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml @@ -73,11 +73,11 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_8 + executionResult: EXECUTION_NORMALIZED_1 headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -85,8 +85,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -102,7 +104,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_8?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_1?offset=0%2C0&limit=512%2C256 response: body: string: @@ -334,14 +336,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -427,19 +431,22 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_9 + executionResult: EXECUTION_NORMALIZED_2 headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -455,7 +462,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_9?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_2?offset=0%2C0&limit=512%2C256 response: body: string: @@ -683,14 +690,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -776,19 +785,22 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: EXECUTION_NORMALIZED_10 + executionResult: EXECUTION_NORMALIZED_3 headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -804,7 +816,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_10?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_3?offset=0%2C0&limit=512%2C256 response: body: string: @@ -952,14 +964,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml index 2c49c56fb..96f1aa156 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml @@ -52,11 +52,11 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: EXECUTION_NORMALIZED_4 + executionResult: EXECUTION_NORMALIZED_1 headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -64,8 +64,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -81,7 +83,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_4?offset=0&limit=512 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_1?offset=0&limit=512 response: body: string: @@ -117,14 +119,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml index a8f5a7396..ae8681111 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml @@ -45,11 +45,11 @@ interactions: name: Order Amount localIdentifier: dim_0 links: - executionResult: EXECUTION_NORMALIZED_5 + executionResult: EXECUTION_NORMALIZED_1 headers: Content-Type: - application/json - DATE: &id001 + DATE: - PLACEHOLDER Expires: - '0' @@ -57,8 +57,10 @@ interactions: - no-cache X-Content-Type-Options: - nosniff - X-GDC-CANCEL-TOKEN: *id001 - X-GDC-TRACE-ID: *id001 + X-GDC-CANCEL-TOKEN: + - PLACEHOLDER + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK @@ -74,7 +76,7 @@ interactions: X-Requested-With: - XMLHttpRequest method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_5?offset=0&limit=256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/EXECUTION_NORMALIZED_1?offset=0&limit=256 response: body: string: @@ -98,14 +100,16 @@ interactions: headers: Content-Type: - application/json - DATE: *id001 + DATE: + - PLACEHOLDER Expires: - '0' Pragma: - no-cache X-Content-Type-Options: - nosniff - X-GDC-TRACE-ID: *id001 + X-GDC-TRACE-ID: + - PLACEHOLDER status: code: 200 message: OK diff --git a/packages/tests-support/fixtures/demo_user.json b/packages/tests-support/fixtures/demo_user.json index 694be6bdc..348767eb3 100644 --- a/packages/tests-support/fixtures/demo_user.json +++ b/packages/tests-support/fixtures/demo_user.json @@ -3,7 +3,10 @@ "id": "demo", "type": "user", "attributes": { - "authenticationId": "" + "authenticationId": "", + "firstname": "Demo", + "lastname": "User", + "email": "demo@example.com" }, "relationships": { "userGroups": { diff --git a/packages/tests-support/src/tests_support/vcrpy_utils.py b/packages/tests-support/src/tests_support/vcrpy_utils.py index 4d1e339ee..9fba5b501 100644 --- a/packages/tests-support/src/tests_support/vcrpy_utils.py +++ b/packages/tests-support/src/tests_support/vcrpy_utils.py @@ -145,9 +145,16 @@ # Indexed hash maps: preserve distinctness across different hashes within a cassette. # Each unique hash gets a unique index (e.g. EXECUTION_NORMALIZED_1, _2, ...). +# NOTE: indices may be non-sequential within a single cassette because the maps +# accumulate across a test session. _reindex_cassette_hashes() fixes this at +# serialization time so each cassette file is self-contained (starts from _1). _exec_hash_map: dict[str, str] = {} _export_hash_map: dict[str, str] = {} +# Regex for re-indexing placeholders at serialization time +_REINDEX_EXEC_RE = re.compile(r"EXECUTION_NORMALIZED_(\d+)") +_REINDEX_EXPORT_RE = re.compile(r"EXPORT_NORMALIZED_(\d+)") + def _exec_hash_replacer(match: re.Match) -> str: """Replace execution hash with an indexed placeholder, preserving distinctness.""" @@ -339,6 +346,105 @@ def get_vcr() -> vcr.VCR: return gd_vcr +def _stabilize_hash_placeholders(cassette_dict: dict[str, Any]) -> dict[str, str]: + """Build a rename map for hash placeholders based on export format context. + + During recording, execution/export hashes get session-global numeric indices + (EXECUTION_NORMALIZED_3, EXPORT_NORMALIZED_5). These indices shift when test + execution order changes, causing spurious cassette diffs. + + This function scans the cassette for export context (POST /export/tabular with + a ``format`` field) and returns a mapping from old placeholder names to stable, + format-based names (e.g. EXECUTION_NORMALIZED_CSV, EXPORT_NORMALIZED_XLSX). + + Non-export hashes (pure compute results) are re-indexed per-cassette starting + from 1. + """ + exec_renames: dict[str, str] = {} # old placeholder → new name + export_renames: dict[str, str] = {} + format_counts: dict[str, int] = {} # format → count, for dedup + + for interaction in cassette_dict.get("interactions", []): + req = interaction["request"] + resp = interaction["response"] + + if req.get("method") != "POST": + continue + uri = req.get("uri", "") + if "/export/tabular" not in uri: + continue + + body = req.get("body") + if not isinstance(body, dict): + continue + fmt = (body.get("format") or "").upper() + if not fmt: + continue + + # Track how many exports of each format we've seen + format_counts[fmt] = format_counts.get(fmt, 0) + 1 + suffix = fmt if format_counts[fmt] == 1 else f"{fmt}_{format_counts[fmt]}" + + # Map execution hash placeholder → format name + exec_ref = body.get("executionResult") + if isinstance(exec_ref, str) and _REINDEX_EXEC_RE.match(exec_ref): + exec_renames[exec_ref] = f"{_CANONICAL_EXECUTION_RESULT}_{suffix}" + + # Map export hash placeholder → format name (from response) + resp_body = resp.get("body", {}).get("string") + if isinstance(resp_body, dict): + export_ref = resp_body.get("exportResult") + if isinstance(export_ref, str) and _REINDEX_EXPORT_RE.match(export_ref): + export_renames[export_ref] = f"{_CANONICAL_EXPORT_RESULT}_{suffix}" + + # Re-index any remaining non-export execution hashes per-cassette + all_exec_refs: list[str] = [] + all_export_refs: list[str] = [] + for interaction in cassette_dict.get("interactions", []): + for part in ("request", "response"): + _collect_placeholders(interaction[part], all_exec_refs, all_export_refs) + + idx = 1 + for ref in dict.fromkeys(all_exec_refs): # preserves order, deduplicates + if ref not in exec_renames: + exec_renames[ref] = f"{_CANONICAL_EXECUTION_RESULT}_{idx}" + idx += 1 + + idx = 1 + for ref in dict.fromkeys(all_export_refs): + if ref not in export_renames: + export_renames[ref] = f"{_CANONICAL_EXPORT_RESULT}_{idx}" + idx += 1 + + return {**exec_renames, **export_renames} + + +def _collect_placeholders(obj: Any, exec_refs: list[str], export_refs: list[str]) -> None: + """Walk a nested structure and collect all hash placeholder strings.""" + if isinstance(obj, str): + exec_refs.extend(m.group(0) for m in _REINDEX_EXEC_RE.finditer(obj)) + export_refs.extend(m.group(0) for m in _REINDEX_EXPORT_RE.finditer(obj)) + elif isinstance(obj, dict): + for v in obj.values(): + _collect_placeholders(v, exec_refs, export_refs) + elif isinstance(obj, list): + for item in obj: + _collect_placeholders(item, exec_refs, export_refs) + + +def _apply_hash_renames(obj: Any, renames: dict[str, str]) -> Any: + """Recursively apply placeholder renames across a nested structure.""" + if isinstance(obj, str): + for old, new in renames.items(): + obj = obj.replace(old, new) + return obj + if isinstance(obj, dict): + return {k: _apply_hash_renames(v, renames) for k, v in obj.items()} + if isinstance(obj, list): + return [_apply_hash_renames(item, renames) for item in obj] + return obj + + class IndentDumper(yaml.SafeDumper): @typing.no_type_check def increase_indent(self, flow: bool = False, indentless: bool = False): @@ -375,6 +481,52 @@ def _sort_groups(parent: ET.Element) -> None: return text +# Keys whose array values are returned by the API in non-deterministic order. +# Only these arrays are sorted during serialization — everything else keeps +# the server's original order so that tests replaying from cassettes see the +# same data that was recorded. +_SORT_SAFE_KEYS: frozenset[str] = frozenset( + { + # Entity API: dataset reference properties (order varies between environments) + "referenceProperties", + # Entity API: workspace data filter columns & references + "workspaceDataFilterColumns", + "workspaceDataFilterReferences", + # Dependent entities graph: edge list (set semantics, no inherent order) + "edges", + # Available assignees: user/group lists (order varies) + "userGroups", + } +) + + +def _sort_known_arrays(obj: Any, parent_key: str | None = None) -> Any: + """Sort only arrays under known non-deterministic keys. + + Unlike a blanket sort of all complex arrays, this only sorts arrays that + are children of keys listed in _SORT_SAFE_KEYS. Everything else is left + in the server's original order so cassette replay matches recording. + + Within the sorted scope, recursion sorts nested sub-arrays too (e.g. + ``referenceProperties[*].sources``). + """ + if isinstance(obj, dict): + return {k: _sort_known_arrays(v, parent_key=k) for k, v in obj.items()} + if isinstance(obj, list): + if not obj: + return obj + # Recurse into children first + items = [_sort_known_arrays(item, parent_key=parent_key) for item in obj] + # Only sort if we are directly under a safe key + if parent_key in _SORT_SAFE_KEYS and isinstance(items[0], (dict, list)): + try: + return sorted(items, key=lambda x: orjson.dumps(x, option=orjson.OPT_SORT_KEYS)) + except TypeError: + return items + return items + return obj + + class CustomSerializerYaml: def deserialize(self, cassette_string: str) -> dict[str, Any]: cassette_dict = yaml.safe_load(cassette_string) @@ -411,10 +563,18 @@ def serialize(self, cassette_dict: dict[str, Any]) -> str: interaction["request"]["body"] = request_body if response_body is not None and response_body["string"] != "": try: - interaction["response"]["body"]["string"] = orjson.loads(response_body["string"]) + parsed = orjson.loads(response_body["string"]) + interaction["response"]["body"]["string"] = _sort_known_arrays(parsed) except (orjson.JSONDecodeError, UnicodeDecodeError): # these exceptions are expected while getting file content continue + + # Stabilize hash placeholders: rename session-global numeric indices + # to format-based names (EXPORT_NORMALIZED_CSV) or per-cassette indices. + renames = _stabilize_hash_placeholders(cassette_dict) + if renames: + cassette_dict = _apply_hash_renames(cassette_dict, renames) + return yaml.dump(cassette_dict, Dumper=IndentDumper, sort_keys=True) @@ -441,6 +601,8 @@ def custom_before_request(request, headers_str: str = HEADERS_STR): if _normalization_replacements: decoded = _apply_replacements(decoded) decoded = _normalize_hashes_in_text(decoded) + if decoded.startswith("