StrictDoc Documentation
tests/unit/strictdoc/core/test_delete_document_validation.py
Source file coverage
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)