test: add test for root service

This commit is contained in:
Xyphuz 2023-01-11 00:54:06 +08:00
parent 168d034c05
commit eb84c5ed05
3 changed files with 39 additions and 6 deletions

View file

@ -26,15 +26,14 @@ class Parser:
return service_depends_on return service_depends_on
@staticmethod @staticmethod
def compile_dependencies(service_name: str, compose_data: spec.ComposeSpecification) -> List[str]: def compile_dependencies(service_name: str, services: Dict[Any, spec.Service], file_path: str) -> List[str]:
assert compose_data.services assert service_name in services, f"Service '{service_name}' not found in given compose file: '{file_path}'"
assert service_name in compose_data.services, f"Service '{service_name}' not found in given compose file."
dependencies = [] dependencies = []
for dependency in Parser._unwrap_depends_on(compose_data.services[service_name].depends_on): for dependency in Parser._unwrap_depends_on(services[service_name].depends_on):
if dependency: if dependency:
dependencies.append(dependency) dependencies.append(dependency)
dependencies.extend(Parser.compile_dependencies(dependency, compose_data)) dependencies.extend(Parser.compile_dependencies(dependency, services, file_path))
return dependencies return dependencies
def parse(self, file_path: str, root_service: Optional[str] = None) -> Compose: def parse(self, file_path: str, root_service: Optional[str] = None) -> Compose:
@ -51,8 +50,9 @@ class Parser:
root_dependencies: List[str] = [] root_dependencies: List[str] = []
if root_service: if root_service:
root_dependencies = Parser.compile_dependencies(root_service, compose_data) root_dependencies = Parser.compile_dependencies(root_service, compose_data.services, file_path)
root_dependencies.append(root_service) root_dependencies.append(root_service)
root_dependencies = list(set(root_dependencies))
for service_name, service_data in compose_data.services.items(): for service_name, service_data in compose_data.services.items():
service_name = str(service_name) service_name = str(service_name)

View file

@ -26,6 +26,7 @@ runner = CliRunner()
"tests/ymls/volumes/docker-compose.yml", "tests/ymls/volumes/docker-compose.yml",
"examples/full-stack-node-app/docker-compose.yml", "examples/full-stack-node-app/docker-compose.yml",
"examples/non-normative/docker-compose.yml", "examples/non-normative/docker-compose.yml",
"examples/voting-app/docker-compose.yml",
], ],
) )
def test_cli(test_file_path: str) -> None: def test_cli(test_file_path: str) -> None:

View file

@ -0,0 +1,32 @@
import os
from typer.testing import CliRunner
from compose_viz import cli
runner = CliRunner()
def test_root_service() -> None:
input_path = "examples/voting-app/docker-compose.yml"
output_filename = "compose-viz-test"
default_format = "png"
result = runner.invoke(cli.app, ["-r", "vote", "-o", output_filename, input_path])
assert result.exit_code == 0
assert f"Successfully parsed {input_path}\n" in result.stdout
assert os.path.exists(f"{output_filename}.{default_format}")
os.remove(f"{output_filename}.{default_format}")
def test_root_service_key_error() -> None:
input_path = "examples/voting-app/docker-compose.yml"
output_filename = "compose-viz-test"
default_format = "png"
result = runner.invoke(cli.app, ["-r", "not_exist_service", "-o", output_filename, input_path])
assert result.exit_code == 1
assert result.exception is not None
assert result.exception.args[0] == f"Service 'not_exist_service' not found in given compose file: '{input_path}'"
assert not os.path.exists(f"{output_filename}.{default_format}")