Skip to content

Commit 7caaa51

Browse files
yt-msMidnighter
authored andcommitted
style: PR feedback
1 parent 6e39634 commit 7caaa51

File tree

5 files changed

+51
-39
lines changed

5 files changed

+51
-39
lines changed

src/structurizr/model/element.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,16 @@ def get_afferent_relationships(self) -> Iterator[Relationship]:
102102
def add_relationship(
103103
self, relationship: Optional[Relationship] = None, **kwargs
104104
) -> Relationship:
105+
"""Add a new relationship from this element to another.
106+
107+
This can be used either to add a `Relationship` instance that has already been constructed,
108+
or by passing the arguments (e.g. description, destination) with which to construct a new
109+
one. The relationship will automatically be registered with the element's model.
110+
"""
105111
if relationship is None:
106112
relationship = Relationship(**kwargs)
107113
elif relationship in self.relationships:
108-
return relationship # Nothing more to do
114+
return relationship
109115
if relationship.source is None:
110116
relationship.source = self
111117
elif relationship.source is not self:

src/structurizr/model/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ def _add_element(self, element: Element) -> None:
411411
def _add_relationship(self, relationship: Relationship) -> bool:
412412
""""""
413413
if relationship in self.get_relationships():
414-
return True # Nothing to do
414+
return True
415415
if not relationship.id:
416416
relationship.id = self._id_generator.generate_id()
417417
elif relationship.id in self._elements_by_id:

tests/integration/test_model_element_relationships.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ def test_adding_relationship_to_element_adds_to_model():
3636
sys1 = model.add_software_system(name="sys1")
3737
sys2 = model.add_software_system(name="sys2")
3838

39-
r = sys1.add_relationship(source=sys1, destination=sys2, description="uses")
40-
assert list(sys1.relationships) == [r]
41-
assert list(sys1.get_relationships()) == [r]
42-
assert list(model.get_relationships()) == [r]
43-
assert list(sys2.relationships) == [] # relationships only contains outbound
44-
assert list(sys2.get_relationships()) == [r]
39+
relationship = sys1.add_relationship(
40+
source=sys1, destination=sys2, description="uses"
41+
)
42+
assert sys1.relationships == {relationship}
43+
assert set(sys1.get_relationships()) == {relationship}
44+
assert set(model.get_relationships()) == {relationship}
45+
assert sys2.relationships == set() # relationships only contains outbound
46+
assert set(sys2.get_relationships()) == {relationship}
4547

4648

4749
def test_adding_relationship_to_model_adds_to_element():
@@ -53,12 +55,14 @@ def test_adding_relationship_to_model_adds_to_element():
5355
sys1 = model.add_software_system(name="sys1")
5456
sys2 = model.add_software_system(name="sys2")
5557

56-
r = model.add_relationship(source=sys1, destination=sys2, description="uses")
57-
assert list(sys1.relationships) == [r]
58-
assert list(sys1.get_relationships()) == [r]
59-
assert list(model.get_relationships()) == [r]
60-
assert list(sys2.relationships) == [] # relationships only contains outbound
61-
assert list(sys2.get_relationships()) == [r]
58+
relationship = model.add_relationship(
59+
source=sys1, destination=sys2, description="uses"
60+
)
61+
assert sys1.relationships == {relationship}
62+
assert set(sys1.get_relationships()) == {relationship}
63+
assert set(model.get_relationships()) == {relationship}
64+
assert sys2.relationships == set() # relationships only contains outbound
65+
assert set(sys2.get_relationships()) == {relationship}
6266

6367

6468
def test_adding_relationship_via_uses_adds_to_elements():
@@ -70,12 +74,12 @@ def test_adding_relationship_via_uses_adds_to_elements():
7074
sys1 = model.add_software_system(name="sys1")
7175
sys2 = model.add_software_system(name="sys2")
7276

73-
r = sys1.uses(sys2, "uses")
74-
assert list(sys1.relationships) == [r]
75-
assert list(sys1.get_relationships()) == [r]
76-
assert list(model.get_relationships()) == [r]
77-
assert list(sys2.relationships) == [] # relationships only contains outbound
78-
assert list(sys2.get_relationships()) == [r]
77+
relationship = sys1.uses(sys2, "uses")
78+
assert sys1.relationships == {relationship}
79+
assert set(sys1.get_relationships()) == {relationship}
80+
assert set(model.get_relationships()) == {relationship}
81+
assert sys2.relationships == set() # relationships only contains outbound
82+
assert set(sys2.get_relationships()) == {relationship}
7983

