From ee747f934939a5cf62930863f22c405a08395005 Mon Sep 17 00:00:00 2001 From: Courtney Holcomb Date: Wed, 18 Dec 2024 15:19:47 -0800 Subject: [PATCH] Add output tests --- .../query_output/test_offset_metrics.py | 62 +++++++++++++++++++ ...t_window_with_base_grain__query_output.txt | 21 +++++++ ...ith_grains_and_date_part__query_output.txt | 7 +++ 3 files changed, 90 insertions(+) create mode 100644 tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_base_grain__query_output.txt create mode 100644 tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_grains_and_date_part__query_output.txt diff --git a/tests_metricflow/integration/query_output/test_offset_metrics.py b/tests_metricflow/integration/query_output/test_offset_metrics.py index d51b3f76b4..e66cbc073d 100644 --- a/tests_metricflow/integration/query_output/test_offset_metrics.py +++ b/tests_metricflow/integration/query_output/test_offset_metrics.py @@ -2,6 +2,9 @@ import pytest from _pytest.fixtures import FixtureRequest +from dbt_semantic_interfaces.type_enums.date_part import DatePart +from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity +from metricflow_semantics.specs.query_param_implementations import OrderByParameter, TimeDimensionParameter from metricflow_semantics.test_helpers.config_helpers import MetricFlowTestConfiguration from metricflow.engine.metricflow_engine import MetricFlowQueryRequest @@ -58,3 +61,62 @@ def test_offset_to_grain_with_multiple_granularities( # noqa: D103 snapshot_str=query_result.result_df.text_format(), sql_engine=sql_client.sql_engine_type, ) + + +@pytest.mark.sql_engine_snapshot +def test_custom_offset_window_with_base_grain( + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + it_helpers: IntegrationTestHelpers, +) -> None: + """Gives a side by side comparison of bookings and bookings_offset_one_martian_day.""" + query_result = it_helpers.mf_engine.query( + MetricFlowQueryRequest.create_with_random_request_id( + metric_names=["bookings", "bookings_offset_one_martian_day"], + group_by_names=["metric_time__day", "metric_time__martian_day"], + order_by_names=["metric_time__day", "metric_time__martian_day"], + ) + ) + assert query_result.result_df is not None, "Unexpected empty result." + + assert_str_snapshot_equal( + request=request, + mf_test_configuration=mf_test_configuration, + snapshot_id="query_output", + snapshot_str=query_result.result_df.text_format(), + sql_engine=sql_client.sql_engine_type, + ) + + +@pytest.mark.sql_engine_snapshot +def test_custom_offset_window_with_grains_and_date_part( # noqa: D103 + request: FixtureRequest, + mf_test_configuration: MetricFlowTestConfiguration, + sql_client: SqlClient, + it_helpers: IntegrationTestHelpers, +) -> None: + query_result = it_helpers.mf_engine.query( + MetricFlowQueryRequest.create_with_random_request_id( + metric_names=["bookings_offset_one_martian_day"], + group_by=( + TimeDimensionParameter(name="booking__ds", grain=TimeGranularity.MONTH.name), + TimeDimensionParameter(name="metric_time", date_part=DatePart.YEAR), + TimeDimensionParameter(name="metric_time", grain="martian_day"), + ), + order_by=( + OrderByParameter(TimeDimensionParameter(name="booking__ds", grain=TimeGranularity.MONTH.name)), + OrderByParameter(TimeDimensionParameter(name="metric_time", date_part=DatePart.YEAR)), + OrderByParameter(TimeDimensionParameter(name="metric_time", grain="martian_day")), + ), + ) + ) + assert query_result.result_df is not None, "Unexpected empty result." + + assert_str_snapshot_equal( + request=request, + mf_test_configuration=mf_test_configuration, + snapshot_id="query_output", + snapshot_str=query_result.result_df.text_format(), + sql_engine=sql_client.sql_engine_type, + ) diff --git a/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_base_grain__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_base_grain__query_output.txt new file mode 100644 index 0000000000..f5cfd0c52d --- /dev/null +++ b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_base_grain__query_output.txt @@ -0,0 +1,21 @@ +test_name: test_custom_offset_window_with_base_grain +test_filename: test_offset_metrics.py +docstring: + Gives a side by side comparison of bookings and bookings_offset_one_martian_day. +--- +metric_time__martian_day metric_time__day bookings bookings_offset_one_martian_day +-------------------------- ------------------- ---------- --------------------------------- +2020-01-08T00:00:00 2019-12-01T00:00:00 1 None +2020-01-08T00:00:00 2019-12-18T00:00:00 10 None +2020-01-08T00:00:00 2019-12-19T00:00:00 18 None +2020-01-08T00:00:00 2019-12-20T00:00:00 2 None +2020-01-08T00:00:00 2020-01-01T00:00:00 5 None +2020-01-08T00:00:00 2020-01-02T00:00:00 9 None +2020-01-08T00:00:00 2020-01-03T00:00:00 1 None +2020-01-09T00:00:00 2022-08-27T00:00:00 None 1 +2020-01-09T00:00:00 2022-09-13T00:00:00 None 10 +2020-01-09T00:00:00 2022-09-14T00:00:00 None 18 +2020-01-09T00:00:00 2022-09-15T00:00:00 None 2 +2020-01-09T00:00:00 2022-09-27T00:00:00 None 5 +2020-01-09T00:00:00 2022-09-28T00:00:00 None 9 +2020-01-09T00:00:00 2022-09-29T00:00:00 None 1 diff --git a/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_grains_and_date_part__query_output.txt b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_grains_and_date_part__query_output.txt new file mode 100644 index 0000000000..07d2d112cd --- /dev/null +++ b/tests_metricflow/snapshots/test_offset_metrics.py/str/DuckDB/test_custom_offset_window_with_grains_and_date_part__query_output.txt @@ -0,0 +1,7 @@ +test_name: test_custom_offset_window_with_grains_and_date_part +test_filename: test_offset_metrics.py +--- +metric_time__martian_day booking__ds__month metric_time__extract_year bookings_offset_one_martian_day +-------------------------- -------------------- --------------------------- --------------------------------- +2020-01-09T00:00:00 2022-08-01T00:00:00 2022 1 +2020-01-09T00:00:00 2022-09-01T00:00:00 2022 45