2
2
from model_bakery import baker
3
3
from itertools import chain
4
4
5
+ from django .conf import settings
5
6
from django .contrib import messages
6
7
from django .contrib .auth .models import Group
7
- from django .conf import settings
8
+ from django .contrib .messages import get_messages
9
+ from django .contrib .sessions .backends .base import SessionBase
8
10
from django .core import mail
9
- from django .urls import reverse ,reverse_lazy
10
11
from django .test import TestCase
11
- from django .contrib . messages import get_messages
12
+ from django .urls import reverse , reverse_lazy
12
13
13
14
from .utils import get_static_image_file_as_upload
14
15
from ..models import (
@@ -42,11 +43,24 @@ def setUp(self):
42
43
self .program_2_benefits = baker .make (
43
44
SponsorshipBenefit ,program = self .wk ,_quantity = 5
44
45
)
46
+ self .package = baker .make ("sponsors.SponsorshipPackage" )
47
+ for benefit in self .program_1_benefits :
48
+ benefit .packages .add (self .package )
45
49
self .user = baker .make (settings .AUTH_USER_MODEL ,is_staff = True ,is_active = True )
46
50
self .client .force_login (self .user )
47
51
48
52
self .group = Group (name = "Sponsorship Preview" )
49
53
self .group .save ()
54
+ self .data = {
55
+ "benefits_psf" : [b .id for b in self .program_1_benefits ],
56
+ "benefits_working_group" : [b .id for b in self .program_2_benefits ],
57
+ "package" :self .package .id ,
58
+ }
59
+
60
+ def populate_test_cookie (self ):
61
+ session = self .client .session
62
+ session [SessionBase .TEST_COOKIE_NAME ]= SessionBase .TEST_COOKIE_VALUE
63
+ session .save ()
50
64
51
65
def test_display_template_with_form_and_context (self ):
52
66
psf_package = baker .make ("sponsors.SponsorshipPackage" )
@@ -59,45 +73,36 @@ def test_display_template_with_form_and_context(self):
59
73
self .assertTemplateUsed (r ,"sponsors/sponsorship_benefits_form.html" )
60
74
self .assertIsInstance (r .context ["form" ],SponsorshiptBenefitsForm )
61
75
self .assertEqual (r .context ["benefit_model" ],SponsorshipBenefit )
62
- self .assertEqual (2 ,packages .count ())
76
+ self .assertEqual (3 ,packages .count ())
63
77
self .assertIn (psf_package ,packages )
64
78
self .assertIn (extra_package ,packages )
79
+ self .assertEqual (
80
+ r .client .session [SessionBase .TEST_COOKIE_NAME ],
81
+ SessionBase .TEST_COOKIE_VALUE ,
82
+ )
65
83
66
84
def test_display_form_with_errors_if_invalid_post (self ):
85
+ self .populate_test_cookie ()
67
86
r = self .client .post (self .url , {})
68
87
form = r .context ["form" ]
69
88
70
89
self .assertIsInstance (form ,SponsorshiptBenefitsForm )
71
90
self .assertTrue (form .errors )
72
91
73
92
def test_valid_post_redirect_user_to_next_form_step_and_save_info_in_cookies (self ):
74
- package = baker .make ("sponsors.SponsorshipPackage" )
75
- for benefit in self .program_1_benefits :
76
- benefit .packages .add (package )
77
-
78
- data = {
79
- "benefits_psf" : [b .id for b in self .program_1_benefits ],
80
- "benefits_working_group" : [b .id for b in self .program_2_benefits ],
81
- "package" :package .id ,
82
- }
83
- response = self .client .post (self .url ,data = data )
93
+ self .populate_test_cookie ()
94
+ response = self .client .post (self .url ,data = self .data )
84
95
85
96
self .assertRedirects (response ,reverse ("new_sponsorship_application" ))
86
97
cookie_value = json .loads (
87
98
response .client .cookies ["sponsorship_selected_benefits" ].value
88
99
)
89
- self .assertEqual (data ,cookie_value )
100
+ self .assertEqual (self . data ,cookie_value )
90
101
91
102
def test_populate_form_initial_with_values_from_cookie (self ):
92
- initial = {
93
- "benefits_psf" : [b .id for b in self .program_1_benefits ],
94
- "benefits_working_group" : [b .id for b in self .program_2_benefits ],
95
- "package" :"" ,
96
- }
97
- self .client .cookies ["sponsorship_selected_benefits" ]= json .dumps (initial )
103
+ self .client .cookies ["sponsorship_selected_benefits" ]= json .dumps (self .data )
98
104
r = self .client .get (self .url )
99
-
100
- self .assertEqual (initial ,r .context ["form" ].initial )
105
+ self .assertEqual (self .data ,r .context ["form" ].initial )
101
106
102
107
def test_capacity_flag (self ):
103
108
psf_package = baker .make ("sponsors.SponsorshipPackage" )
@@ -117,20 +122,22 @@ def test_redirect_to_login(self):
117
122
redirect_url = (
118
123
f"{ settings .LOGIN_URL } ?next={ reverse ('new_sponsorship_application' )} "
119
124
)
120
- package = baker .make ("sponsors.SponsorshipPackage" )
121
- for benefit in self .program_1_benefits :
122
- benefit .packages .add (package )
123
125
124
- data = {
125
- "benefits_psf" : [b .id for b in self .program_1_benefits ],
126
- "benefits_working_group" : [b .id for b in self .program_2_benefits ],
127
- "package" :package .id ,
128
- }
129
126
self .client .logout ()
130
- response = self .client .post (self .url ,data = data )
127
+ self .populate_test_cookie ()
128
+ response = self .client .post (self .url ,data = self .data )
131
129
132
130
self .assertRedirects (response ,redirect_url ,fetch_redirect_response = False )
133
131
132
+ def test_invalidate_post_even_if_valid_data_but_user_does_not_allow_cookies (self ):
133
+ # do not set Django's test cookie
134
+ r = self .client .post (self .url ,data = self .data )
135
+ form = r .context ["form" ]
136
+
137
+ self .assertIsInstance (form ,SponsorshiptBenefitsForm )
138
+ msg = "You must allow cookies from python.org to proceed."
139
+ self .assertEqual (form .non_field_errors (), [msg ])
140
+
134
141
135
142
class NewSponsorshipApplicationViewTests (TestCase ):
136
143
url = reverse_lazy ("new_sponsorship_application" )