Skip to content

Commit 11fbf6a

Browse files
author
Andrei Neagu
committed
fixed test
1 parent 8e94831 commit 11fbf6a

File tree

2 files changed

+29
-56
lines changed

2 files changed

+29
-56
lines changed

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/_common/base_display_model.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ def update(self, update_obj: Self) -> None:
3131
callbacks_to_run = self._get_on_change_callbacks_to_run(update_obj)
3232

3333
for attribute_name, update_value in update_obj.__dict__.items():
34-
if getattr(self, attribute_name) != update_value:
34+
current_value = getattr(self, attribute_name)
35+
if current_value != update_value:
36+
if isinstance(update_value, BaseUpdatableDisplayModel):
37+
# do not replace existing object, update it's content
38+
current_value.update(update_value)
3539
setattr(self, attribute_name, update_value)
3640

3741
for callback in callbacks_to_run:

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

Lines changed: 24 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# pylint:disable=redefined-outer-name
22
# pylint:disable=unused-argument
33

4-
from copy import deepcopy
54
from functools import cached_property
65

76
import nicegui
@@ -96,7 +95,7 @@ def _friend_or_pet_ui() -> None:
9695

9796
_friend_or_pet_ui()
9897

99-
# self.display_model.on_value_change("companion", comp_ui.refresh)
98+
# self.display_model.on_value_change("companion", _friend_or_pet_ui.refresh)
10099
self.display_model.on_type_change("companion", _friend_or_pet_ui.refresh)
101100

102101

@@ -144,10 +143,6 @@ async def _ensure_before_label(async_page: Page) -> None:
144143
await assert_contains_text(async_page, "BEFORE_LABEL")
145144

146145

147-
async def _ensure_after_label(async_page: Page) -> None:
148-
await assert_contains_text(async_page, "AFTER_LABEL")
149-
150-
151146
async def _ensure_person_name(async_page: Page, name: str) -> None:
152147
await assert_contains_text(async_page, f"Name: {name}")
153148

@@ -165,13 +160,28 @@ async def _esnure_person_companion(async_page: Page, companion: Pet | Friend) ->
165160
await assert_contains_text(async_page, f"Friend Age: {companion.age}")
166161

167162

163+
async def _ensure_after_label(async_page: Page) -> None:
164+
await assert_contains_text(async_page, "AFTER_LABEL")
165+
166+
167+
async def _ensure_index_page(async_page: Page, person: Person) -> None:
168+
await _ensure_before_label(async_page)
169+
170+
await _ensure_person_name(async_page, person.name)
171+
await _ensure_person_age(async_page, person.age)
172+
173+
await _esnure_person_companion(async_page, person.companion)
174+
175+
await _ensure_after_label(async_page)
176+
177+
168178
@pytest.mark.parametrize(
169-
"person, expected",
179+
"person, person_update",
170180
[
171181
pytest.param(
172182
Person(name="Alice", age=30, companion=Pet(name="Fluffy", species="cat")),
173-
True,
174-
id="initial-test",
183+
Person(name="Alice", age=30, companion=Pet(name="Buddy", species="dog")),
184+
id="change-pet",
175185
)
176186
],
177187
)
@@ -180,60 +190,19 @@ async def test_updatable_component(
180190
async_page: Page,
181191
server_host_port: str,
182192
person: Person,
183-
expected: bool,
193+
person_update: Person,
184194
):
185195
await async_page.goto(
186196
f"{server_host_port}{get_settings().DYNAMIC_SCHEDULER_UI_MOUNT_PATH}"
187197
)
188198

189-
# INITIAL RENDER
190-
await _ensure_before_label(async_page)
191-
await _ensure_after_label(async_page)
192-
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)
196-
197-
# AFTER CHNGE RENDER
198-
199-
# # TODO: test that it changes when accessing the propeties directly
200-
201-
await assert_contains_text(async_page, "Pet Name: Fluffy")
202-
person.companion.name = "Buddy"
203-
await assert_contains_text(async_page, "Pet Name: Buddy")
204-
205-
# # TODO: check that UI was rerendered with new pet name
206-
207-
# person.name = "Bob"
208-
# # TODO: check that UI was rerendered with new name
209-
210-
# person.companion = Pet(name="Buddy", species="dog")
211-
# # TODO: check that ui has no changes only values changed
212-
213-
# on_value_cahnge rerender
214-
# simulate an update from a new incoming object in memory
215-
216-
person_update = deepcopy(person)
217-
person_update.companion = Friend(name="Charlie", age=25)
199+
# check initial page layout
200+
await _ensure_index_page(async_page, person)
218201

219202
person.update(person_update)
220-
await assert_contains_text(async_page, "Friend Name: Charlie", timeout=2)
221-
222-
# TODO: on type change rerender
223-
224-
# # TODO: test that it changes if we apply the updates via the update method on the object?
225-
226-
# # TODO: check that ui has changed as expected
227-
# assert person.requires_rerender({"age": 31}) is False
228-
# person_display.update_model({"age": 31})
229-
230-
# # TODO: check that ui has changed as expected
231-
# assert person.requires_rerender({"companion": {"name": "Daisy"}}) is False
232-
# person_display.update_model({"companion": {"name": "Daisy"}})
233203

234-
# # TODO: check that ui has changed as expected
235-
# assert person.requires_rerender({"companion": {"age": 28}}) is False
236-
# person_display.update_model({"companion": {"name": "Eve", "age": 28}})
204+
# change layout after update
205+
await _ensure_index_page(async_page, person_update)
237206

238207

239208
# TODO: make tests go faster since we are running differently

0 commit comments

Comments
 (0)