import unittest from pathlib import Path TEMPLATE_PATH = Path(__file__).resolve().parents[1] / "template.yaml" class QueueRedrivePolicyTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.template = TEMPLATE_PATH.read_text(encoding="utf-8") def resource_block(self, resource_name, next_resource_name): start = f"\n {resource_name}:" end = f"\n {next_resource_name}:" self.assertIn(start, self.template) self.assertIn(end, self.template) return self.template.split(start, 1)[1].split(end, 1)[0] def test_monitor_queue_uses_monitor_dead_letter_queue(self): block = self.resource_block("MonitorQueue", "ScoringDeadLetterQueue") self.assertIn( "deadLetterTargetArn: !GetAtt MonitorDeadLetterQueue.Arn", block, ) self.assertNotIn("ScoringDeadLetterQueue.Arn", block) def test_scoring_queue_uses_scoring_dead_letter_queue(self): block = self.resource_block("ScoringQueue", "DispatcherFunction") self.assertIn( "deadLetterTargetArn: !GetAtt ScoringDeadLetterQueue.Arn", block, ) self.assertNotIn("MonitorDeadLetterQueue.Arn", block) def test_dispatcher_and_worker_receive_hubspot_configuration(self): dispatcher = self.resource_block("DispatcherFunction", "WorkerFunction") worker = self.resource_block("WorkerFunction", "ScoringFunction") self.assertIn("HUBSPOT_PRIVATE_APP_TOKEN: !Ref HubSpotPrivateAppToken", dispatcher) self.assertIn("TARGET_DATABASE_URL: !Ref TargetDatabaseURL", dispatcher) self.assertIn("HUBSPOT_TARGET_LIST_ID: !Ref HubSpotTargetListID", worker) self.assertIn("APAC_SALES_EMAILS: !Ref APACSalesEmails", worker) self.assertIn( "EFFECTIVE_OWNER_SYNC_FUNCTION_NAME: !Ref EffectiveSalesOwnerSyncFunction", dispatcher, ) self.assertIn("LambdaInvokePolicy:", dispatcher) def test_effective_owner_sync_uses_scoped_secret_access(self): block = self.resource_block( "EffectiveSalesOwnerSyncFunction", "DispatcherScheduleRule" ) self.assertIn("FunctionName: APAC-Effective-Sales-Owner-Sync-Task", block) self.assertIn( "GCP_SERVICE_ACCOUNT_SECRET_ARN: !Ref GCPServiceAccountSecretArn", block, ) self.assertIn("- secretsmanager:GetSecretValue", block) self.assertIn("Resource: !Ref GCPServiceAccountSecretArn", block) self.assertNotIn("secretsmanager:*", block) self.assertNotIn("private_key", block) self.assertNotIn("APAC_SALES_EMAILS", block) def test_effective_owner_sync_is_not_scheduled_yet(self): self.assertNotIn("EffectiveSalesOwnerSyncScheduleRule:", self.template) def test_scoring_receives_separate_hubspot_writeback_token(self): scoring = self.resource_block("ScoringFunction", "WeeklyMetricsFunction") self.assertIn("Timeout: 180", scoring) self.assertIn("ScalingConfig:\n MaximumConcurrency: 2", scoring) self.assertIn( "HUBSPOT_WRITEBACK_TOKEN: !Ref HubSpotWritebackPrivateAppToken", scoring, ) self.assertIn( "HUBSPOT_WRITEBACK_PROPERTY_NAME: apac_pql_priority_tier", scoring, ) self.assertIn("HubSpotWritebackPrivateAppToken:", self.template) parameter = self.template.split( "HubSpotWritebackPrivateAppToken:", 1 )[1].split("HubSpotTargetListID:", 1)[0] self.assertIn("NoEcho: true", parameter) def test_schedule_defaults_match_production_rules(self): self.assertNotIn("\n ScheduleState:", self.template) self.assertIn( "DispatcherScheduleState:\n Type: String\n Default: ENABLED", self.template, ) self.assertIn( "SummaryScheduleState:\n Type: String\n Default: ENABLED", self.template, ) self.assertIn( "WeeklyMetricsScheduleState:\n Type: String\n Default: DISABLED", self.template, ) self.assertIn( "DispatcherScheduleExpression:\n Type: String\n" " Default: cron(30 0 * * ? *)", self.template, ) self.assertIn( "SummaryScheduleExpression:\n Type: String\n" " Default: cron(0 4 * * ? *)", self.template, ) dispatcher = self.resource_block( "DispatcherScheduleRule", "DispatcherSchedulePermission" ) summary = self.resource_block( "SummaryScheduleRule", "SummarySchedulePermission" ) weekly = self.resource_block( "WeeklyMetricsScheduleRule", "WeeklyMetricsSchedulePermission" ) self.assertIn("State: !Ref DispatcherScheduleState", dispatcher) self.assertIn("State: !Ref SummaryScheduleState", summary) self.assertIn("State: !Ref WeeklyMetricsScheduleState", weekly) if __name__ == "__main__": unittest.main()