From 8bebc49b2aaab40a47e57b0eb3a56004c76ab107 Mon Sep 17 00:00:00 2001 From: Stanislav Pankevich Date: Fri, 14 Jun 2024 21:12:21 +0200 Subject: [PATCH] UI: Ensure that documents with HTML markup get rendered correctly when edited Closes #1858 --- .../backend/sdoc/models/document_config.py | 9 ++- strictdoc/server/routers/main_router.py | 56 ++++++++++-------- .../expected_output/document.sdoc | 10 ++++ .../input/document.sdoc | 10 ++++ .../test_case.py | 59 +++++++++++++++++++ 5 files changed, 116 insertions(+), 28 deletions(-) create mode 100644 tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/expected_output/document.sdoc create mode 100644 tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/input/document.sdoc create mode 100644 tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/test_case.py diff --git a/strictdoc/backend/sdoc/models/document_config.py b/strictdoc/backend/sdoc/models/document_config.py index 1a2e8690b..389047a45 100644 --- a/strictdoc/backend/sdoc/models/document_config.py +++ b/strictdoc/backend/sdoc/models/document_config.py @@ -40,7 +40,7 @@ def __init__( requirement_style: Optional[str], requirement_in_toc: Optional[str], default_view: Optional[str], - ): + ) -> None: self.parent = parent self.version: Optional[str] = version @@ -61,7 +61,7 @@ def __init__( else (False if root == "False" else None) ) - self.markup = markup + self.markup: Optional[str] = markup self.auto_levels: bool = auto_levels is None or auto_levels == "On" if layout is not None: @@ -81,6 +81,11 @@ def __init__( self.ng_line_start: int = 0 self.ng_col_start: int = 0 + def get_markup(self) -> str: + if self.markup is None: + return "RST" + return self.markup + def get_requirement_style_mode(self) -> str: if ( self.requirement_style is None diff --git a/strictdoc/server/routers/main_router.py b/strictdoc/server/routers/main_router.py index df90e2cd0..2c6dd1f6b 100644 --- a/strictdoc/server/routers/main_router.py +++ b/strictdoc/server/routers/main_router.py @@ -212,7 +212,7 @@ def requirement__show_full(reference_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=requirement.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -255,7 +255,7 @@ def section__show_full(reference_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -325,7 +325,7 @@ def get_new_section( static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -356,6 +356,7 @@ async def create_section(request: Request): request_dict: Dict[str, str] = dict(request_form_data) section_mid: str = request_dict["section_mid"] reference_mid: str = request_dict["reference_mid"] + document_mid: str = request_dict["document_mid"] context_document_mid: str = request_dict["context_document_mid"] whereto: str = request_dict["whereto"] @@ -367,6 +368,9 @@ async def create_section(request: Request): request_form_data=request_form_data, ) + document = export_action.traceability_index.get_node_by_mid( + MID(document_mid) + ) context_document = export_action.traceability_index.get_node_by_mid( MID(context_document_mid) ) @@ -392,7 +396,7 @@ async def create_section(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -432,7 +436,7 @@ async def create_section(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -487,7 +491,7 @@ def get_edit_section(node_id: str, context_document_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -548,7 +552,7 @@ async def put_update_section(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -598,7 +602,7 @@ async def put_update_section(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -657,7 +661,7 @@ def cancel_edit_section(section_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -752,7 +756,7 @@ def get_new_requirement( static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -823,7 +827,7 @@ def get_clone_requirement(reference_mid: str, context_document_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -912,7 +916,7 @@ async def create_requirement(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -958,7 +962,7 @@ async def create_requirement(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1009,7 +1013,7 @@ def get_edit_requirement(node_id: str, context_document_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1146,7 +1150,7 @@ async def document__update_requirement(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1193,7 +1197,7 @@ async def document__update_requirement(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer: MarkupRenderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1258,7 +1262,7 @@ def cancel_edit_requirement(requirement_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1369,7 +1373,7 @@ def delete_section( static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=section.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1472,7 +1476,7 @@ def delete_requirement( static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=requirement.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1572,7 +1576,7 @@ async def move_node(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=moved_node.document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -1977,7 +1981,7 @@ async def document__save_edit_config(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -2061,7 +2065,7 @@ async def document__save_included_document(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -2097,7 +2101,7 @@ def document__cancel_edit_config(document_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -2141,7 +2145,7 @@ def document__cancel_edit_included_document(document_mid: str): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -2249,7 +2253,7 @@ async def document__save_grammar(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, @@ -2390,7 +2394,7 @@ async def document__save_grammar_element(request: Request): static_path=project_config.dir_for_sdoc_assets, ) markup_renderer = MarkupRenderer.create( - markup="RST", + markup=document.config.get_markup(), traceability_index=export_action.traceability_index, link_renderer=link_renderer, html_templates=html_generator.html_templates, diff --git a/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/expected_output/document.sdoc b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/expected_output/document.sdoc new file mode 100644 index 000000000..0651f2025 --- /dev/null +++ b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/expected_output/document.sdoc @@ -0,0 +1,10 @@ +[DOCUMENT] +TITLE: Document 1 +OPTIONS: + MARKUP: HTML + +[REQUIREMENT] +TITLE: Requirement title +STATEMENT: >>> +UPDATED: This text will be rendered directly as HTML!. UPDATED. +<<< diff --git a/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/input/document.sdoc b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/input/document.sdoc new file mode 100644 index 000000000..4f96f2a58 --- /dev/null +++ b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/input/document.sdoc @@ -0,0 +1,10 @@ +[DOCUMENT] +TITLE: Document 1 +OPTIONS: + MARKUP: HTML + +[REQUIREMENT] +TITLE: Requirement title +STATEMENT: >>> +This text will be rendered directly as HTML! +<<< diff --git a/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/test_case.py b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/test_case.py new file mode 100644 index 000000000..d9cf1cd73 --- /dev/null +++ b/tests/end2end/screens/document/update_requirement/update_requirement_when_HTML_markup/test_case.py @@ -0,0 +1,59 @@ +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() + + requirement.assert_requirement_statement_contains( + "This text will be rendered directly as HTML!" + ) + + """ + ACT + """ + form_edit_requirement: Form_EditRequirement = ( + requirement.do_open_form_edit_requirement() + ) + form_edit_requirement.do_fill_in_field_statement( + "UPDATED: " + 'This text will be rendered directly as HTML!. ' + "UPDATED." + ) + form_edit_requirement.do_form_submit() + + """ + ASSERT + """ + requirement.assert_requirement_statement_contains( + "UPDATED: " + "This text will be rendered directly as HTML!. " + "UPDATED." + ) + + assert test_setup.compare_sandbox_and_expected_output()