1+ import warnings
12from django .core .exceptions import SuspiciousOperation
23from django .forms .models import modelform_factory
34from django .forms .widgets import HiddenInput , TextInput
45from django .utils .encoding import smart_str
5- from django .utils . unittest . case import TestCase
6- from concurrency .forms import ConcurrentForm , VersionField , VersionFieldSigner
6+ from django .test import TestCase
7+ from concurrency .forms import ConcurrentForm , VersionField , VersionFieldSigner , VersionWidget
78from concurrency .tests import TestModel0 , TestIssue3Model
9+ from django .test .testcases import SimpleTestCase
810
911
1012class DummySigner ():
@@ -14,59 +16,73 @@ def sign(self, value):
1416 def unsign (self , signed_value ):
1517 return smart_str (signed_value )
1618
19+
20+ class WidgetTest (TestCase ):
21+ def test (self ):
22+ w = VersionWidget ()
23+ self .assertHTMLEqual (w .render ('ver' , None ),
24+ u'<input name="ver" type="hidden"/><div></div>' )
25+ self .assertHTMLEqual (w .render ('ver' , 100 ),
26+ u'<input name="ver" type="hidden" value="100"/><div>100</div>' )
27+
28+
29+ class FieldTest (SimpleTestCase ):
30+
31+ def setUp (self ):
32+ self .save_warnings_state ()
33+ warnings .filterwarnings ('ignore' , category = DeprecationWarning ,
34+ module = 'django.core.validators' )
35+
36+ def tearDown (self ):
37+ self .restore_warnings_state ()
38+
39+ def test_with_dummy_signer (self ):
40+ f = VersionField (signer = DummySigner ())
41+ self .assertEqual (1 , f .clean (1 ))
42+ self .assertEqual (1 , f .clean ('1' ))
43+ self .assertEqual (0 , f .clean (None ))
44+ self .assertEqual (0 , f .clean ('' ))
45+ self .assertRaisesMessage (SuspiciousOperation ,
46+ "Version number seems tampered" , f .clean , 'aa:bb' )
47+ self .assertRaisesMessage (SuspiciousOperation ,
48+ "Version number seems tampered" , f .clean , 1.5 )
49+
50+ def test (self ):
51+ f = VersionField ()
52+ self .assertEqual (1 , f .clean (VersionFieldSigner ().sign (1 )))
53+ self .assertEqual (1 , f .clean (VersionFieldSigner ().sign ('1' )))
54+ self .assertEqual (0 , f .clean (None ))
55+ self .assertEqual (0 , f .clean ('' ))
56+ self .assertRaisesMessage (SuspiciousOperation ,
57+ "Version number seems tampered" , f .clean , '100' )
58+ self .assertRaisesMessage (SuspiciousOperation ,
59+ "Version number seems tampered" ,
60+ f .clean ,
61+ VersionFieldSigner ().sign (1.5 ))
62+
63+
1764class ConcurrentFormTest (TestCase ):
1865 def test_version (self ):
1966 Form = modelform_factory (TestModel0 , ConcurrentForm )
2067 form = Form ()
2168 self .assertIsInstance (form .fields ['version' ].widget , HiddenInput )
2269
23- def test_signer (self ):
70+ def test_clean (self ):
71+ pass
72+
73+ def test_dummy_signer (self ):
2474 obj , __ = TestIssue3Model .objects .get_or_create (username = 'aaa' )
25- Form = modelform_factory (TestIssue3Model , type ('xxx' ,(ConcurrentForm ,), {'revision' : VersionField (signer = DummySigner ())}))
75+ Form = modelform_factory (TestIssue3Model , type ('xxx' , (ConcurrentForm ,), {'revision' : VersionField (signer = DummySigner ())}))
2676 data = {'id' : 1 ,
2777 'revision' : obj .revision }
2878 form = Form (data , instance = obj )
2979 self .assertTrue (form .is_valid (), form .non_field_errors ())
3080
31- def test_signer2 (self ):
81+ def test_signer (self ):
3282 Form = modelform_factory (TestIssue3Model , ConcurrentForm )
3383 form = Form ({'username' : 'aaa' })
3484 self .assertTrue (form .is_valid (), form .non_field_errors ())
3585
36- def test_creation_None_version (self ):
37- Form = modelform_factory (TestIssue3Model , type ('xxx' ,(ConcurrentForm ,), {}))
38- data = {'username' : 'aaaq' ,
39- 'last_name' : None ,
40- 'revision' : VersionField ().prepare_value (None )}
41- form = Form (data )
42- self .assertTrue (form .is_valid ())
43- obj = form .save ()
44-
45- def test_creation_empty_version (self ):
46- Form = modelform_factory (TestIssue3Model , type ('xxx' ,(ConcurrentForm ,), {}))
47- data = {'username' : 'aaaq' ,
48- 'last_name' : None ,
49- 'revision' : VersionField ().prepare_value ('' )}
50- form = Form (data )
51- self .assertTrue (form .is_valid ())
52- obj = form .save ()
53-
54- def test_creation_0_version (self ):
55- Form = modelform_factory (TestIssue3Model , type ('xxx' ,(ConcurrentForm ,), {}))
56- data = {'username' : 'aaa' ,
57- 'revision' : VersionField ().prepare_value (0 )}
58- form = Form (data )
59- self .assertTrue (form .is_valid ())
60- obj = form .save ()
61-
62- def test_creation_empty_version2 (self ):
63- obj , __ = TestIssue3Model .objects .get_or_create (username = 'aaa' )
64- Form = modelform_factory (TestIssue3Model , type ('xxx' ,(ConcurrentForm ,), {'revision' : VersionField (signer = DummySigner ())}))
65- data = {'id' : 1 ,
66- 'revision' : '' }
67- form = Form (data , instance = obj )
68- self .assertTrue (form .is_valid (), form .non_field_errors ())
69-
7086 def test_tamperig (self ):
7187 obj , __ = TestIssue3Model .objects .get_or_create (username = 'aaa' )
7288 Form = modelform_factory (TestIssue3Model , ConcurrentForm )
0 commit comments