mirror of
https://github.com/basnijholt/compose-farm.git
synced 2026-02-08 00:12:11 +00:00
- Add "Shell: {service}" commands to the command palette when on a stack page
- Allows quick shell access to containers via `Cmd+K` → type "shell" → select service
- Add `get_container_name()` helper in `compose.py` for consistent container name resolution (used by both api.py and pages.py)
61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
"""Tests for compose file parsing utilities."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from compose_farm.compose import get_container_name
|
|
|
|
|
|
class TestGetContainerName:
|
|
"""Test get_container_name helper function."""
|
|
|
|
def test_explicit_container_name(self) -> None:
|
|
"""Uses container_name from service definition when set."""
|
|
service_def = {"image": "nginx", "container_name": "my-custom-name"}
|
|
result = get_container_name("web", service_def, "myproject")
|
|
assert result == "my-custom-name"
|
|
|
|
def test_default_naming_pattern(self) -> None:
|
|
"""Falls back to {project}-{service}-1 pattern."""
|
|
service_def = {"image": "nginx"}
|
|
result = get_container_name("web", service_def, "myproject")
|
|
assert result == "myproject-web-1"
|
|
|
|
def test_none_service_def(self) -> None:
|
|
"""Handles None service definition gracefully."""
|
|
result = get_container_name("web", None, "myproject")
|
|
assert result == "myproject-web-1"
|
|
|
|
def test_empty_service_def(self) -> None:
|
|
"""Handles empty service definition."""
|
|
result = get_container_name("web", {}, "myproject")
|
|
assert result == "myproject-web-1"
|
|
|
|
def test_container_name_none_value(self) -> None:
|
|
"""Handles container_name set to None."""
|
|
service_def = {"image": "nginx", "container_name": None}
|
|
result = get_container_name("web", service_def, "myproject")
|
|
assert result == "myproject-web-1"
|
|
|
|
def test_container_name_empty_string(self) -> None:
|
|
"""Handles container_name set to empty string."""
|
|
service_def = {"image": "nginx", "container_name": ""}
|
|
result = get_container_name("web", service_def, "myproject")
|
|
assert result == "myproject-web-1"
|
|
|
|
@pytest.mark.parametrize(
|
|
("service_name", "project_name", "expected"),
|
|
[
|
|
("redis", "plex", "plex-redis-1"),
|
|
("plex-server", "media", "media-plex-server-1"),
|
|
("db", "my-app", "my-app-db-1"),
|
|
],
|
|
)
|
|
def test_various_naming_combinations(
|
|
self, service_name: str, project_name: str, expected: str
|
|
) -> None:
|
|
"""Test various service/project name combinations."""
|
|
result = get_container_name(service_name, {"image": "test"}, project_name)
|
|
assert result == expected
|