diff --git a/src/agent_toolkit/forestadmin/agent_toolkit/resources/collections/stats.py b/src/agent_toolkit/forestadmin/agent_toolkit/resources/collections/stats.py index 816d6c4c2..e4c1b9ee2 100644 --- a/src/agent_toolkit/forestadmin/agent_toolkit/resources/collections/stats.py +++ b/src/agent_toolkit/forestadmin/agent_toolkit/resources/collections/stats.py @@ -28,7 +28,7 @@ class StatsResource(BaseCollectionResource, ContextVariableInjectorResourceMixin): FREQUENCIES = {"Day": "d", "Week": "W-MON", "Month": "BMS", "Year": "BYS"} - FORMAT = {"Day": "%d/%m/%Y", "Week": "W%V-%Y", "Month": "%b %Y", "Year": "%Y"} + FORMAT = {"Day": "%d/%m/%Y", "Week": "W%V-%G", "Month": "%b %Y", "Year": "%Y"} def stats_method(self, type: str): return { diff --git a/src/agent_toolkit/tests/resources/collections/test_stats_resources.py b/src/agent_toolkit/tests/resources/collections/test_stats_resources.py index cf36cdaed..d2e131bdb 100644 --- a/src/agent_toolkit/tests/resources/collections/test_stats_resources.py +++ b/src/agent_toolkit/tests/resources/collections/test_stats_resources.py @@ -636,6 +636,33 @@ def test_line_should_return_chart_with_week_filter(self): {"label": "W02-2022", "values": {"value": 15}}, ) + def test_line_week_label_should_be_with_iso_year(self): + request = self.mk_request("Week") + with patch.object( + self.book_collection, + "aggregate", + new_callable=AsyncMock, + return_value=[ + {"value": 10, "group": {"date": "2024-12-23 00:00:00"}}, + {"value": 15, "group": {"date": "2024-12-30 00:00:00"}}, + {"value": 20, "group": {"date": "2025-01-06 00:00:00"}}, + ], + ): + response = self.loop.run_until_complete(self.stat_resource.line(request)) + + content_body = json.loads(response.body) + self.assertEqual(response.status, 200) + self.assertEqual(content_body["data"]["type"], "stats") + self.assertEqual(len(content_body["data"]["attributes"]["value"]), 3) + self.assertEqual( + content_body["data"]["attributes"]["value"], + [ + {"label": "W52-2024", "values": {"value": 10}}, + {"label": "W01-2025", "values": {"value": 15}}, + {"label": "W02-2025", "values": {"value": 20}}, + ], + ) + def test_line_should_return_chart_with_month_filter(self): request = self.mk_request("Month") with patch.object( diff --git a/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/chart/result_builder.py b/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/chart/result_builder.py index 0dfa1b6e9..1d3545e28 100644 --- a/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/chart/result_builder.py +++ b/src/datasource_toolkit/forestadmin/datasource_toolkit/decorators/chart/result_builder.py @@ -55,7 +55,7 @@ class ResultBuilder: FORMATS: Dict[DateOperation, str] = { DateOperation.DAY: "%d/%m/%Y", - DateOperation.WEEK: "W%V-%Y", + DateOperation.WEEK: "W%V-%G", DateOperation.MONTH: "%b %Y", DateOperation.YEAR: "%Y", } diff --git a/src/datasource_toolkit/tests/decorators/chart/test_chart_result_builder.py b/src/datasource_toolkit/tests/decorators/chart/test_chart_result_builder.py index 93b478fd7..43c225121 100644 --- a/src/datasource_toolkit/tests/decorators/chart/test_chart_result_builder.py +++ b/src/datasource_toolkit/tests/decorators/chart/test_chart_result_builder.py @@ -109,6 +109,24 @@ def test_time_based_should_return_correct_format_week(self): {"label": "W02-1986", "values": {"value": 7}}, ] + def test_time_based_should_return_correct_format_week_iso_year(self): + result = ResultBuilder.time_based( + DateOperation.WEEK, + { + "2024-12-23": 1, + "2024-12-30": 0, + "2025-01-06": 7, + }, + ) + self.assertEqual( + result, + [ + {"label": "W52-2024", "values": {"value": 1}}, + {"label": "W01-2025", "values": {"value": 0}}, + {"label": "W02-2025", "values": {"value": 7}}, + ], + ) + def test_time_based_should_return_correct_format_month(self): result = ResultBuilder.time_based( DateOperation.MONTH,