Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
courtneyholcomb committed Jan 28, 2025
1 parent 807696c commit 3c0367b
Show file tree
Hide file tree
Showing 7 changed files with 1,281 additions and 0 deletions.
26 changes: 26 additions & 0 deletions tests_metricflow/integration/query_output/test_query_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,29 @@ def test_scd_filter_without_metric_time( # noqa: D103
snapshot_str=query_result.result_df.text_format(),
sql_engine=sql_client.sql_engine_type,
)


@pytest.mark.sql_engine_snapshot
@pytest.mark.duckdb_only
def test_multiple_time_spines( # 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=["subdaily_join_to_time_spine_metric", "subdaily_cumulative_window_metric"],
group_by_names=["metric_time__martian_day", "metric_time__hour"],
order_by_names=["metric_time__martian_day", "metric_time__hour"],
)
)
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,
)
48 changes: 48 additions & 0 deletions tests_metricflow/query_rendering/test_custom_granularity.py
Original file line number Diff line number Diff line change
Expand Up @@ -693,3 +693,51 @@ def test_custom_offset_window_with_only_window_grain( # noqa: D103
# TODO: add more tests
# - with where filter not included in group by
# - nested custom offset


@pytest.mark.sql_engine_snapshot
def test_multiple_time_spines_in_query_for_join_to_time_spine_metric( # noqa: D103
request: FixtureRequest,
mf_test_configuration: MetricFlowTestConfiguration,
dataflow_plan_builder: DataflowPlanBuilder,
dataflow_to_sql_converter: DataflowToSqlPlanConverter,
sql_client: SqlClient,
query_parser: MetricFlowQueryParser,
) -> None:
query_spec = query_parser.parse_and_validate_query(
metric_names=("subdaily_join_to_time_spine_metric",),
group_by_names=("metric_time__martian_day", "metric_time__hour"),
).query_spec

render_and_check(
request=request,
mf_test_configuration=mf_test_configuration,
dataflow_to_sql_converter=dataflow_to_sql_converter,
sql_client=sql_client,
dataflow_plan_builder=dataflow_plan_builder,
query_spec=query_spec,
)


@pytest.mark.sql_engine_snapshot
def test_multiple_time_spines_in_query_for_cumulative_metric( # noqa: D103
request: FixtureRequest,
mf_test_configuration: MetricFlowTestConfiguration,
dataflow_plan_builder: DataflowPlanBuilder,
dataflow_to_sql_converter: DataflowToSqlPlanConverter,
sql_client: SqlClient,
query_parser: MetricFlowQueryParser,
) -> None:
query_spec = query_parser.parse_and_validate_query(
metric_names=("subdaily_cumulative_window_metric",),
group_by_names=("metric_time__martian_day", "metric_time__hour"),
).query_spec

render_and_check(
request=request,
mf_test_configuration=mf_test_configuration,
dataflow_to_sql_converter=dataflow_to_sql_converter,
sql_client=sql_client,
dataflow_plan_builder=dataflow_plan_builder,
query_spec=query_spec,
)

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
test_name: test_multiple_time_spines_in_query_for_cumulative_metric
test_filename: test_custom_granularity.py
sql_engine: DuckDB
---
-- Join Self Over Time Range
-- Join to Custom Granularity Dataset
-- Pass Only Elements: ['archived_users', 'metric_time__martian_day', 'metric_time__hour']
-- Aggregate Measures
-- Compute Metrics via Expressions
SELECT
subq_12.martian_day AS metric_time__martian_day
, subq_11.ts AS metric_time__hour
, SUM(subq_9.archived_users) AS subdaily_cumulative_window_metric
FROM ***************************.mf_time_spine_hour subq_11
INNER JOIN (
-- Read Elements From Semantic Model 'users_ds_source'
-- Metric Time Dimension 'archived_at'
SELECT
DATE_TRUNC('hour', archived_at) AS metric_time__hour
, 1 AS archived_users
FROM ***************************.dim_users users_ds_source_src_28000
) subq_9
ON
(
subq_9.metric_time__hour <= subq_11.ts
) AND (
subq_9.metric_time__hour > subq_11.ts - INTERVAL 3 hour
)
LEFT OUTER JOIN
***************************.mf_time_spine subq_12
ON
DATE_TRUNC('day', subq_11.ts) = subq_12.ds
GROUP BY
subq_12.martian_day
, subq_11.ts
Loading

0 comments on commit 3c0367b

Please sign in to comment.