test_snippet_generation

tests/test_snippet_generation.py
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
from debputy.maintscript_snippet import (
    MaintscriptSnippetContainer,
    UnboundMaintscriptSnippet,
    SnippetResolver,
    SnippetAnchor,
)


def test_snippet_generation() -> None:
    container = MaintscriptSnippetContainer("postinst")

    assert (
        container.generate_snippet(
            snippet_anchor=SnippetAnchor._BETWEEN_CONFIGURATION_MANAGEMENT_AND_SERVICE,
        )
        is None
    )
    assert container.generate_snippet(snippet_anchor=SnippetAnchor.SERVICE) is None

    container.append(
        UnboundMaintscriptSnippet(
            definition_source="test/1",
            snippet=SnippetResolver.snippet("systemctl status\n"),
            snippet_anchor=SnippetAnchor.SERVICE,
        )
    )
    container.append(
        UnboundMaintscriptSnippet(
            definition_source="test/2",
            snippet=SnippetResolver.snippet("run foo\n"),
        )
    )
    assert not container.needs_debconf()
    snippet = container.generate_snippet(
        snippet_anchor=SnippetAnchor._BETWEEN_CONFIGURATION_MANAGEMENT_AND_SERVICE,
    )
    assert snippet
    assert "run foo\n" in snippet
    assert "systemctl status\n" not in snippet
    service_snippet = container.generate_snippet(snippet_anchor=SnippetAnchor.SERVICE)
    assert service_snippet
    assert "run foo\n" not in service_snippet
    assert "systemctl status\n" in service_snippet

    container.append(
        UnboundMaintscriptSnippet(
            definition_source="test/2",
            snippet=SnippetResolver.snippet("db_get foo\n"),
            uses_debconf=True,
        )
    )

    assert container.needs_debconf()
    snippet = container.generate_snippet(
        snippet_anchor=SnippetAnchor._BETWEEN_CONFIGURATION_MANAGEMENT_AND_SERVICE,
    )
    assert snippet
    assert "run foo\n" in snippet
    assert "db_get foo\n" in snippet
    assert "systemctl status\n" not in snippet
    service_snippet = container.generate_snippet(snippet_anchor=SnippetAnchor.SERVICE)
    assert service_snippet
    assert "run foo\n" not in service_snippet
    assert "db_get foo\n" not in service_snippet
    assert "systemctl status\n" in service_snippet
    snippet_lines = snippet.splitlines(keepends=True)
    foo_idx = snippet_lines.index("run foo\n")
    db_get_idx = snippet_lines.index("db_get foo\n")
    assert foo_idx < db_get_idx

    reversed_snippet = container.generate_snippet(
        snippet_anchor=SnippetAnchor._BETWEEN_CONFIGURATION_MANAGEMENT_AND_SERVICE,
        reverse=True,
    )
    assert reversed_snippet
    assert "run foo\n" in reversed_snippet
    assert "db_get foo\n" in reversed_snippet
    assert "systemctl status\n" not in reversed_snippet

    reversed_snippet_lines = reversed_snippet.splitlines(keepends=True)
    reversed_foo_idx = reversed_snippet_lines.index("run foo\n")
    reversed_db_get_idx = reversed_snippet_lines.index("db_get foo\n")
    assert reversed_foo_idx > reversed_db_get_idx