import os import tempfile import unittest from pathlib import Path from unittest.mock import patch from scripts.check_production_dashboard_boundary import check class ProductionDashboardBoundaryTest(unittest.TestCase): source_commit = "a" * 40 def setUp(self): self.tmp = tempfile.TemporaryDirectory() self.addCleanup(self.tmp.cleanup) self.root = Path(self.tmp.name) (self.root / "neode-ui/src").mkdir(parents=True) self.dist = self.root / "web/dist/neode-ui" self.dist.mkdir(parents=True) (self.dist / "index.html").write_text("") (self.dist / "ARCHY-BUILD-PROFILE.json").write_text( '{"schema":1,"builder":"vite-dashboard","demo":false,"source_revision":"' + self.source_commit + '"}' ) self.env = patch.dict(os.environ, {"VITE_DEMO": "0"}, clear=True) self.env.start() self.addCleanup(self.env.stop) def test_clean_native_build_is_hashed(self): result = check(self.root, self.dist, "native-vite-production", self.source_commit) self.assertEqual(result["vite_demo"], "0") self.assertEqual(result["files"], 2) self.assertEqual(len(result["tree_sha256"]), 64) def test_demo_builder_or_flag_cannot_pass(self): with self.assertRaisesRegex(ValueError, "release builder"): check(self.root, self.dist, "neode-ui/Dockerfile.web", self.source_commit) os.environ["VITE_DEMO"] = "1" with self.assertRaisesRegex(ValueError, "VITE_DEMO=0"): check(self.root, self.dist, "native-vite-production", self.source_commit) def test_demo_profile_cannot_be_renamed_as_production(self): (self.dist / "ARCHY-BUILD-PROFILE.json").write_text( '{"schema":1,"builder":"vite-dashboard","demo":true,"source_revision":"' + self.source_commit + '"}' ) with self.assertRaisesRegex(ValueError, "build-time profile"): check(self.root, self.dist, "native-vite-production", self.source_commit) def test_mock_import_or_server_asset_cannot_pass(self): (self.root / "neode-ui/src/App.ts").write_text("import './mock/content-payments.js'\n") with self.assertRaisesRegex(ValueError, "imports a demo mock"): check(self.root, self.dist, "native-vite-production", self.source_commit) (self.root / "neode-ui/src/App.ts").unlink() (self.dist / "mock-backend.js").write_text("server") with self.assertRaisesRegex(ValueError, "demo mock/server asset"): check(self.root, self.dist, "native-vite-production", self.source_commit) if __name__ == "__main__": unittest.main()