Path:
tests/unit/strictdoc/core/test_delete_document_validation.py
Lines:
88
Non-empty lines:
69
Non-empty lines covered with requirements:
69 / 69 (100.0%)
Functions:
4
Functions covered by requirements:
4 / 4 (100.0%)
1
"""2
@relation(SDOC-SRS-28, scope=file)3
"""4
5
from types import SimpleNamespace
6
7
import pytest
8
9
from strictdoc.backend.sdoc.document_reference import DocumentReference
10
from strictdoc.backend.sdoc.models.inline_link import InlineLink
11
from strictdoc.core.document_tree import DocumentTree
12
from strictdoc.core.traceability_index_builder import TraceabilityIndexBuilder
13
from strictdoc.core.transforms.validation_error import (
14
MultipleValidationErrorAsList,
15
)16
from tests.unit.helpers.document_builder import DocumentBuilder
17
18
19
def _build_traceability_index(document_list, project_config):
20
document_tree = DocumentTree(
21
file_tree=[],
22
document_list=document_list,
23
map_docs_by_paths={},
24
map_docs_by_rel_paths={},
25
map_grammars_by_filenames={},
26
)27
return TraceabilityIndexBuilder.create_from_document_tree(
28
document_tree, project_config=project_config
29
)30
31
32
def test_validate_can_remove_document_with_incoming_link():
33
document_builder = DocumentBuilder("DOC-1")
34
requirement_1 = document_builder.add_requirement("REQ-001")
35
requirement_2 = document_builder.add_requirement("REQ-002")
36
document = document_builder.build()
37
38
traceability_index = _build_traceability_index(
39
[document], document_builder.project_config
40
)41
traceability_index.create_inline_link(
42
InlineLink(
43
parent=SimpleNamespace(get_owning_node=lambda: requirement_1),
44
value=requirement_2.reserved_uid,
45
)46
)47
48
with pytest.raises(MultipleValidationErrorAsList):
49
traceability_index.validate_can_remove_document(document)
50
51
52
def test_validate_can_remove_document_with_parent_relation():
53
document_builder = DocumentBuilder("DOC-1")
54
_ = document_builder.add_requirement("REQ-001")
55
_ = document_builder.add_requirement("REQ-002")
56
document_builder.add_requirement_relation(
57
relation_type="Parent",
58
source_requirement_id="REQ-002",
59
target_requirement_id="REQ-001",
60
role=None,
61
)62
document = document_builder.build()
63
64
traceability_index = _build_traceability_index(
65
[document], document_builder.project_config
66
)67
68
with pytest.raises(MultipleValidationErrorAsList):
69
traceability_index.validate_can_remove_document(document)
70
71
72
def test_validate_can_remove_document_included_elsewhere():
73
document_builder_1 = DocumentBuilder("DOC-1")
74
document_1 = document_builder_1.build()
75
76
document_builder_2 = DocumentBuilder("DOC-2")
77
document_2 = document_builder_2.build()
78
79
document_2.ng_including_document_reference = DocumentReference()
80
document_2.ng_including_document_reference.set_document(document_1)
81
document_1.included_documents.append(document_2)
82
83
traceability_index = _build_traceability_index(
84
[document_1, document_2], document_builder_1.project_config
85
)86
87
with pytest.raises(MultipleValidationErrorAsList):
88
traceability_index.validate_can_remove_document(document_2)