diff --git a/strictdoc/git/project_diff_analyzer.py b/strictdoc/git/project_diff_analyzer.py index 8cb1685e2..37853e574 100644 --- a/strictdoc/git/project_diff_analyzer.py +++ b/strictdoc/git/project_diff_analyzer.py @@ -12,6 +12,7 @@ SDocNodeField, ) from strictdoc.backend.sdoc.models.reference import ( + ChildReqReference, ParentReqReference, ) from strictdoc.backend.sdoc.models.section import SDocSection @@ -134,13 +135,10 @@ def contains_requirement_relations( if other_requirement is None: return False for reference_ in other_requirement.relations: - if isinstance(reference_, ParentReqReference): - parent_reference: ParentReqReference = assert_cast( - reference_, ParentReqReference - ) + if isinstance(reference_, (ParentReqReference, ChildReqReference)): if ( - parent_reference.ref_uid == relation_uid - and parent_reference.role == relation_role + reference_.ref_uid == relation_uid + and reference_.role == relation_role ): return True return False @@ -994,7 +992,9 @@ def analyze_document( ) for reference_ in node.relations: - if isinstance(reference_, ParentReqReference): + if isinstance( + reference_, (ParentReqReference, ChildReqReference) + ): hasher.update(reference_.ref_uid.encode("utf-8")) if reference_.role is not None: hasher.update(reference_.role.encode("utf-8")) diff --git a/tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/lhs/input.sdoc b/tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/lhs/input.sdoc similarity index 100% rename from tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/lhs/input.sdoc rename to tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/lhs/input.sdoc diff --git a/tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/rhs/input.sdoc b/tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/rhs/input.sdoc similarity index 100% rename from tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/rhs/input.sdoc rename to tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/rhs/input.sdoc diff --git a/tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/strictdoc.toml b/tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/strictdoc.toml similarity index 100% rename from tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/strictdoc.toml rename to tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/strictdoc.toml diff --git a/tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/test.itest b/tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/test.itest similarity index 100% rename from tests/integration/features/diff/20__requirements_relations__from_requirement_to_requirement__add_parent_uid/test.itest rename to tests/integration/features/diff/20__requirements_relations__same_document__add_parent_relation/test.itest diff --git a/tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/lhs/input.sdoc b/tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/lhs/input.sdoc similarity index 100% rename from tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/lhs/input.sdoc rename to tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/lhs/input.sdoc diff --git a/tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/rhs/input.sdoc b/tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/rhs/input.sdoc similarity index 100% rename from tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/rhs/input.sdoc rename to tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/rhs/input.sdoc diff --git a/tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/strictdoc.toml b/tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/strictdoc.toml similarity index 100% rename from tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/strictdoc.toml rename to tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/strictdoc.toml diff --git a/tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/test.itest b/tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/test.itest similarity index 100% rename from tests/integration/features/diff/21__requirements_relations__from_requirement_to_requirement__remove_parent_uid/test.itest rename to tests/integration/features/diff/21__requirements_relations__same_document__remove_parent_relation/test.itest diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input1.sdoc b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input1.sdoc new file mode 100644 index 000000000..836dffa4d --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input1.sdoc @@ -0,0 +1,7 @@ +[DOCUMENT] +TITLE: Hello world doc 1 + +[REQUIREMENT] +UID: REQ-1 +TITLE: Requirement #1 +STATEMENT: System shall do 1. diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input2.sdoc b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input2.sdoc new file mode 100644 index 000000000..1d319813e --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/lhs/input2.sdoc @@ -0,0 +1,7 @@ +[DOCUMENT] +TITLE: Hello world doc 2 + +[REQUIREMENT] +UID: REQ-2 +TITLE: Requirement #2 +STATEMENT: System shall do 2. diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input1.sdoc b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input1.sdoc new file mode 100644 index 000000000..e838362bc --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input1.sdoc @@ -0,0 +1,34 @@ +[DOCUMENT] +TITLE: Hello world doc 1 + +[GRAMMAR] +ELEMENTS: +- TAG: TEXT + FIELDS: + - TITLE: UID + TYPE: String + REQUIRED: False + - TITLE: STATEMENT + TYPE: String + REQUIRED: False +- TAG: REQUIREMENT + FIELDS: + - TITLE: UID + TYPE: String + REQUIRED: False + - TITLE: TITLE + TYPE: String + REQUIRED: False + - TITLE: STATEMENT + TYPE: String + REQUIRED: False + RELATIONS: + - TYPE: Child + +[REQUIREMENT] +UID: REQ-1 +TITLE: Requirement #1 +STATEMENT: System shall do 1. +RELATIONS: +- TYPE: Child + VALUE: REQ-2 diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input2.sdoc b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input2.sdoc new file mode 100644 index 000000000..1d319813e --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/rhs/input2.sdoc @@ -0,0 +1,7 @@ +[DOCUMENT] +TITLE: Hello world doc 2 + +[REQUIREMENT] +UID: REQ-2 +TITLE: Requirement #2 +STATEMENT: System shall do 2. diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/strictdoc.toml b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/strictdoc.toml new file mode 100644 index 000000000..8da279a5a --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/strictdoc.toml @@ -0,0 +1,6 @@ +[project] +title = "Test Project" + +features = [ + "DIFF", +] diff --git a/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/test.itest b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/test.itest new file mode 100644 index 000000000..4a2f4212b --- /dev/null +++ b/tests/integration/features/diff/22__requirements_relations__two_docs__add_child_relation/test.itest @@ -0,0 +1,40 @@ +RUN: %strictdoc diff %S/lhs %S/rhs --output-dir Output + +RUN: cat %S/Output/changelog.html | filecheck %s --check-prefix=CHECK-CHANGELOG + +CHECK-CHANGELOG:
Nodes modified
+CHECK-CHANGELOG:
1
+ +CHECK-CHANGELOG:
Documents modified
+CHECK-CHANGELOG:
No documents were modified.
+ +CHECK-CHANGELOG:
Sections modified
+CHECK-CHANGELOG:
No sections were modified.
+ +CHECK-CHANGELOG:
Requirements modified
+CHECK-CHANGELOG:
1 (1 modified)
+ +CHECK-CHANGELOG:# 1 +CHECK-CHANGELOG:Requirement modified + +CHECK-CHANGELOG:REQ-1 +CHECK-CHANGELOG:Requirement #1 +CHECK-CHANGELOG:System shall do 1. + +CHECK-CHANGELOG:REQ-1 +CHECK-CHANGELOG:Requirement #1 +CHECK-CHANGELOG:System shall do 1. +CHECK-CHANGELOG:text="child-relation"{{.*}}REQ-2 +CHECK-CHANGELOG:Requirement #2 + +RUN: cat %S/Output/diff.html | filecheck %s --check-prefix=CHECK-DIFF + +# The left document: no specific assertions. +CHECK-DIFF: modified="left" + +# The right column has REQ-1 and REQ-2 pointing to each other as child and parent. +CHECK-DIFF: modified="right" +CHECK-DIFF:REQ-1 +CHECK-DIFF:
REQ-2 +CHECK-DIFF:REQ-2 +CHECK-DIFF:
REQ-1