19
19
class ComponentTests (PlaywrightTestCase ):
20
20
databases = {"default" }
21
21
22
+ ###########################
23
+ # Generic Component Tests #
24
+ ###########################
25
+
22
26
@navigate_to_page ("/" )
23
- def test_hello_world (self ):
27
+ def test_component_hello_world (self ):
24
28
self .page .wait_for_selector ("#hello-world" )
25
29
26
30
@navigate_to_page ("/" )
27
- def test_counter (self ):
31
+ def test_component_counter (self ):
28
32
for i in range (5 ):
29
33
self .page .locator (f"#counter-num[data-count={ i } ]" )
30
34
self .page .locator ("#counter-inc" ).click ()
31
35
32
36
@navigate_to_page ("/" )
33
- def test_parametrized_component (self ):
37
+ def test_component_parametrized_component (self ):
34
38
self .page .locator ("#parametrized-component[data-value='579']" ).wait_for ()
35
39
36
40
@navigate_to_page ("/" )
37
- def test_object_in_templatetag (self ):
41
+ def test_component_object_in_templatetag (self ):
38
42
self .page .locator ("#object_in_templatetag[data-success=true]" ).wait_for ()
39
43
40
44
@navigate_to_page ("/" )
41
45
def test_component_from_web_module (self ):
42
46
self .page .wait_for_selector ("#button-from-js-module" )
43
47
44
48
@navigate_to_page ("/" )
45
- def test_use_connection (self ):
49
+ def test_component_use_connection (self ):
46
50
self .page .locator ("#use-connection[data-success=true]" ).wait_for ()
47
51
48
52
@navigate_to_page ("/" )
49
- def test_use_scope (self ):
53
+ def test_component_use_scope (self ):
50
54
self .page .locator ("#use-scope[data-success=true]" ).wait_for ()
51
55
52
56
@navigate_to_page ("/" )
53
- def test_use_location (self ):
57
+ def test_component_use_location (self ):
54
58
self .page .locator ("#use-location[data-success=true]" ).wait_for ()
55
59
56
60
@navigate_to_page ("/" )
57
- def test_use_origin (self ):
61
+ def test_component_use_origin (self ):
58
62
self .page .locator ("#use-origin[data-success=true]" ).wait_for ()
59
63
60
64
@navigate_to_page ("/" )
61
- def test_static_css (self ):
65
+ def test_component_static_css (self ):
62
66
assert (
63
67
self .page .wait_for_selector ("#django-css button" ).evaluate (
64
68
"e => window.getComputedStyle(e).getPropertyValue('color')"
@@ -67,33 +71,33 @@ def test_static_css(self):
67
71
)
68
72
69
73
@navigate_to_page ("/" )
70
- def test_static_js (self ):
74
+ def test_component_static_js (self ):
71
75
self .page .locator ("#django-js[data-success=true]" ).wait_for ()
72
76
73
77
@navigate_to_page ("/" )
74
- def test_unauthorized_user (self ):
78
+ def test_component_unauthorized_user (self ):
75
79
with pytest .raises (TimeoutError ):
76
80
self .page .wait_for_selector ("#unauthorized-user" , timeout = 1 )
77
81
self .page .wait_for_selector ("#unauthorized-user-fallback" )
78
82
79
83
@navigate_to_page ("/" )
80
- def test_authorized_user (self ):
84
+ def test_component_authorized_user (self ):
81
85
with pytest .raises (TimeoutError ):
82
86
self .page .wait_for_selector ("#authorized-user-fallback" , timeout = 1 )
83
87
self .page .wait_for_selector ("#authorized-user" )
84
88
85
89
@navigate_to_page ("/" )
86
- def test_relational_query (self ):
90
+ def test_component_relational_query (self ):
87
91
self .page .locator ("#relational-query" ).wait_for ()
88
92
self .page .locator ("#relational-query[data-success=true]" ).wait_for ()
89
93
90
94
@navigate_to_page ("/" )
91
- def test_async_relational_query (self ):
95
+ def test_component_async_relational_query (self ):
92
96
self .page .locator ("#async-relational-query" ).wait_for ()
93
97
self .page .locator ("#async-relational-query[data-success=true]" ).wait_for ()
94
98
95
99
@navigate_to_page ("/" )
96
- def test_use_query_and_mutation (self ):
100
+ def test_component_use_query_and_mutation (self ):
97
101
todo_input = self .page .wait_for_selector ("#todo-input" )
98
102
99
103
item_ids = list (range (5 ))
@@ -107,7 +111,7 @@ def test_use_query_and_mutation(self):
107
111
self .page .wait_for_selector (f"#todo-list #todo-item-sample-{ i } " , timeout = 1 )
108
112
109
113
@navigate_to_page ("/" )
110
- def test_async_use_query_and_mutation (self ):
114
+ def test_component_async_use_query_and_mutation (self ):
111
115
todo_input = self .page .wait_for_selector ("#async-todo-input" )
112
116
113
117
item_ids = list (range (5 ))
@@ -121,23 +125,23 @@ def test_async_use_query_and_mutation(self):
121
125
self .page .wait_for_selector (f"#async-todo-list #todo-item-sample-{ i } " , timeout = 1 )
122
126
123
127
@navigate_to_page ("/" )
124
- def test_view_to_component_sync_func (self ):
128
+ def test_component_view_to_component_sync_func (self ):
125
129
self .page .locator ("#view_to_component_sync_func[data-success=true]" ).wait_for ()
126
130
127
131
@navigate_to_page ("/" )
128
- def test_view_to_component_async_func (self ):
132
+ def test_component_view_to_component_async_func (self ):
129
133
self .page .locator ("#view_to_component_async_func[data-success=true]" ).wait_for ()
130
134
131
135
@navigate_to_page ("/" )
132
- def test_view_to_component_sync_class (self ):
136
+ def test_component_view_to_component_sync_class (self ):
133
137
self .page .locator ("#ViewToComponentSyncClass[data-success=true]" ).wait_for ()
134
138
135
139
@navigate_to_page ("/" )
136
- def test_view_to_component_async_class (self ):
140
+ def test_component_view_to_component_async_class (self ):
137
141
self .page .locator ("#ViewToComponentAsyncClass[data-success=true]" ).wait_for ()
138
142
139
143
@navigate_to_page ("/" )
140
- def test_view_to_component_template_view_class (self ):
144
+ def test_component_view_to_component_template_view_class (self ):
141
145
self .page .locator ("#ViewToComponentTemplateViewClass[data-success=true]" ).wait_for ()
142
146
143
147
@navigate_to_page ("/" )
@@ -147,53 +151,53 @@ def _click_btn_and_check_success(self, name):
147
151
self .page .locator (f"#{ name } [data-success=true]" ).wait_for ()
148
152
149
153
@navigate_to_page ("/" )
150
- def test_view_to_component_script (self ):
154
+ def test_component_view_to_component_script (self ):
151
155
self ._click_btn_and_check_success ("view_to_component_script" )
152
156
153
157
@navigate_to_page ("/" )
154
- def test_view_to_component_request (self ):
158
+ def test_component_view_to_component_request (self ):
155
159
self ._click_btn_and_check_success ("view_to_component_request" )
156
160
157
161
@navigate_to_page ("/" )
158
- def test_view_to_component_args (self ):
162
+ def test_component_view_to_component_args (self ):
159
163
self ._click_btn_and_check_success ("view_to_component_args" )
160
164
161
165
@navigate_to_page ("/" )
162
- def test_view_to_component_kwargs (self ):
166
+ def test_component_view_to_component_kwargs (self ):
163
167
self ._click_btn_and_check_success ("view_to_component_kwargs" )
164
168
165
169
@navigate_to_page ("/" )
166
- def test_view_to_iframe_sync_func (self ):
170
+ def test_component_view_to_iframe_sync_func (self ):
167
171
self .page .frame_locator ("#view_to_iframe_sync_func > iframe" ).locator (
168
172
"#view_to_iframe_sync_func[data-success=true]"
169
173
).wait_for ()
170
174
171
175
@navigate_to_page ("/" )
172
- def test_view_to_iframe_async_func (self ):
176
+ def test_component_view_to_iframe_async_func (self ):
173
177
self .page .frame_locator ("#view_to_iframe_async_func > iframe" ).locator (
174
178
"#view_to_iframe_async_func[data-success=true]"
175
179
).wait_for ()
176
180
177
181
@navigate_to_page ("/" )
178
- def test_view_to_iframe_sync_class (self ):
182
+ def test_component_view_to_iframe_sync_class (self ):
179
183
self .page .frame_locator ("#view_to_iframe_sync_class > iframe" ).locator (
180
184
"#ViewToIframeSyncClass[data-success=true]"
181
185
).wait_for ()
182
186
183
187
@navigate_to_page ("/" )
184
- def test_view_to_iframe_async_class (self ):
188
+ def test_component_view_to_iframe_async_class (self ):
185
189
self .page .frame_locator ("#view_to_iframe_async_class > iframe" ).locator (
186
190
"#ViewToIframeAsyncClass[data-success=true]"
187
191
).wait_for ()
188
192
189
193
@navigate_to_page ("/" )
190
- def test_view_to_iframe_template_view_class (self ):
194
+ def test_component_view_to_iframe_template_view_class (self ):
191
195
self .page .frame_locator ("#view_to_iframe_template_view_class > iframe" ).locator (
192
196
"#ViewToIframeTemplateViewClass[data-success=true]"
193
197
).wait_for ()
194
198
195
199
@navigate_to_page ("/" )
196
- def test_view_to_iframe_args (self ):
200
+ def test_component_view_to_iframe_args (self ):
197
201
self .page .frame_locator ("#view_to_iframe_args > iframe" ).locator (
198
202
"#view_to_iframe_args[data-success=Success]"
199
203
).wait_for ()
@@ -225,7 +229,7 @@ def test_component_session_missing(self):
225
229
assert not query_exists
226
230
227
231
@navigate_to_page ("/" )
228
- def test_use_user_data (self ):
232
+ def test_component_use_user_data (self ):
229
233
text_input = self .page .wait_for_selector ("#use-user-data input" )
230
234
login_1 = self .page .wait_for_selector ("#use-user-data .login-1" )
231
235
login_2 = self .page .wait_for_selector ("#use-user-data .login-2" )
@@ -281,7 +285,7 @@ def test_use_user_data(self):
281
285
assert "Data: None" in user_data_div .text_content ()
282
286
283
287
@navigate_to_page ("/" )
284
- def test_use_user_data_with_default (self ):
288
+ def test_component_use_user_data_with_default (self ):
285
289
text_input = self .page .wait_for_selector ("#use-user-data-with-default input" )
286
290
login_3 = self .page .wait_for_selector ("#use-user-data-with-default .login-3" )
287
291
clear = self .page .wait_for_selector ("#use-user-data-with-default .clear" )
@@ -357,37 +361,37 @@ def test_prerender(self):
357
361
###############
358
362
359
363
@navigate_to_page ("/errors/" )
360
- def test_component_does_not_exist_error (self ):
364
+ def test_error_component_does_not_exist (self ):
361
365
broken_component = self .page .locator ("#component_does_not_exist_error" )
362
366
broken_component .wait_for ()
363
367
assert "ComponentDoesNotExistError:" in broken_component .text_content ()
364
368
365
369
@navigate_to_page ("/errors/" )
366
- def test_component_param_error (self ):
370
+ def test_error_component_param (self ):
367
371
broken_component = self .page .locator ("#component_param_error" )
368
372
broken_component .wait_for ()
369
373
assert "ComponentParamError:" in broken_component .text_content ()
370
374
371
375
@navigate_to_page ("/errors/" )
372
- def test_invalid_host_error (self ):
376
+ def test_error_invalid_host (self ):
373
377
broken_component = self .page .locator ("#invalid_host_error" )
374
378
broken_component .wait_for ()
375
379
assert "InvalidHostError:" in broken_component .text_content ()
376
380
377
381
@navigate_to_page ("/errors/" )
378
- def test_synchronous_only_operation_error (self ):
382
+ def test_error_synchronous_only_operation (self ):
379
383
broken_component = self .page .locator ("#broken_postprocessor_query pre" )
380
384
broken_component .wait_for ()
381
385
assert "SynchronousOnlyOperation:" in broken_component .text_content ()
382
386
383
387
@navigate_to_page ("/errors/" )
384
- def test_view_not_registered_error (self ):
388
+ def test_error_view_not_registered (self ):
385
389
broken_component = self .page .locator ("#view_to_iframe_not_registered pre" )
386
390
broken_component .wait_for ()
387
391
assert "ViewNotRegisteredError:" in broken_component .text_content ()
388
392
389
393
@navigate_to_page ("/errors/" )
390
- def test_decorator_param_error (self ):
394
+ def test_error_decorator_param (self ):
391
395
broken_component = self .page .locator ("#incorrect_user_passes_test_decorator" )
392
396
broken_component .wait_for ()
393
397
assert "DecoratorParamError:" in broken_component .text_content ()
@@ -551,7 +555,7 @@ def test_pyscript_1_javascript_module_execution_within_pyscript(self):
551
555
# Distributed Computing Tests #
552
556
###############################
553
557
554
- def test_host_roundrobin (self ):
558
+ def test_distributed_host_roundrobin (self ):
555
559
"""Verify if round-robin host selection is working."""
556
560
self .page .goto (f"{ self .live_server_url } /roundrobin/{ self ._port_2 } /{ self ._port_3 } /8" )
557
561
elem0 = self .page .locator (".custom_host-0" )
@@ -579,14 +583,14 @@ def test_host_roundrobin(self):
579
583
assert current_ports == correct_ports
580
584
assert len (current_ports ) == 2
581
585
582
- def test_custom_host (self ):
586
+ def test_distributed_custom_host (self ):
583
587
"""Make sure that the component is rendered by a separate server."""
584
588
self .page .goto (f"{ self .live_server_url } /port/{ self ._port_2 } /" )
585
589
elem = self .page .locator (".custom_host-0" )
586
590
elem .wait_for ()
587
591
assert f"Server Port: { self ._port_2 } " in elem .text_content ()
588
592
589
- def test_custom_host_wrong_port (self ):
593
+ def test_distributed_custom_host_wrong_port (self ):
590
594
"""Make sure that other ports are not rendering components."""
591
595
tmp_sock = socket .socket ()
592
596
tmp_sock .bind ((self ._server_process_0 .host , 0 ))
@@ -600,7 +604,7 @@ def test_custom_host_wrong_port(self):
600
604
#################
601
605
602
606
@navigate_to_page ("/offline/" , server_num = 1 )
603
- def test_offline_components (self ):
607
+ def test_offline_component (self ):
604
608
self .page .wait_for_selector ("div:not([hidden]) > #online" )
605
609
assert self .page .query_selector ("div[hidden] > #offline" ) is not None
606
610
self ._server_process_1 .terminate ()
@@ -613,7 +617,7 @@ def test_offline_components(self):
613
617
##############
614
618
615
619
@navigate_to_page ("/form/" )
616
- def test_basic_form (self ):
620
+ def test_form_basic (self ):
617
621
try :
618
622
from test_app .models import TodoItem
619
623
@@ -709,7 +713,7 @@ def test_basic_form(self):
709
713
assert len (self .page .query_selector_all (".errorlist" )) == 0
710
714
711
715
@navigate_to_page ("/form/bootstrap/" )
712
- def test_bootstrap_form (self ):
716
+ def test_form_bootstrap (self ):
713
717
try :
714
718
from test_app .models import TodoItem
715
719
@@ -806,7 +810,7 @@ def test_bootstrap_form(self):
806
810
assert len (self .page .query_selector_all (".invalid-feedback" )) == 0
807
811
808
812
@navigate_to_page ("/form/model/" )
809
- def test_model_form (self ):
813
+ def test_form_orm_model (self ):
810
814
uuid = uuid4 ().hex
811
815
self .page .wait_for_selector ("form" )
812
816
@@ -844,7 +848,7 @@ def test_model_form(self):
844
848
# https://github.com/reactive-python/reactpy-django/issues/272
845
849
@pytest .mark .flaky (reruns = 5 )
846
850
@navigate_to_page ("/form/sync_event/" )
847
- def test_sync_form_events (self ):
851
+ def test_form_sync_events (self ):
848
852
self .page .wait_for_selector ("form" )
849
853
850
854
# Check initial state
@@ -874,7 +878,7 @@ def test_sync_form_events(self):
874
878
self .page .wait_for_selector ("#change[data-value='true']" )
875
879
876
880
@navigate_to_page ("/form/async_event/" )
877
- def test_async_form_events (self ):
881
+ def test_form_async_events (self ):
878
882
self .page .wait_for_selector ("form" )
879
883
880
884
# Check initial state
0 commit comments