-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_emotionalunits.py
147 lines (126 loc) · 4.63 KB
/
test_emotionalunits.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
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
142
143
144
145
146
147
from pkdiagram import util
from pkdiagram.scene import Scene, Marriage, Person, Layer
def _add_unit(scene: Scene, children=True):
personA, personB = Person(name="A"), Person(name="B")
scene.addItems(personA, personB)
marriage = Marriage(personA=personA, personB=personB)
scene.addItem(marriage)
if children:
child_1 = Person(name="C")
child_2 = Person(name="D")
scene.addItems(child_1, child_2)
child_1.setParents(marriage)
child_2.setParents(marriage)
return marriage
def test_add_marriage():
scene = Scene()
layerAdded = util.Condition(scene.layerAdded)
marriage = _add_unit(scene, children=False)
personA, personB = marriage.people
emotionalUnit = marriage.emotionalUnit()
assert set(personA.layers() + personB.layers()) == {emotionalUnit.layer().id}
assert emotionalUnit.marriage() is marriage
assert layerAdded.callCount == 1
assert len(scene.layers()) == 1
assert emotionalUnit.layer().name() == None
assert personA._layers == [emotionalUnit.layer()]
assert personB._layers == [emotionalUnit.layer()]
def test_add_children():
scene = Scene()
marriage = _add_unit(scene)
personA, personB = marriage.people
child_1, child_2 = marriage.children
emotionalUnit = marriage.emotionalUnit()
layer = emotionalUnit.layer()
assert set(emotionalUnit.people()) == {personA, personB, child_1, child_2}
assert set(
personA.layers() + personB.layers() + child_1.layers() + child_2.layers()
) == {layer.id}
assert personA._layers == [layer]
assert personB._layers == [layer]
assert child_1._layers == [layer]
assert child_2._layers == [layer]
def test_remove_marriage():
scene = Scene()
layerRemoved = util.Condition(scene.layerRemoved)
marriage = _add_unit(scene, children=False)
personA, personB = marriage.people
scene.removeItem(marriage)
assert scene.emotionalUnits() == []
assert layerRemoved.callCount == 1
assert scene.layers() == []
assert set(personA.layers() + personB.layers()) == set()
assert personA._layers == []
assert personB._layers == []
def test_remove_people():
scene = Scene()
marriage = _add_unit(scene)
personA, personB = marriage.people
child_1, child_2 = marriage.children
assert marriage.emotionalUnit().people() == [personA, personB, child_1, child_2]
child_1.setParents(None)
assert marriage.emotionalUnit().people() == [personA, personB, child_2]
assert child_1.layers() == []
personA._onRemoveMarriage(marriage)
child_2.setParents(None)
scene.removeItem(marriage)
assert scene.emotionalUnits() == []
assert personA.layers() == []
assert personB.layers() == []
assert child_1.layers() == []
assert child_2.layers() == []
assert personA._layers == []
assert personB._layers == []
assert child_1._layers == []
assert child_2._layers == []
def test_ignores_custom_layers():
CUSTOM_NAME = "My Layer"
scene = Scene()
layerAdded = util.Condition(scene.layerAdded)
layer = Layer(name=CUSTOM_NAME)
scene.addItem(layer)
assert layerAdded.callCount == 1
marriage = Marriage(personA=Person(name="A"), personB=Person(name="B"))
scene.addItem(marriage)
assert layerAdded.callCount == 2
assert len(scene.layers()) == 2
assert sum(1 for x in scene.layers() if not x.internal()) == 1
def test_sort():
scene = Scene()
marriage_1 = Marriage(
personA=Person(name="A", birthDateTime=util.Date(2001, 1, 1)),
personB=Person(name="B"),
)
marriage_2 = Marriage(
personA=Person(name="B"),
personB=Person(name="C", birthDateTime=util.Date(2000, 1, 1)),
)
scene.addItems(marriage_1, marriage_2)
emotionalUnit_1 = marriage_1.emotionalUnit()
emotionalUnit_2 = marriage_2.emotionalUnit()
assert emotionalUnit_2 < emotionalUnit_1
def test_read_write_batching():
scene = Scene()
marriage = _add_unit(scene)
data = {}
scene.write(data)
scene = Scene()
scene.read(data)
marriage = scene.marriages()[0]
personA, personB = marriage.people
child_1, child_2 = marriage.children
layer = marriage.emotionalUnit().layer()
assert len(scene.emotionalUnits()) == 1
assert set(x.id for x in marriage.emotionalUnit().people()) == {
personA.id,
personB.id,
child_1.id,
child_2.id,
}
assert set(
personA.layers() + personB.layers() + child_1.layers() + child_2.layers()
) == {layer.id}
assert personA._layers == [layer]
assert personB._layers == [layer]
assert child_1._layers == [layer]
assert child_2._layers == [layer]