2
2
import os
3
3
import socket
4
4
from time import sleep
5
+ from uuid import uuid4
5
6
6
7
import pytest
7
8
from playwright .sync_api import TimeoutError , expect
@@ -782,6 +783,7 @@ def test_bootstrap_form(self):
782
783
def test_model_form (self ):
783
784
navigate_to_page (self , "/form/model/" )
784
785
786
+ uuid = uuid4 ().hex
785
787
self .page .wait_for_selector ("form" )
786
788
787
789
sleep (1 )
@@ -792,8 +794,9 @@ def test_model_form(self):
792
794
assert len (self .page .query_selector_all (".errorlist" )) == 1
793
795
794
796
# Fill out the form
795
- self .page .locator ("#id_text" ).type ("test" , delay = CLICK_DELAY )
797
+ self .page .locator ("#id_text" ).type (uuid , delay = CLICK_DELAY )
796
798
799
+ # Submit the form
797
800
self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
798
801
799
802
# Wait for the error message to disappear (indicating that the form has been re-rendered)
@@ -803,4 +806,75 @@ def test_model_form(self):
803
806
assert len (self .page .query_selector_all (".errorlist" )) == 0
804
807
805
808
# Make sure text field is empty
809
+ expect (self .page .locator ("#id_text" )).to_be_empty ()
806
810
assert self .page .locator ("#id_text" ).get_attribute ("value" ) == ""
811
+
812
+ # Check if `auto_save` created the TodoItem's database entry
813
+ try :
814
+ from test_app .models import TodoItem
815
+
816
+ os .environ ["DJANGO_ALLOW_ASYNC_UNSAFE" ] = "true"
817
+
818
+ assert TodoItem .objects .filter (text = uuid ).exists ()
819
+ finally :
820
+ os .environ .pop ("DJANGO_ALLOW_ASYNC_UNSAFE" )
821
+
822
+ def test_sync_form_events (self ):
823
+ navigate_to_page (self , "/form/sync_event/" )
824
+ self .page .wait_for_selector ("form" )
825
+
826
+ # Check initial state
827
+ self .page .wait_for_selector ("#success[data-value='false']" )
828
+ self .page .wait_for_selector ("#error[data-value='false']" )
829
+ self .page .wait_for_selector ("#receive_data[data-value='false']" )
830
+ self .page .wait_for_selector ("#change[data-value='false']" )
831
+
832
+ # Submit empty the form
833
+ sleep (1 )
834
+ self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
835
+
836
+ # The empty form was submitted, should result in an error
837
+ self .page .wait_for_selector ("#success[data-value='false']" )
838
+ self .page .wait_for_selector ("#error[data-value='true']" )
839
+ self .page .wait_for_selector ("#receive_data[data-value='true']" )
840
+ self .page .wait_for_selector ("#change[data-value='false']" )
841
+
842
+ # Fill out the form and re-submit
843
+ self .page .wait_for_selector ("#id_char_field" ).type ("test" , delay = CLICK_DELAY )
844
+ self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
845
+
846
+ # Form should have been successfully submitted
847
+ self .page .wait_for_selector ("#success[data-value='true']" )
848
+ self .page .wait_for_selector ("#error[data-value='true']" )
849
+ self .page .wait_for_selector ("#receive_data[data-value='true']" )
850
+ self .page .wait_for_selector ("#change[data-value='true']" )
851
+
852
+ def test_async_form_events (self ):
853
+ navigate_to_page (self , "/form/async_event/" )
854
+ self .page .wait_for_selector ("form" )
855
+
856
+ # Check initial state
857
+ self .page .wait_for_selector ("#success[data-value='false']" )
858
+ self .page .wait_for_selector ("#error[data-value='false']" )
859
+ self .page .wait_for_selector ("#receive_data[data-value='false']" )
860
+ self .page .wait_for_selector ("#change[data-value='false']" )
861
+
862
+ # Submit empty the form
863
+ sleep (1 )
864
+ self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
865
+
866
+ # The empty form was submitted, should result in an error
867
+ self .page .wait_for_selector ("#success[data-value='false']" )
868
+ self .page .wait_for_selector ("#error[data-value='true']" )
869
+ self .page .wait_for_selector ("#receive_data[data-value='true']" )
870
+ self .page .wait_for_selector ("#change[data-value='false']" )
871
+
872
+ # Fill out the form and re-submit
873
+ self .page .wait_for_selector ("#id_char_field" ).type ("test" , delay = CLICK_DELAY )
874
+ self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
875
+
876
+ # Form should have been successfully submitted
877
+ self .page .wait_for_selector ("#success[data-value='true']" )
878
+ self .page .wait_for_selector ("#error[data-value='true']" )
879
+ self .page .wait_for_selector ("#receive_data[data-value='true']" )
880
+ self .page .wait_for_selector ("#change[data-value='true']" )
0 commit comments