import importlib.util import json import sys import unittest from datetime import datetime, timezone from pathlib import Path from unittest import mock ROOT = Path(__file__).resolve().parents[2] VENDORED_PYMYSQL = ( ROOT / "aws-lambda-apac-copy" / "emea-source" / "unpacked" / "EMEA-Tenants-Scoring-Task" ) sys.path.insert(0, str(VENDORED_PYMYSQL)) WEEKLY_METRICS_PATH = ( ROOT / "apac_lambda_tasks" / "APAC-Weekly-Tenant-Metrics-Task" / "weekly_metrics_function.py" ) spec = importlib.util.spec_from_file_location( "apac_weekly_metrics_function", WEEKLY_METRICS_PATH ) weekly_metrics_function = importlib.util.module_from_spec(spec) spec.loader.exec_module(weekly_metrics_function) class WeeklyMetricsFunctionTest(unittest.TestCase): def test_previous_complete_week_uses_cst_sunday_boundaries(self): start, end = weekly_metrics_function.previous_complete_cst_week( datetime(2026, 7, 13, 7, 0, tzinfo=timezone.utc) ) self.assertEqual(datetime(2026, 7, 4, 16), start) self.assertEqual(datetime(2026, 7, 11, 16), end) def test_cst_sunday_is_not_treated_as_utc_saturday(self): start, end = weekly_metrics_function.previous_complete_cst_week( datetime(2026, 7, 11, 20, 0, tzinfo=timezone.utc) ) self.assertEqual(datetime(2026, 7, 4, 16), start) self.assertEqual(datetime(2026, 7, 11, 16), end) def test_metrics_query_uses_apac_stock_scope_and_creation_time_signups(self): start = datetime(2026, 7, 4, 16) end = datetime(2026, 7, 11, 16) with ( mock.patch.object( weekly_metrics_function, "previous_complete_cst_week", return_value=(start, end), ), mock.patch.object( weekly_metrics_function, "fetch_one", return_value={"apac_stock_total": 0}, ) as fetch_one, ): weekly_metrics_function.fetch_weekly_metrics(object()) sql = fetch_one.call_args.args[1] params = fetch_one.call_args.args[2] self.assertIn("sales_force_region = 'APAC'", sql) self.assertIn("country_region = 'APAC'", sql) self.assertIn("country NOT IN ('JP')", sql) self.assertIn("plan NOT IN ('free_trial', 'new_user', 'closing')", sql) self.assertNotIn("country_region = 'EMEA'", sql) self.assertNotIn("source_type = 'new_signup'", sql) self.assertEqual( ( datetime(2026, 7, 5).date(), datetime(2026, 7, 12).date(), start, end, ), params, ) def test_card_contains_only_apac_region_label(self): card = weekly_metrics_function.build_card( { "week_start_cst": datetime(2026, 7, 5), "week_end_cst": datetime(2026, 7, 12), } ) rendered = json.dumps(card) self.assertIn("APAC Weekly Tenant Metrics", rendered) self.assertIn("APAC Stock Tenants", rendered) self.assertIn("Signup window: CST", rendered) self.assertNotIn("EMEA", rendered) if __name__ == "__main__": unittest.main()