@@ -70,6 +70,86 @@ def test_columns_resolver_filters_by_attribute():
7070 assert result [0 ].name == "user_id"
7171
7272
73+ def test_reaggregate_resolver_returns_none_for_non_metric ():
74+ """
75+ Test that the reaggregate resolver only resolves for metric revisions.
76+ """
77+ from datajunction_server .api .graphql .scalars .node import NodeRevision
78+ from datajunction_server .database import NodeRevision as DBNodeRevision
79+ from datajunction_server .models .node_type import NodeType
80+
81+ db_node_revision = DBNodeRevision (
82+ name = "source_rev" ,
83+ type = NodeType .SOURCE ,
84+ version = "1" ,
85+ reaggregate = {
86+ "rules" : [
87+ {
88+ "dimension" : "default.date_dim.date" ,
89+ "fn" : "last_value" ,
90+ },
91+ ],
92+ },
93+ )
94+
95+ result = NodeRevision .reaggregate (NodeRevision , root = db_node_revision )
96+
97+ assert result is None
98+
99+
100+ def test_reaggregate_resolver_returns_none_for_empty_metric_spec ():
101+ """
102+ Test that the reaggregate resolver returns None for metrics without a spec.
103+ """
104+ from datajunction_server .api .graphql .scalars .node import NodeRevision
105+ from datajunction_server .database import NodeRevision as DBNodeRevision
106+ from datajunction_server .models .node_type import NodeType
107+
108+ db_node_revision = DBNodeRevision (
109+ name = "metric_rev" ,
110+ type = NodeType .METRIC ,
111+ version = "1" ,
112+ reaggregate = None ,
113+ )
114+
115+ result = NodeRevision .reaggregate (NodeRevision , root = db_node_revision )
116+
117+ assert result is None
118+
119+
120+ def test_reaggregate_resolver_returns_metric_spec ():
121+ """
122+ Test that the reaggregate resolver exposes metric reaggregation declarations.
123+ """
124+ from datajunction_server .api .graphql .scalars .node import NodeRevision
125+ from datajunction_server .database import NodeRevision as DBNodeRevision
126+ from datajunction_server .models .node_type import NodeType
127+ from datajunction_server .models .reaggregate import ReaggregationFunction
128+
129+ db_node_revision = DBNodeRevision (
130+ name = "metric_rev" ,
131+ type = NodeType .METRIC ,
132+ version = "1" ,
133+ reaggregate = {
134+ "rules" : [
135+ {
136+ "dimension" : "default.date_dim.date" ,
137+ "fn" : "last_value" ,
138+ },
139+ ],
140+ },
141+ )
142+
143+ result = NodeRevision .reaggregate (NodeRevision , root = db_node_revision )
144+
145+ assert result is not None
146+ assert result .fn is None
147+ assert result .weight is None
148+ assert len (result .rules ) == 1
149+ assert result .rules [0 ].dimension == "default.date_dim.date"
150+ assert result .rules [0 ].fn == ReaggregationFunction .LAST_VALUE
151+
152+
73153@pytest .mark .asyncio
74154@patch ("datajunction_server.api.graphql.resolvers.nodes.DBNode.get_by_name" )
75155@patch ("datajunction_server.api.graphql.resolvers.nodes.load_node_options" )
0 commit comments