153 lines
4.4 KiB
Python
153 lines
4.4 KiB
Python
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
from fasthtml.components import *
|
|
|
|
from components.form.components.MyForm import FormField, MyForm
|
|
from components.tabs.components.MyTabs import MyTabs
|
|
from components.workflows.components.Workflows import Workflows
|
|
from core.settings_management import SettingsManager, MemoryDbEngine
|
|
from helpers import matches, div_icon, search_elements_by_name, Contains
|
|
|
|
TEST_WORKFLOWS_ID = "testing_repositories_id"
|
|
|
|
|
|
@pytest.fixture
|
|
def tabs_manager():
|
|
class MockTabsManager(MagicMock):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, spec=MyTabs, **kwargs)
|
|
self.request_new_tab_id = MagicMock(side_effect =["new_tab_id", "new_tab_2", "new_tab_3", StopIteration])
|
|
self.tabs = {}
|
|
self.tabs_by_key = {}
|
|
|
|
def add_tab(self, title, content, key: str | tuple = None, tab_id: str = None, icon=None):
|
|
self.tabs[tab_id] = (title, content)
|
|
self.tabs_by_key[key] = (title, content)
|
|
|
|
def set_tab_content(self, tab_id, content, title=None, key: str | tuple = None, active=None):
|
|
self.tabs[tab_id] = (title, content)
|
|
self.tabs_by_key[key] = (title, content)
|
|
|
|
def refresh(self):
|
|
return Div(
|
|
Div(
|
|
[Div(title) for title in self.tabs.keys()]
|
|
),
|
|
list(self.tabs.values())[-1]
|
|
)
|
|
|
|
return MockTabsManager()
|
|
|
|
|
|
@pytest.fixture
|
|
def workflows(session, tabs_manager):
|
|
return Workflows(session=session, _id=TEST_WORKFLOWS_ID,
|
|
settings_manager=SettingsManager(engine=MemoryDbEngine()),
|
|
tabs_manager=tabs_manager)
|
|
|
|
|
|
def test_render_no_workflow(workflows):
|
|
actual = workflows.__ft__()
|
|
expected = Div(
|
|
Div(cls="divider"),
|
|
Div(
|
|
Div("Workflows"),
|
|
div_icon("add"), # icon to add a new workflow
|
|
cls="flex"
|
|
),
|
|
Div(id=f"w_{workflows.get_id()}", ), # list of workflow
|
|
id=workflows.get_id(),
|
|
)
|
|
|
|
assert matches(actual, expected)
|
|
|
|
|
|
def test_render_with_workflows_defined(workflows):
|
|
workflows.db.add_workflow("workflow 1")
|
|
workflows.db.add_workflow("workflow 2")
|
|
|
|
actual = workflows.__ft__()
|
|
expected = Div(
|
|
Div(cls="divider"),
|
|
Div(), # title + icon 'Add'
|
|
Div(
|
|
Div("workflow 1"),
|
|
Div("workflow 2"),
|
|
id=f"w_{workflows.get_id()}"
|
|
), # list of workflows
|
|
id=workflows.get_id(),
|
|
)
|
|
|
|
assert matches(actual, expected)
|
|
|
|
|
|
def test_i_can_see_selected_workflow(workflows):
|
|
workflows.db.add_workflow("workflow 1")
|
|
workflows.db.add_workflow("workflow 2")
|
|
workflows.db.select_workflow("workflow 2")
|
|
|
|
actual = workflows.__ft__()
|
|
to_compare = search_elements_by_name(actual, "div", attrs={"id": f"w_{workflows.get_id()}"})[0]
|
|
|
|
expected = Div(
|
|
Div("workflow 1"),
|
|
Div(Div("workflow 2"), cls=Contains("mmt-selected")),
|
|
id=f"w_{workflows.get_id()}"
|
|
)
|
|
|
|
assert matches(to_compare, expected)
|
|
|
|
|
|
def test_i_can_request_for_a_new_workflow(workflows, tabs_manager):
|
|
res = workflows.request_new_workflow()
|
|
|
|
tabs_manager.request_new_tab_id.assert_called_once()
|
|
assert "new_tab_id" in res.tabs
|
|
tab_def = res.tabs["new_tab_id"]
|
|
assert tab_def[0] == "Add Workflow"
|
|
|
|
content = tab_def[1]
|
|
assert isinstance(content, MyForm)
|
|
assert content.title == "Add Workflow"
|
|
assert content.fields == [FormField("name", 'Workflow Name', 'input')]
|
|
|
|
|
|
def test_i_can_add_a_new_workflow(workflows, tabs_manager):
|
|
res = workflows.request_new_workflow()
|
|
tab_id = list(res.tabs.keys())[0]
|
|
|
|
actual = workflows.add_new_workflow(tab_id, "Not relevant here", "New Workflow", {})
|
|
|
|
expected = (
|
|
Div(
|
|
Div("New Workflow"),
|
|
id=f"w_{workflows.get_id()}"
|
|
), # list of workflows
|
|
Div(), # Workflow Designer embedded in the tab
|
|
)
|
|
|
|
assert matches(actual, expected)
|
|
|
|
# check that the workflow was added
|
|
assert workflows.db.exists_workflow("New Workflow")
|
|
|
|
|
|
def test_i_can_select_a_workflow(workflows):
|
|
workflows.add_new_workflow("tab_id_1", "Not relevant", "workflow 1", {})
|
|
workflows.add_new_workflow("tab_id_2", "Not relevant", "workflow 2", {})
|
|
workflows.add_new_workflow("tab_id_3", "Not relevant", "workflow 3", {})
|
|
|
|
actual = workflows.show_workflow("workflow 2", {})
|
|
|
|
expected = (
|
|
Div(
|
|
Div("workflow 1"),
|
|
Div(Div("workflow 2"), cls=Contains("mmt-selected")),
|
|
Div("workflow 3"),
|
|
id=f"w_{workflows.get_id()}"
|
|
), # list of workflows
|
|
Div(), # Workflow Designer embedded in the tab
|
|
)
|
|
|
|
assert matches(actual, expected) |