First Working version. I can add table
This commit is contained in:
157
tests/test_repositories.py
Normal file
157
tests/test_repositories.py
Normal file
@@ -0,0 +1,157 @@
|
||||
import pytest
|
||||
from fasthtml.components import *
|
||||
|
||||
from components.addstuff.constants import ROUTE_ROOT, Routes
|
||||
from components.addstuff.settings import Repository, MyTable, AddStuffSettings
|
||||
from core.settings_management import SettingsManager, MemoryDbEngine
|
||||
from helpers import matches, StartsWith, div_icon, find_first_match, search_elements_by_path
|
||||
from src.components.addstuff.components.Repositories import Repositories
|
||||
|
||||
USER_EMAIL = "test@mail.com"
|
||||
USER_ID = "test_user"
|
||||
TEST_REPOSITORIES_ID = "testing_grid_id"
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def session():
|
||||
return {"user_id": USER_ID, "user_email": USER_EMAIL}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tabs_manager():
|
||||
class MockTabsManager:
|
||||
def __init__(self):
|
||||
self.tabs = []
|
||||
self.mock_content = Div("No tabs yet")
|
||||
self._called_methods: list[tuple] = []
|
||||
|
||||
def add_tab(self, *args, **kwargs):
|
||||
self._called_methods.append(("set_tab_content", args, kwargs))
|
||||
|
||||
table_name, content, key = args
|
||||
self.tabs.append({"table_name": table_name, "content": content, "key": key})
|
||||
|
||||
def get_id(self):
|
||||
return "tabs_id"
|
||||
|
||||
def set_tab_content(self, *args, **kwargs):
|
||||
self._called_methods.append(("set_tab_content", args, kwargs))
|
||||
|
||||
title = kwargs.get("title", None)
|
||||
key = kwargs.get("key", None)
|
||||
self.mock_content = Div(f"{title=}, {key=}")
|
||||
|
||||
def refresh(self):
|
||||
return self.mock_content
|
||||
|
||||
return MockTabsManager()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def db_engine():
|
||||
return MemoryDbEngine()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def repositories(session, tabs_manager, db_engine):
|
||||
return Repositories(session=session, _id=TEST_REPOSITORIES_ID,
|
||||
settings_manager=SettingsManager(engine=db_engine),
|
||||
tabs_manager=tabs_manager)
|
||||
|
||||
|
||||
def test_render_no_repository(repositories):
|
||||
actual = repositories.__ft__()
|
||||
expected = (
|
||||
Div(
|
||||
Div(id=f"tt_{repositories.get_id()}"),
|
||||
Div(cls="divider"),
|
||||
Div("Repositories"),
|
||||
Div(id=repositories.get_id()),
|
||||
Script()
|
||||
)
|
||||
)
|
||||
|
||||
assert matches(actual, expected)
|
||||
|
||||
|
||||
def test_render_when_repo_and_tables(db_engine, repositories):
|
||||
db_engine.init_db(USER_ID, 'AddStuffSettings', AddStuffSettings([
|
||||
Repository("repo 1", [MyTable("table 1"), MyTable("table 2")]),
|
||||
Repository("repo 2", [MyTable("table 3")]),
|
||||
]))
|
||||
|
||||
actual = repositories.__ft__()
|
||||
to_compare = search_elements_by_path(actual, "div", {"id": repositories.get_id()})[0]
|
||||
expected = Div(
|
||||
Div(
|
||||
Input(type="radio"),
|
||||
Div(div_icon("database"), Div("repo 1"), cls=StartsWith("collapse-title")),
|
||||
Div(
|
||||
Div(div_icon("table"), Div("table 1")),
|
||||
Div(div_icon("table"), Div("table 2")),
|
||||
cls=StartsWith("collapse-content")
|
||||
),
|
||||
),
|
||||
Div(
|
||||
Input(type="radio"),
|
||||
Div(div_icon("database"), Div("repo 2"), cls=StartsWith("collapse-title")),
|
||||
Div(
|
||||
Div(div_icon("table"), Div("table 3")),
|
||||
cls=StartsWith("collapse-content")
|
||||
),
|
||||
),
|
||||
id=repositories.get_id())
|
||||
assert matches(to_compare, expected)
|
||||
|
||||
|
||||
def test_i_can_add_new_repository(repositories):
|
||||
tab_id = "tab_id"
|
||||
form_id = "form_id"
|
||||
repository_name = "repository_name"
|
||||
table_name = "table_name"
|
||||
|
||||
res = repositories.add_new_repository(tab_id, form_id, repository_name, table_name)
|
||||
expected = (
|
||||
Div(
|
||||
Input(type="radio"),
|
||||
Div(div_icon("database"), Div(repository_name)),
|
||||
Div(
|
||||
Div(div_icon("table"), Div(table_name)),
|
||||
cls=StartsWith("collapse-content")
|
||||
),
|
||||
),
|
||||
Div(f"title='{table_name}', key={(repository_name, table_name)}")
|
||||
)
|
||||
assert matches(res, expected)
|
||||
|
||||
|
||||
def test_i_can_click_on_repo(db_engine, repositories):
|
||||
db_engine.init_db(USER_ID, 'AddStuffSettings', AddStuffSettings([
|
||||
Repository("repo 1", [])
|
||||
]))
|
||||
|
||||
actual = repositories.__ft__()
|
||||
expected = Input(
|
||||
hx_put=f"{ROUTE_ROOT}{Routes.SelectRepository}",
|
||||
hx_vals=f'{{"_id": "{repositories.get_id()}", "repository": "repo 1"}}',
|
||||
)
|
||||
|
||||
to_compare = find_first_match(actual, "div.div.div.input")
|
||||
assert matches(to_compare, expected)
|
||||
|
||||
|
||||
def test_render_i_can_click_on_table(db_engine, repositories, tabs_manager):
|
||||
db_engine.init_db(USER_ID, 'AddStuffSettings', AddStuffSettings([
|
||||
Repository("repo 1", [MyTable("table 1")])
|
||||
]))
|
||||
|
||||
actual = repositories.__ft__()
|
||||
expected = Div(name="repo-table",
|
||||
hx_get=f"{ROUTE_ROOT}{Routes.ShowTable}",
|
||||
hx_target=f"#{repositories.tabs_manager.get_id()}",
|
||||
hx_swap="outerHTML",
|
||||
hx_vals=f'{{"_id": "{repositories.get_id()}", "repository": "repo 1", "table": "table 1"}}',
|
||||
cls="flex")
|
||||
|
||||
to_compare = find_first_match(actual, "div.div.div.div.div[name='repo-table']")
|
||||
assert matches(to_compare, expected)
|
||||
Reference in New Issue
Block a user