File: test_import_teamocil.py

package info (click to toggle)
tmuxp 1.55.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,688 kB
  • sloc: python: 8,049; makefile: 202; sh: 14
file content (141 lines) | stat: -rw-r--r-- 4,407 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"""Test for tmuxp teamocil configuration."""

from __future__ import annotations

import typing as t

import pytest

from tests.fixtures import import_teamocil as fixtures
from tmuxp._internal import config_reader
from tmuxp.workspace import importers, validation


class TeamocilConfigTestFixture(t.NamedTuple):
    """Test fixture for teamocil config conversion tests."""

    test_id: str
    teamocil_yaml: str
    teamocil_dict: dict[str, t.Any]
    tmuxp_dict: dict[str, t.Any]


TEAMOCIL_CONFIG_TEST_FIXTURES: list[TeamocilConfigTestFixture] = [
    TeamocilConfigTestFixture(
        test_id="test1",
        teamocil_yaml=fixtures.test1.teamocil_yaml,
        teamocil_dict=fixtures.test1.teamocil_conf,
        tmuxp_dict=fixtures.test1.expected,
    ),
    TeamocilConfigTestFixture(
        test_id="test2",
        teamocil_yaml=fixtures.test2.teamocil_yaml,
        teamocil_dict=fixtures.test2.teamocil_dict,
        tmuxp_dict=fixtures.test2.expected,
    ),
    TeamocilConfigTestFixture(
        test_id="test3",
        teamocil_yaml=fixtures.test3.teamocil_yaml,
        teamocil_dict=fixtures.test3.teamocil_dict,
        tmuxp_dict=fixtures.test3.expected,
    ),
    TeamocilConfigTestFixture(
        test_id="test4",
        teamocil_yaml=fixtures.test4.teamocil_yaml,
        teamocil_dict=fixtures.test4.teamocil_dict,
        tmuxp_dict=fixtures.test4.expected,
    ),
]


@pytest.mark.parametrize(
    list(TeamocilConfigTestFixture._fields),
    TEAMOCIL_CONFIG_TEST_FIXTURES,
    ids=[test.test_id for test in TEAMOCIL_CONFIG_TEST_FIXTURES],
)
def test_config_to_dict(
    test_id: str,
    teamocil_yaml: str,
    teamocil_dict: dict[str, t.Any],
    tmuxp_dict: dict[str, t.Any],
) -> None:
    """Test exporting teamocil configuration to dictionary."""
    yaml_to_dict = config_reader.ConfigReader._load(
        fmt="yaml",
        content=teamocil_yaml,
    )
    assert yaml_to_dict == teamocil_dict

    assert importers.import_teamocil(teamocil_dict) == tmuxp_dict

    validation.validate_schema(importers.import_teamocil(teamocil_dict))


@pytest.fixture(scope="module")
def multisession_config() -> dict[
    str,
    dict[str, t.Any],
]:
    """Return loaded multisession teamocil config as a dictionary.

    Also prevents re-running assertion the loads the yaml, since ordering of
    deep list items like panes will be inconsistent.
    """
    teamocil_yaml_file = fixtures.layouts.teamocil_yaml_file
    test_config = config_reader.ConfigReader._from_file(teamocil_yaml_file)
    teamocil_dict: dict[str, t.Any] = fixtures.layouts.teamocil_dict

    assert test_config == teamocil_dict
    return teamocil_dict


class TeamocilMultiSessionTestFixture(t.NamedTuple):
    """Test fixture for teamocil multisession config tests."""

    test_id: str
    session_name: str
    expected: dict[str, t.Any]


TEAMOCIL_MULTISESSION_TEST_FIXTURES: list[TeamocilMultiSessionTestFixture] = [
    TeamocilMultiSessionTestFixture(
        test_id="basic_two_windows",
        session_name="two-windows",
        expected=fixtures.layouts.two_windows,
    ),
    TeamocilMultiSessionTestFixture(
        test_id="two_windows_with_filters",
        session_name="two-windows-with-filters",
        expected=fixtures.layouts.two_windows_with_filters,
    ),
    TeamocilMultiSessionTestFixture(
        test_id="two_windows_with_custom_command_options",
        session_name="two-windows-with-custom-command-options",
        expected=fixtures.layouts.two_windows_with_custom_command_options,
    ),
    TeamocilMultiSessionTestFixture(
        test_id="three_windows_within_session",
        session_name="three-windows-within-a-session",
        expected=fixtures.layouts.three_windows_within_a_session,
    ),
]


@pytest.mark.parametrize(
    list(TeamocilMultiSessionTestFixture._fields),
    TEAMOCIL_MULTISESSION_TEST_FIXTURES,
    ids=[test.test_id for test in TEAMOCIL_MULTISESSION_TEST_FIXTURES],
)
def test_multisession_config(
    test_id: str,
    session_name: str,
    expected: dict[str, t.Any],
    multisession_config: dict[str, t.Any],
) -> None:
    """Test importing teamocil multisession configuration."""
    # teamocil can fit multiple sessions in a config
    assert importers.import_teamocil(multisession_config[session_name]) == expected

    validation.validate_schema(
        importers.import_teamocil(multisession_config[session_name]),
    )