22import os
33import socket
44from time import sleep
5+ from uuid import uuid4
56
67import pytest
78from playwright .sync_api import TimeoutError , expect
@@ -782,6 +783,7 @@ def test_bootstrap_form(self):
782783 def test_model_form (self ):
783784 navigate_to_page (self , "/form/model/" )
784785
786+ uuid = uuid4 ().hex
785787 self .page .wait_for_selector ("form" )
786788
787789 sleep (1 )
@@ -792,8 +794,9 @@ def test_model_form(self):
792794 assert len (self .page .query_selector_all (".errorlist" )) == 1
793795
794796 # 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 )
796798
799+ # Submit the form
797800 self .page .wait_for_selector ("input[type=submit]" ).click (delay = CLICK_DELAY )
798801
799802 # Wait for the error message to disappear (indicating that the form has been re-rendered)
@@ -803,4 +806,75 @@ def test_model_form(self):
803806 assert len (self .page .query_selector_all (".errorlist" )) == 0
804807
805808 # Make sure text field is empty
809+ expect (self .page .locator ("#id_text" )).to_be_empty ()
806810 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