Skip to content

Commit

Permalink
UI: Node form validation: allow empty SingleChoice fields when REQUIR…
Browse files Browse the repository at this point in the history
…ED is False

Closes #1876
  • Loading branch information
stanislaw committed Jun 19, 2024
1 parent b4112cc commit a6b0b5e
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 2 deletions.
2 changes: 1 addition & 1 deletion strictdoc/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from strictdoc.core.environment import SDocRuntimeEnvironment

__version__ = "0.0.57a2"
__version__ = "0.0.57a3"


environment = SDocRuntimeEnvironment(__file__)
12 changes: 11 additions & 1 deletion strictdoc/export/html/form_objects/requirement_form_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,10 @@ def validate(
# STATEMENT/DESCRIPTION/CONTENT field has already been validated. Skip.
if grammar_element_field_.title == statement_field_name:
continue
if grammar_element_field_.required:
if (
grammar_element_field_.gef_type == RequirementFieldType.STRING
and grammar_element_field_.required
):
for form_field_ in self.fields[grammar_element_field_.title]:
field_value = form_field_.field_unescaped_value
if field_value is None or len(field_value) == 0:
Expand All @@ -755,7 +758,14 @@ def validate(
field_value = self.fields[grammar_element_field_.title][
0
].field_unescaped_value

if (
len(field_value) == 0
and not single_choice_grammar_element_field.required
):
# The empty single choice fields are allowed if the field is not REQUIRED.
pass
elif (
field_value
not in single_choice_grammar_element_field.options
):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[DOCUMENT]
TITLE: Document 1

[GRAMMAR]
ELEMENTS:
- TAG: TEXT
FIELDS:
- TITLE: UID
TYPE: String
REQUIRED: False
- TITLE: STATEMENT
TYPE: String
REQUIRED: True
- TAG: REQUIREMENT
FIELDS:
- TITLE: TITLE
TYPE: String
REQUIRED: False
- TITLE: STATEMENT
TYPE: String
REQUIRED: True
- TITLE: CUSTOM_FIELD
TYPE: SingleChoice(A, B, C)
REQUIRED: False

[REQUIREMENT]
TITLE: Requirement title
STATEMENT: >>>
Requirement statement.
<<<
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[DOCUMENT]
TITLE: Document 1

[GRAMMAR]
ELEMENTS:
- TAG: REQUIREMENT
FIELDS:
- TITLE: TITLE
TYPE: String
REQUIRED: False
- TITLE: STATEMENT
TYPE: String
REQUIRED: True
- TITLE: CUSTOM_FIELD
TYPE: SingleChoice(A, B, C)
REQUIRED: False

[REQUIREMENT]
TITLE: Requirement title
STATEMENT: >>>
Requirement statement.
<<<
CUSTOM_FIELD: A
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from tests.end2end.e2e_case import E2ECase
from tests.end2end.end2end_test_setup import End2EndTestSetup
from tests.end2end.helpers.screens.document.form_edit_requirement import (
Form_EditRequirement,
)
from tests.end2end.helpers.screens.project_index.screen_project_index import (
Screen_ProjectIndex,
)
from tests.end2end.server import SDocTestServer


class Test(E2ECase):
def test(self):
test_setup = End2EndTestSetup(path_to_test_file=__file__)

with SDocTestServer(
input_path=test_setup.path_to_sandbox
) as test_server:
self.open(test_server.get_host_and_port())

screen_project_index = Screen_ProjectIndex(self)

screen_project_index.assert_on_screen()
screen_project_index.assert_contains_document("Document 1")

screen_document = screen_project_index.do_click_on_first_document()

screen_document.assert_on_screen_document()
screen_document.assert_header_document_title("Document 1")

requirement = screen_document.get_requirement()
form_edit_requirement: Form_EditRequirement = (
requirement.do_open_form_edit_requirement()
)
form_edit_requirement.do_clear_field("CUSTOM_FIELD")
form_edit_requirement.do_form_submit()

assert test_setup.compare_sandbox_and_expected_output()

0 comments on commit a6b0b5e

Please sign in to comment.