#!/usr/bin/env python3 """Tests for check_app_terraform_isolation.""" from __future__ import annotations import unittest from check_app_terraform_isolation import first_isolation_violation, isolation_violation APP_PATHS = "src/\npackage.json\npackage-lock.json\n" class IsolationTests(unittest.TestCase): def test_terraform_only(self) -> None: self.assertIsNone( isolation_violation( ["terraform/lambda.tf", "terraform/README.md"], APP_PATHS, ) ) def test_app_only(self) -> None: self.assertIsNone( isolation_violation( ["src/processPaymentCsv.js", "package.json", "package-lock.json"], APP_PATHS, ) ) def test_docs_and_workflows_with_terraform(self) -> None: self.assertIsNone( isolation_violation( [ "terraform/lambda.tf", ".github/workflows/deploy.yaml", "SETUP.md", "scripts/check_app_terraform_isolation.py", ], APP_PATHS, ) ) def test_mixed_app_and_terraform_fails(self) -> None: violation = isolation_violation( ["terraform/lambda.tf", "src/processPaymentCsv.js", "package.json"], APP_PATHS, ) self.assertIsNotNone(violation) terraform_files, app_files = violation or ([], []) self.assertEqual(terraform_files, ["terraform/lambda.tf"]) self.assertEqual(app_files, ["package.json", "src/processPaymentCsv.js"]) def test_empty_app_paths_skips(self) -> None: self.assertIsNone( isolation_violation( ["terraform/lambda.tf", "src/processPaymentCsv.js"], "", ) ) def test_separate_commits_pass_when_classified_alone(self) -> None: self.assertIsNone( first_isolation_violation( [ ["terraform/lambda.tf"], ["src/processPaymentCsv.js"], ], APP_PATHS, ) ) def test_union_of_separate_commits_fails(self) -> None: violation = isolation_violation( ["terraform/lambda.tf", "src/processPaymentCsv.js"], APP_PATHS, ) self.assertIsNotNone(violation) if __name__ == "__main__": unittest.main()