File size: 1,482 Bytes
f005306
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

import json

from server import _merge_class_names, _merge_documents
from tiny_trigger.automation import AutomationDocument, load_automation_text


def test_merge_documents_replaces_same_named_rule() -> None:
    existing = load_automation_text(
        json.dumps(
            {
                "rules": [
                    {
                        "name": "monitor-lights",
                        "when": {"all": [{"present": {"label": "person"}}]},
                        "then": [{"type": "simulate", "name": "old action"}],
                    }
                ]
            }
        )
    )
    compiled = load_automation_text(
        json.dumps(
            {
                "rules": [
                    {
                        "name": "monitor-lights",
                        "when": {"all": [{"present": {"label": "monitor"}}]},
                        "then": [{"type": "simulate", "name": "new action"}],
                    }
                ]
            }
        )
    )

    merged = _merge_documents(existing, compiled)

    assert isinstance(merged, AutomationDocument)
    assert [rule.name for rule in merged.rules] == ["monitor-lights"]
    assert merged.rules[0].then[0].name == "new action"


def test_merge_class_names_adds_rule_labels_without_duplicates() -> None:
    assert _merge_class_names(["person", "Monitor"], ["monitor", "guitar"]) == [
        "person",
        "Monitor",
        "guitar",
    ]