11# pylint:disable=redefined-outer-name
22# pylint:disable=unused-argument
33
4- from copy import deepcopy
54from functools import cached_property
65
76import 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-
151146async 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