import importlib.util import json import sys import types import unittest from datetime import datetime, timezone from pathlib import Path from unittest import mock ROOT = Path(__file__).resolve().parents[2] fake_pymysql = types.ModuleType("pymysql") fake_pymysql.cursors = types.SimpleNamespace(DictCursor=object) fake_pymysql.connect = lambda **kwargs: None sys.modules.setdefault("pymysql", fake_pymysql) WEEKLY_METRICS_PATH = ( ROOT / "latam_lambda_tasks" / "LATAM-Weekly-Tenant-Metrics-Task" / "weekly_metrics_function.py" ) spec = importlib.util.spec_from_file_location( "latam_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_is_sunday_to_sunday_utc(self): start, end = weekly_metrics_function.previous_complete_utc_week( datetime(2026, 7, 13, 7, 0, tzinfo=timezone.utc) ) self.assertEqual(datetime(2026, 7, 5), start) self.assertEqual(datetime(2026, 7, 12), end) def test_metrics_query_uses_latam_stock_scope_and_creation_time_signups(self): start = datetime(2026, 7, 5) end = datetime(2026, 7, 12) with ( mock.patch.object( weekly_metrics_function, "previous_complete_utc_week", return_value=(start, end), ), mock.patch.object( weekly_metrics_function, "fetch_one", return_value={"latam_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 = 'LATAM'", sql) self.assertIn("country_region = 'LATAM'", sql) self.assertNotIn("country NOT IN", sql) self.assertIn("plan NOT IN ('free_trial', 'new_user', 'closing')", sql) self.assertNotIn("source_type = 'new_signup'", sql) self.assertEqual((start, end, start, end), params) def test_card_contains_only_latam_region_label(self): card = weekly_metrics_function.build_card( { "week_start_utc": datetime(2026, 7, 5), "week_end_utc": datetime(2026, 7, 12), } ) rendered = json.dumps(card) self.assertIn("LATAM Weekly Tenant Metrics", rendered) self.assertIn("LATAM Stock Tenants", rendered) if __name__ == "__main__": unittest.main()