1
1
from unittest .case import skip
2
2
3
+ from django .conf import settings
4
+ from django .contrib .auth import get_user_model
5
+ from django .contrib .auth .models import Permission
3
6
from django .contrib .messages .storage .fallback import FallbackStorage
4
7
from django .http .request import HttpRequest
5
8
from django .test import TestCase
6
9
from django .views .generic .base import ContextMixin
7
10
from edc_action_item import site_action_items
8
11
from edc_action_item .models import ActionItem
9
12
from edc_registration .models import RegisteredSubject
13
+ from edc_sites .utils import get_site_model_cls
14
+ from edc_sites .view_mixins import SiteViewMixin
10
15
11
16
from ..action_items import SUBJECT_LOCATOR_ACTION
12
17
from ..view_mixins import SubjectLocatorViewMixin , SubjectLocatorViewMixinError
@@ -21,62 +26,76 @@ class TestViewMixins(TestCase):
21
26
def setUp (self ):
22
27
self .subject_identifier = "12345"
23
28
RegisteredSubject .objects .create (subject_identifier = self .subject_identifier )
29
+ self .user = get_user_model ().objects .create_superuser (
30
+ "user_login" ,
"[email protected] " ,
"pass"
31
+ )
32
+ self .user .is_active = True
33
+ self .user .is_staff = True
34
+ self .user .save ()
35
+ self .user .refresh_from_db ()
36
+ self .user .userprofile .sites .add (get_site_model_cls ().objects .get (id = settings .SITE_ID ))
37
+ self .user .user_permissions .add (
38
+ Permission .objects .get (
39
+ codename = "view_appointment" , content_type__app_label = "edc_appointment"
40
+ )
41
+ )
42
+
43
+ def get_request_object (self ) -> HttpRequest :
44
+ request = HttpRequest ()
45
+ setattr (request , "session" , "session" )
46
+ messages = FallbackStorage (request )
47
+ setattr (request , "_messages" , messages )
48
+ setattr (request , "user" , self .user )
49
+ setattr (request , "site" , get_site_model_cls ().objects .get (id = settings .SITE_ID ))
50
+ return request
24
51
25
52
def test_subject_locator_raises_on_bad_model (self ):
26
- class MySubjectLocatorViewMixin (SubjectLocatorViewMixin , ContextMixin ):
53
+ class MySubjectLocatorViewMixin (SiteViewMixin , SubjectLocatorViewMixin , ContextMixin ):
27
54
subject_locator_model_wrapper_cls = DummyModelWrapper
28
55
subject_locator_model = "blah.blahblah"
29
56
30
57
mixin = MySubjectLocatorViewMixin ()
58
+ mixin .kwargs = {"subject_identifier" : self .subject_identifier }
59
+ mixin .request = self .get_request_object ()
31
60
self .assertRaises (SubjectLocatorViewMixinError , mixin .get_context_data )
32
61
33
62
def test_subject_locator_raisesmissing_wrapper_cls (self ):
34
- class MySubjectLocatorViewMixin (SubjectLocatorViewMixin , ContextMixin ):
63
+ class MySubjectLocatorViewMixin (SiteViewMixin , SubjectLocatorViewMixin , ContextMixin ):
35
64
subject_locator_model = "edc_locator.subjectlocator"
36
65
37
66
self .assertRaises (SubjectLocatorViewMixinError , MySubjectLocatorViewMixin )
38
67
39
68
@skip ("problems emulating message framework" )
40
69
def test_mixin_messages (self ):
41
- class MySubjectLocatorViewMixin (SubjectLocatorViewMixin , ContextMixin ):
70
+ class MySubjectLocatorViewMixin (SiteViewMixin , SubjectLocatorViewMixin , ContextMixin ):
42
71
subject_locator_model_wrapper_cls = DummyModelWrapper
43
72
subject_locator_model = "edc_locator.subjectlocator"
44
73
45
74
mixin = MySubjectLocatorViewMixin ()
46
75
mixin .kwargs = {"subject_identifier" : self .subject_identifier }
47
- mixin .request = HttpRequest ()
48
- setattr (mixin .request , "session" , "session" )
49
- messages = FallbackStorage (mixin .request )
50
- setattr (mixin .request , "_messages" , messages )
76
+ mixin .request = self .get_request_object ()
51
77
self .assertGreater (len (mixin .request ._messages ._queued_messages ), 0 )
52
78
53
79
def test_subject_locator_view_ok (self ):
54
- class MySubjectLocatorViewMixin (SubjectLocatorViewMixin , ContextMixin ):
80
+ class MySubjectLocatorViewMixin (SiteViewMixin , SubjectLocatorViewMixin , ContextMixin ):
55
81
subject_locator_model_wrapper_cls = DummyModelWrapper
56
82
subject_locator_model = "edc_locator.subjectlocator"
57
83
58
84
mixin = MySubjectLocatorViewMixin ()
59
- mixin .request = HttpRequest ()
60
- setattr (mixin .request , "session" , "session" )
61
- messages = FallbackStorage (mixin .request )
62
- setattr (mixin .request , "_messages" , messages )
63
- # add this manually
85
+ mixin .request = self .get_request_object ()
64
86
mixin .kwargs = {"subject_identifier" : self .subject_identifier }
65
87
try :
66
88
mixin .get_context_data ()
67
89
except SubjectLocatorViewMixinError as e :
68
90
self .fail (e )
69
91
70
92
def test_subject_locator_self_corrects_if_multiple_actionitems (self ):
71
- class MySubjectLocatorViewMixin (SubjectLocatorViewMixin , ContextMixin ):
93
+ class MySubjectLocatorViewMixin (SiteViewMixin , SubjectLocatorViewMixin , ContextMixin ):
72
94
subject_locator_model_wrapper_cls = DummyModelWrapper
73
95
subject_locator_model = "edc_locator.subjectlocator"
74
96
75
97
mixin = MySubjectLocatorViewMixin ()
76
- mixin .request = HttpRequest ()
77
- setattr (mixin .request , "session" , "session" )
78
- messages = FallbackStorage (mixin .request )
79
- setattr (mixin .request , "_messages" , messages )
98
+ mixin .request = self .get_request_object ()
80
99
mixin .kwargs = {"subject_identifier" : self .subject_identifier }
81
100
try :
82
101
mixin .get_context_data ()
0 commit comments