Skip to content

Commit 8e94831

Browse files
author
Andrei Neagu
committed
refactor
1 parent 5398166 commit 8e94831

File tree

1 file changed

+57
-23
lines changed

1 file changed

+57
-23
lines changed

services/dynamic-scheduler/tests/unit/api_frontend/_common/test_updatable_component.py

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from helpers import assert_contains_text
1111
from nicegui import APIRouter, ui
1212
from playwright.async_api import Page
13-
from pytest_mock import MockerFixture
1413
from simcore_service_dynamic_scheduler.api.frontend._common.base_display_model import (
1514
BaseUpdatableDisplayModel,
1615
)
@@ -88,39 +87,37 @@ def add_to_ui(self) -> None:
8887
ui.label(f"Age: {self.display_model.age}")
8988

9089
@ui.refreshable
91-
def _ui_friend_or_pret() -> None:
90+
def _friend_or_pet_ui() -> None:
9291
if isinstance(self.display_model.companion, Friend):
9392
FriendComponent(self.display_model.companion).add_to_ui()
9493

9594
elif isinstance(self.display_model.companion, Pet):
9695
PetComponent(self.display_model.companion).add_to_ui()
9796

98-
_ui_friend_or_pret()
97+
_friend_or_pet_ui()
9998

10099
# self.display_model.on_value_change("companion", comp_ui.refresh)
101-
self.display_model.on_type_change("companion", _ui_friend_or_pret.refresh)
100+
self.display_model.on_type_change("companion", _friend_or_pet_ui.refresh)
102101

103102

104-
@pytest.fixture
105-
def use_internal_scheduler() -> bool:
106-
return True
103+
def _index_page_ui(person: Person) -> None:
104+
ui.label("BEFORE_LABEL")
105+
PersonComponent(person).add_to_ui()
106+
ui.label("AFTER_LABEL")
107107

108108

109109
@pytest.fixture
110-
def person() -> Person:
111-
return Person(name="Alice", age=30, companion=Pet(name="Fluffy", species="cat"))
110+
def use_internal_scheduler() -> bool:
111+
return True
112112

113113

114114
@pytest.fixture
115115
def router(person: Person) -> APIRouter:
116-
117116
router = APIRouter()
118117

119118
@ui.page("/", api_router=router)
120119
async def index():
121-
ui.label("BEFORE_LABEL")
122-
PersonComponent(person).add_to_ui()
123-
ui.label("AFTER_LABEL")
120+
_index_page_ui(person)
124121

125122
return router
126123

@@ -143,33 +140,67 @@ def not_initialized_app(not_initialized_app: FastAPI, router: APIRouter) -> Fast
143140
return minimal_app
144141

145142

143+
async def _ensure_before_label(async_page: Page) -> None:
144+
await assert_contains_text(async_page, "BEFORE_LABEL")
145+
146+
147+
async def _ensure_after_label(async_page: Page) -> None:
148+
await assert_contains_text(async_page, "AFTER_LABEL")
149+
150+
151+
async def _ensure_person_name(async_page: Page, name: str) -> None:
152+
await assert_contains_text(async_page, f"Name: {name}")
153+
154+
155+
async def _ensure_person_age(async_page: Page, age: int) -> None:
156+
await assert_contains_text(async_page, f"Age: {age}")
157+
158+
159+
async def _esnure_person_companion(async_page: Page, companion: Pet | Friend) -> None:
160+
if isinstance(companion, Pet):
161+
await assert_contains_text(async_page, f"Pet Name: {companion.name}")
162+
await assert_contains_text(async_page, f"Pet Species: {companion.species}")
163+
elif isinstance(companion, Friend):
164+
await assert_contains_text(async_page, f"Friend Name: {companion.name}")
165+
await assert_contains_text(async_page, f"Friend Age: {companion.age}")
166+
167+
168+
@pytest.mark.parametrize(
169+
"person, expected",
170+
[
171+
pytest.param(
172+
Person(name="Alice", age=30, companion=Pet(name="Fluffy", species="cat")),
173+
True,
174+
id="initial-test",
175+
)
176+
],
177+
)
146178
async def test_updatable_component(
147-
mocker: MockerFixture,
148179
app_runner: None,
149180
async_page: Page,
150181
server_host_port: str,
151182
person: Person,
152-
# person_display: PersonDisplay,
183+
expected: bool,
153184
):
154185
await async_page.goto(
155186
f"{server_host_port}{get_settings().DYNAMIC_SCHEDULER_UI_MOUNT_PATH}"
156187
)
157188

158-
# ensre render worked
159-
await assert_contains_text(async_page, "BEFORE_LABEL")
160-
await assert_contains_text(async_page, "AFTER_LABEL")
189+
# INITIAL RENDER
190+
await _ensure_before_label(async_page)
191+
await _ensure_after_label(async_page)
161192

162-
await assert_contains_text(async_page, "Name: Alice")
163-
await assert_contains_text(async_page, "Age: 30")
193+
await _ensure_person_name(async_page, person.name)
194+
await _ensure_person_age(async_page, person.age)
195+
await _esnure_person_companion(async_page, person.companion)
164196

165-
# _draw_spy = mocker.spy(person_display, "_draw")
166-
# _recreate_ui_spy = mocker.spy(person_display, "_recrate_ui")
197+
# AFTER CHNGE RENDER
167198

168199
# # TODO: test that it changes when accessing the propeties directly
169200

170201
await assert_contains_text(async_page, "Pet Name: Fluffy")
171202
person.companion.name = "Buddy"
172-
await assert_contains_text(async_page, "Pet Name: Buddy", timeout=2)
203+
await assert_contains_text(async_page, "Pet Name: Buddy")
173204

174205
# # TODO: check that UI was rerendered with new pet name
175206

@@ -203,3 +234,6 @@ async def test_updatable_component(
203234
# # TODO: check that ui has changed as expected
204235
# assert person.requires_rerender({"companion": {"age": 28}}) is False
205236
# person_display.update_model({"companion": {"name": "Eve", "age": 28}})
237+
238+
239+
# TODO: make tests go faster since we are running differently

0 commit comments

Comments
 (0)