Initial commit: add AutoDeploy project
This commit is contained in:
112
tests/test_scanner.py
Normal file
112
tests/test_scanner.py
Normal file
@@ -0,0 +1,112 @@
|
||||
import json
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from deploy_tool.scanner import scan_project
|
||||
|
||||
|
||||
class ScannerTests(unittest.TestCase):
|
||||
def test_prunes_generated_and_dependency_directories(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
frontend = root / "web"
|
||||
frontend.mkdir()
|
||||
(frontend / "package.json").write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"dependencies": {"vue": "^3.4.0"},
|
||||
"scripts": {"dev": "vite", "build": "vite build"},
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
ignored_package = frontend / "node_modules" / "fake" / "package.json"
|
||||
ignored_package.parent.mkdir(parents=True)
|
||||
ignored_package.write_text(
|
||||
json.dumps({"dependencies": {"vue": "^3.4.0"}, "scripts": {"dev": "vite"}}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
ignored_sql = frontend / "dist" / "bundled.sql"
|
||||
ignored_sql.parent.mkdir()
|
||||
ignored_sql.write_text("select 1;", encoding="utf-8")
|
||||
|
||||
result = scan_project(root)
|
||||
|
||||
self.assertEqual([item.path for item in result.detected_frontends], [frontend])
|
||||
self.assertEqual(result.sql_files, [])
|
||||
|
||||
def test_detects_user_and_admin_frontends_with_ports_and_backend_context(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
backend = root / "server"
|
||||
client = root / "前端" / "client_code"
|
||||
admin = root / "前端" / "manage_code"
|
||||
|
||||
(backend / "src" / "main" / "java").mkdir(parents=True)
|
||||
resources = backend / "src" / "main" / "resources"
|
||||
resources.mkdir(parents=True)
|
||||
(backend / "pom.xml").write_text("<project>spring-boot</project>", encoding="utf-8")
|
||||
(resources / "application.yml").write_text(
|
||||
"server:\n servlet:\n context-path: /movies\n", encoding="utf-8"
|
||||
)
|
||||
|
||||
for frontend, port in ((client, 8082), (admin, 8081)):
|
||||
frontend.mkdir(parents=True)
|
||||
(frontend / "package.json").write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"dependencies": {"vue": "^3.4.0"},
|
||||
"scripts": {"build": "vue-cli-service build", "serve": "vue-cli-service serve"},
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
(frontend / "vue.config.js").write_text(
|
||||
f"module.exports = {{ devServer: {{ port: {port} }} }}", encoding="utf-8"
|
||||
)
|
||||
|
||||
result = scan_project(root)
|
||||
|
||||
self.assertEqual([item.path for item in result.detected_frontends], [client, admin])
|
||||
self.assertEqual([item.metadata["role"] for item in result.detected_frontends], ["user", "admin"])
|
||||
self.assertEqual([item.metadata["port"] for item in result.detected_frontends], ["8082", "8081"])
|
||||
self.assertEqual(result.backend.metadata["context_path"], "/movies")
|
||||
|
||||
def test_detects_spring_boot_vue_and_sql(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
backend = root / "server"
|
||||
frontend = root / "web"
|
||||
sql_dir = root / "db"
|
||||
|
||||
(backend / "src" / "main" / "java").mkdir(parents=True)
|
||||
(backend / "pom.xml").write_text(
|
||||
"<project><dependencies><dependency>spring-boot-starter-web</dependency></dependencies></project>",
|
||||
encoding="utf-8",
|
||||
)
|
||||
frontend.mkdir()
|
||||
(frontend / "package.json").write_text(
|
||||
json.dumps({"dependencies": {"vue": "^3.4.0"}, "scripts": {"build": "vite build"}}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
sql_dir.mkdir()
|
||||
(sql_dir / "schema.sql").write_text("create table demo(id int);", encoding="utf-8")
|
||||
|
||||
result = scan_project(root)
|
||||
|
||||
self.assertEqual(result.backend.path, backend)
|
||||
self.assertEqual(result.frontend.path, frontend)
|
||||
self.assertEqual(result.sql_files, [sql_dir / "schema.sql"])
|
||||
|
||||
def test_empty_folder_reports_missing_parts(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
result = scan_project(Path(tmp))
|
||||
|
||||
self.assertIsNone(result.backend)
|
||||
self.assertIsNone(result.frontend)
|
||||
self.assertEqual(result.sql_files, [])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user