Path:
tests/unit/strictdoc/export/html/form_objects/test_requirement_form_object_markup_validation.py
Lines:
105
Non-empty lines:
90
Non-empty lines covered with requirements:
90 / 90 (100.0%)
Functions:
4
Functions covered by requirements:
4 / 4 (100.0%)
1
"""2
@relation(SDOC-SRS-55, scope=file)3
"""4
5
from strictdoc.backend.sdoc.constants import SDocMarkup
6
from strictdoc.core.document_tree import DocumentTree
7
from strictdoc.core.project_config import ProjectConfig
8
from strictdoc.core.traceability_index import TraceabilityIndex
9
from strictdoc.core.traceability_index_builder import TraceabilityIndexBuilder
10
from strictdoc.export.html.form_objects.requirement_form_object import (
11
RequirementFormObject,
12
)13
from tests.unit.helpers.document_builder import DocumentBuilder
14
15
# A Markdown pipe table. It is valid Markdown but not valid RST: the separator16
# row "|---|...|" is not a valid line-block continuation of the header row,17
# which docutils reports as "Line block ends without a blank line".18
MARKDOWN_TABLE = (
19
"| | Action | Verify |\n"
20
"|---|--------|--------|\n"
21
"| 1 | Do the thing | |\n"
22
"| 2 | Do another thing | |\n"
23
)24
25
26
def _build_index_with_single_requirement():
27
document_builder = DocumentBuilder()
28
requirement = document_builder.add_requirement("REQ-001")
29
document = document_builder.build()
30
31
document_tree = DocumentTree(
32
file_tree=[],
33
document_list=[document],
34
map_docs_by_paths={},
35
map_docs_by_rel_paths={},
36
map_grammars_by_filenames={},
37
)38
traceability_index: TraceabilityIndex = (
39
TraceabilityIndexBuilder.create_from_document_tree(
40
document_tree, project_config=document_builder.project_config
41
)42
)43
traceability_index.document_tree = document_tree
44
return traceability_index, document, requirement
45
46
47
def _make_form_object_with_statement(requirement, document, statement_value):
48
form_object: RequirementFormObject = (
49
RequirementFormObject.create_from_requirement(
50
requirement=requirement,
51
revision=0,
52
context_document_mid=document.reserved_mid,
53
)54
)55
for field in form_object.fields["STATEMENT"]:
56
field.field_value = statement_value
57
return form_object
58
59
60
def test_markdown_document_validates_field_as_markdown():
61
"""
62
In a Markdown document, a field containing a Markdown table validates63
without errors.64
"""65
traceability_index, document, requirement = (
66
_build_index_with_single_requirement()
67
)68
document.config.markup = SDocMarkup.MARKDOWN
69
70
form_object = _make_form_object_with_statement(
71
requirement, document, MARKDOWN_TABLE
72
)73
form_object.validate(
74
traceability_index=traceability_index,
75
context_document=document,
76
config=ProjectConfig.default_config(),
77
existing_revision=0,
78
)79
80
assert not form_object.any_errors()
81
assert form_object.get_errors("STATEMENT") == []
82
83
84
def test_rst_document_validates_field_as_rst():
85
"""
86
In an RST document, a field is validated as RST. The pipe table is not87
valid RST, so validation reports an error against the field.88
"""89
traceability_index, document, requirement = (
90
_build_index_with_single_requirement()
91
)92
document.config.markup = SDocMarkup.RST
93
94
form_object = _make_form_object_with_statement(
95
requirement, document, MARKDOWN_TABLE
96
)97
form_object.validate(
98
traceability_index=traceability_index,
99
context_document=document,
100
config=ProjectConfig.default_config(),
101
existing_revision=0,
102
)103
104
assert form_object.any_errors()
105
assert len(form_object.get_errors("STATEMENT")) > 0