8084

8185
@pytest.mark.parametrize(

tests/unit/model/test_element.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import pytest
2020

2121
from structurizr.model.element import Element
22-
from structurizr.model.model import Model
2322

2423

2524
class ConcreteElement(Element):
@@ -31,7 +30,8 @@ class ConcreteElement(Element):
3130
class MockModel:
3231
"""Implement a mock model for reference testing."""
3332

34-
pass
33+
def add_relationship(self, relationship):
34+
return relationship
3535

3636

3737
@pytest.mark.parametrize(
@@ -74,10 +74,10 @@ def test_element_add_relationship_can_omit_source():
7474
"""
7575
element1 = ConcreteElement(name="elt1")
7676
element2 = ConcreteElement(name="elt1")
77-
model = Model()
78-
model._add_element(element1)
79-
r = element1.add_relationship(destination=element2)
80-
assert r.source is element1
77+
model = MockModel()
78+
element1.set_model(model)
79+
relationship = element1.add_relationship(destination=element2)
80+
assert relationship.source is element1
8181

8282

8383
def test_element_add_relationship_twice_is_ok():
@@ -86,8 +86,8 @@ def test_element_add_relationship_twice_is_ok():
8686
"""
8787
element1 = ConcreteElement(name="elt1")
8888
element2 = ConcreteElement(name="elt1")
89-
model = Model()
90-
model._add_element(element1)
91-
r = element1.add_relationship(destination=element2)
92-
element1.add_relationship(r)
93-
assert list(element1.relationships) == [r]
89+
model = MockModel()
90+
element1.set_model(model)
91+
relationship = element1.add_relationship(destination=element2)
92+
element1.add_relationship(relationship)
93+
assert element1.relationships == {relationship}

tests/unit/model/test_model.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,31 @@ def test_model_get_relationship_by_id(empty_model: Model):
2929
"""Test retrieving relationships by their IDs."""
3030
sys1 = empty_model.add_software_system(name="sys1")
3131
sys2 = empty_model.add_software_system(name="sys2")
32-
r = empty_model.add_relationship(source=sys1, destination=sys2, id="r1")
33-
assert empty_model.get_relationship("r1") is r
32+
relationship = empty_model.add_relationship(source=sys1, destination=sys2, id="r1")
33+
assert empty_model.get_relationship("r1") is relationship
3434

3535

3636
def test_model_add_relationship_twice_ignored(empty_model: Model):
3737
"""Make sure that adding an existing relationship to the Model makes no difference."""
3838
sys1 = empty_model.add_software_system(name="sys1")
3939
sys2 = empty_model.add_software_system(name="sys2")
40-
r = empty_model.add_relationship(source=sys1, destination=sys2)
41-
assert list(empty_model.get_relationships()) == [r]
42-
empty_model.add_relationship(r)
43-
assert list(empty_model.get_relationships()) == [r]
40+
relationship = empty_model.add_relationship(source=sys1, destination=sys2)
41+
assert set(empty_model.get_relationships()) == {relationship}
42+
empty_model.add_relationship(relationship)
43+
assert set(empty_model.get_relationships()) == {relationship}
4444

4545

4646
def test_model_cannot_add_relationship_with_same_id_as_existing(empty_model: Model):
4747
"""Ensure you can't add two relationships with the same ID."""
4848
sys1 = empty_model.add_software_system(name="sys1")
4949
sys2 = empty_model.add_software_system(name="sys2")
50-
r1 = empty_model.add_relationship(source=sys1, destination=sys2, id="r1")
50+
relationship1 = empty_model.add_relationship(source=sys1, destination=sys2, id="r1")
5151
with pytest.raises(
5252
ValueError, match="Relationship.* has the same ID as Relationship.*"
5353
):
54-
r2 = empty_model.add_relationship(source=sys1, destination=sys2, id="r1")
54+
relationship2 = empty_model.add_relationship(
55+
source=sys1, destination=sys2, id="r1"
56+
)
5557

5658

5759
def test_model_cannot_add_relationship_with_same_id_as_element(empty_model: Model):

0 commit comments

Comments
 (0)