1
1
# -*- coding: utf-8 -*-
2
+ import django
2
3
from django .conf import settings
3
4
from django .contrib .admin .sites import site
4
5
from django .core .urlresolvers import reverse
5
6
from django .http import HttpRequest
6
- from django .test .utils import override_settings
7
+ from django .test .utils import override_settings , modify_settings
7
8
8
9
import mock
9
10
import pytest
@@ -37,7 +38,7 @@ def test_middleware():
37
38
assert r .status_code == 409
38
39
39
40
40
- class ConcurrencyMiddlewareTest (AdminTestCase ):
41
+ class ConcurrencyMiddlewareTest1 (AdminTestCase ):
41
42
def _get_request (self , path ):
42
43
request = HttpRequest ()
43
44
request .META = {
@@ -60,37 +61,43 @@ def test_process_exception(self):
60
61
r = ConcurrencyMiddleware ().process_exception (request , RecordModifiedError (target = m ))
61
62
self .assertEqual (r .status_code , 409 )
62
63
63
- @pytest .mark .xfail ("django.VERSION[:2] == (1, 10)" , strict = True )
64
+
65
+ class ConcurrencyMiddlewareTest2 (AdminTestCase ):
66
+
67
+ @property
68
+ def settings_middleware (self ):
69
+ return getattr (settings , self .middleware_setting_name ) + ['concurrency.middleware.ConcurrencyMiddleware' ]
70
+
71
+ @settings_middleware .setter
72
+ def settings_middleware (self , value ):
73
+ setattr (settings , self .middleware_setting_name , value )
74
+
64
75
def test_in_admin (self ):
65
76
id = next (unique_id )
66
-
67
- middlewares = list (settings .MIDDLEWARE_CLASSES ) + ['concurrency.middleware.ConcurrencyMiddleware' ]
68
77
model_admin = site ._registry [SimpleConcurrentModel ]
69
78
70
79
with attributes ((model_admin .__class__ , 'list_editable_policy' , CONCURRENCY_LIST_EDITABLE_POLICY_ABORT_ALL ),
71
80
(ConcurrentModelAdmin , 'form' , DELETE_ATTRIBUTE )):
72
81
73
- with self .settings (MIDDLEWARE_CLASSES = middlewares ):
74
-
75
- saved , __ = SimpleConcurrentModel .objects .get_or_create (pk = id )
82
+ saved , __ = SimpleConcurrentModel .objects .get_or_create (pk = id )
76
83
77
- url = reverse ('admin:demo_simpleconcurrentmodel_change' , args = [saved .pk ])
78
- res = self .app .get (url , user = 'sax' )
79
- form = res .form
84
+ url = reverse ('admin:demo_simpleconcurrentmodel_change' , args = [saved .pk ])
85
+ res = self .app .get (url , user = self . user . username )
86
+ form = res .form
80
87
81
- saved .save () # create conflict here
88
+ saved .save () # create conflict here
82
89
83
- res = form .submit (expect_errors = True )
90
+ res = form .submit (expect_errors = True )
84
91
85
- self .assertEqual (res .status_code , 409 )
92
+ self .assertEqual (res .status_code , 409 )
86
93
87
- target = res .context ['target' ]
88
- self .assertIn ('target' , res .context )
89
- self .assertIn ('saved' , res .context )
94
+ target = res .context ['target' ]
95
+ self .assertIn ('target' , res .context )
96
+ self .assertIn ('saved' , res .context )
90
97
91
- self .assertEqual (res .context ['target' ].version , target .version )
92
- self .assertEqual (res .context ['saved' ].version , saved .version )
93
- self .assertEqual (res .context ['request_path' ], url )
98
+ self .assertEqual (res .context ['target' ].version , target .version )
99
+ self .assertEqual (res .context ['saved' ].version , saved .version )
100
+ self .assertEqual (res .context ['request_path' ], url )
94
101
95
102
#
96
103
# class TestFullStack(DjangoAdminTestCase):
0 commit comments