Total Complexity | 29 |
Total Lines | 311 |
Duplicated Lines | 52.73 % |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | # -*- coding: utf-8 -*- |
||
38 | @override_settings( |
||
39 | ACCOUNT_ACTIVATION_DAYS=7, |
||
40 | REGISTRATION_OPEN=True, |
||
41 | REGISTRATION_SUPPLEMENT_CLASS=None, |
||
42 | REGISTRATION_BACKEND_CLASS=( |
||
43 | 'registration.backends.default.DefaultRegistrationBackend'), |
||
44 | ) |
||
45 | class DefaultRegistrationBackendTestCase(TestCase): |
||
46 | |||
47 | def setUp(self): |
||
48 | self.backend = DefaultRegistrationBackend() |
||
49 | self.mock_request = mock_request() |
||
50 | |||
51 | |||
52 | def test_registration(self): |
||
53 | new_user = self.backend.register( |
||
54 | username='bob', email='[email protected]', |
||
55 | request=self.mock_request) |
||
56 | |||
57 | self.assertEqual(new_user.username, 'bob') |
||
58 | self.assertEqual(new_user.email, '[email protected]') |
||
59 | |||
60 | self.failIf(new_user.is_active) |
||
61 | self.failIf(new_user.has_usable_password()) |
||
62 | |||
63 | # A inspection profile was created, and an registration email |
||
64 | # was sent. |
||
65 | self.assertEqual(RegistrationProfile.objects.count(), 1) |
||
66 | self.assertEqual(len(mail.outbox), 1) |
||
67 | |||
68 | def test_acceptance(self): |
||
69 | new_user = self.backend.register( |
||
70 | username='bob', email='[email protected]', |
||
71 | request=self.mock_request) |
||
72 | |||
73 | profile = new_user.registration_profile |
||
74 | accepted_user = self.backend.accept(profile, request=self.mock_request) |
||
75 | |||
76 | self.failUnless(accepted_user) |
||
77 | self.assertEqual(profile, accepted_user.registration_profile) |
||
78 | self.assertEqual(profile.status, 'accepted') |
||
79 | self.assertNotEqual(profile.activation_key, None) |
||
80 | |||
81 | def test_rejection(self): |
||
82 | new_user = self.backend.register( |
||
83 | username='bob', email='[email protected]', |
||
84 | request=self.mock_request) |
||
85 | |||
86 | profile = new_user.registration_profile |
||
87 | rejected_user = self.backend.reject(profile, request=self.mock_request) |
||
88 | |||
89 | self.failUnless(rejected_user) |
||
90 | self.assertEqual(profile, rejected_user.registration_profile) |
||
91 | self.assertEqual(profile.status, 'rejected') |
||
92 | self.assertEqual(profile.activation_key, None) |
||
93 | |||
94 | View Code Duplication | def test_activation_with_password(self): |
|
|
|||
95 | new_user = self.backend.register( |
||
96 | username='bob', email='[email protected]', |
||
97 | request=self.mock_request) |
||
98 | |||
99 | profile = new_user.registration_profile |
||
100 | self.backend.accept(profile, request=self.mock_request) |
||
101 | activated_user = self.backend.activate( |
||
102 | activation_key=profile.activation_key, |
||
103 | request=self.mock_request, |
||
104 | password='swardfish') |
||
105 | |||
106 | self.failUnless(activated_user) |
||
107 | self.assertEqual(activated_user, new_user) |
||
108 | self.failUnless(activated_user.is_active) |
||
109 | self.failUnless(activated_user.has_usable_password()) |
||
110 | self.failUnless(activated_user.check_password('swardfish')) |
||
111 | |||
112 | View Code Duplication | def test_activation_without_password(self): |
|
113 | new_user = self.backend.register( |
||
114 | username='bob', email='[email protected]', |
||
115 | request=self.mock_request) |
||
116 | |||
117 | profile = new_user.registration_profile |
||
118 | self.backend.accept(profile, request=self.mock_request) |
||
119 | activated_user = self.backend.activate( |
||
120 | activation_key=profile.activation_key, |
||
121 | request=self.mock_request) |
||
122 | |||
123 | self.failUnless(activated_user) |
||
124 | self.assertEqual(activated_user, new_user) |
||
125 | self.failUnless(activated_user.is_active) |
||
126 | self.failUnless(activated_user.has_usable_password()) |
||
127 | |||
128 | def test_untreated_activation(self): |
||
129 | User = get_user_model() |
||
130 | new_user = self.backend.register( |
||
131 | username='bob', email='[email protected]', |
||
132 | request=self.mock_request) |
||
133 | |||
134 | profile = new_user.registration_profile |
||
135 | activated_user = self.backend.activate( |
||
136 | activation_key=profile.activation_key, |
||
137 | request=self.mock_request, |
||
138 | password='swardfish') |
||
139 | |||
140 | self.failIf(activated_user) |
||
141 | new_user = User.objects.get(pk=new_user.pk) |
||
142 | self.failIf(new_user.is_active) |
||
143 | self.failIf(new_user.has_usable_password()) |
||
144 | |||
145 | View Code Duplication | def test_rejected_activation(self): |
|
146 | User = get_user_model() |
||
147 | new_user = self.backend.register( |
||
148 | username='bob', email='[email protected]', |
||
149 | request=self.mock_request) |
||
150 | |||
151 | profile = new_user.registration_profile |
||
152 | self.backend.reject(profile, request=self.mock_request) |
||
153 | activated_user = self.backend.activate( |
||
154 | activation_key=profile.activation_key, |
||
155 | request=self.mock_request, |
||
156 | password='swardfish') |
||
157 | |||
158 | self.failIf(activated_user) |
||
159 | new_user = User.objects.get(pk=new_user.pk) |
||
160 | self.failIf(new_user.is_active) |
||
161 | self.failIf(new_user.has_usable_password()) |
||
162 | |||
163 | View Code Duplication | def test_expired_activation(self): |
|
164 | User = get_user_model() |
||
165 | expired_user = self.backend.register( |
||
166 | username='bob', email='[email protected]', |
||
167 | request=self.mock_request) |
||
168 | |||
169 | profile = expired_user.registration_profile |
||
170 | self.backend.accept(profile, request=self.mock_request) |
||
171 | |||
172 | expired_user.date_joined -= datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS+1) |
||
173 | expired_user.save() |
||
174 | |||
175 | activated_user = self.backend.activate( |
||
176 | activation_key=profile.activation_key, |
||
177 | request=self.mock_request, |
||
178 | password='swardfish') |
||
179 | |||
180 | self.failIf(activated_user) |
||
181 | expired_user = User.objects.get(pk=expired_user.pk) |
||
182 | self.failIf(expired_user.is_active) |
||
183 | self.failIf(expired_user.has_usable_password()) |
||
184 | |||
185 | def test_allow(self): |
||
186 | old_allowed = settings.REGISTRATION_OPEN |
||
187 | settings.REGISTRATION_OPEN = True |
||
188 | self.failUnless(self.backend.registration_allowed()) |
||
189 | |||
190 | settings.REGISTRATION_OPEN = False |
||
191 | self.failIf(self.backend.registration_allowed()) |
||
192 | settings.REGISTRATION_OPEN = old_allowed |
||
193 | |||
194 | def test_get_registration_form_class(self): |
||
195 | form_class = self.backend.get_registration_form_class() |
||
196 | self.failUnless(form_class is forms.RegistrationForm) |
||
197 | |||
198 | def test_get_activation_form_class(self): |
||
199 | form_class = self.backend.get_activation_form_class() |
||
200 | self.failUnless(form_class is forms.ActivationForm) |
||
201 | |||
202 | def test_get_registration_complete_url(self): |
||
203 | User = get_user_model() |
||
204 | fake_user = User() |
||
205 | url = self.backend.get_registration_complete_url(fake_user) |
||
206 | self.assertEqual(url, reverse('registration_complete')) |
||
207 | |||
208 | def test_get_registration_closed_url(self): |
||
209 | url = self.backend.get_registration_closed_url() |
||
210 | self.assertEqual(url, reverse('registration_disallowed')) |
||
211 | |||
212 | def test_get_activation_complete_url(self): |
||
213 | User = get_user_model() |
||
214 | fake_user = User() |
||
215 | url = self.backend.get_activation_complete_url(fake_user) |
||
216 | self.assertEqual(url, reverse('registration_activation_complete')) |
||
217 | |||
218 | def test_registration_signal(self): |
||
219 | def receiver(sender, user, profile, **kwargs): |
||
220 | self.assertEqual(user.username, 'bob') |
||
221 | self.assertEqual(user.registration_profile, profile) |
||
222 | received_signals.append(kwargs.get('signal')) |
||
223 | |||
224 | received_signals = [] |
||
225 | signals.user_registered.connect(receiver, sender=self.backend.__class__) |
||
226 | |||
227 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
228 | |||
229 | self.assertEqual(len(received_signals), 1) |
||
230 | self.assertEqual(received_signals, [signals.user_registered]) |
||
231 | |||
232 | View Code Duplication | @with_apps( |
|
233 | 'django.contrib.contenttypes', |
||
234 | 'registration.supplements.default' |
||
235 | ) |
||
236 | @override_settings( |
||
237 | REGISTRATION_SUPPLEMENT_CLASS=( |
||
238 | 'registration.supplements.default.models.DefaultRegistrationSupplement'), |
||
239 | ) |
||
240 | def test_registration_signal_with_supplement(self): |
||
241 | from registration.supplements.default.models import DefaultRegistrationSupplement |
||
242 | supplement = DefaultRegistrationSupplement(remarks='foo') |
||
243 | |||
244 | def receiver(sender, user, profile, **kwargs): |
||
245 | self.assertEqual(user.username, 'bob') |
||
246 | self.assertEqual(user.registration_profile, profile) |
||
247 | self.assertEqual(user.registration_profile.supplement, |
||
248 | profile.supplement) |
||
249 | self.assertEqual(profile.supplement.remarks, 'foo') |
||
250 | received_signals.append(kwargs.get('signal')) |
||
251 | |||
252 | received_signals = [] |
||
253 | signals.user_registered.connect(receiver, sender=self.backend.__class__) |
||
254 | |||
255 | self.backend.register( |
||
256 | username='bob', email='[email protected]', |
||
257 | request=self.mock_request, |
||
258 | supplement=supplement, |
||
259 | ) |
||
260 | |||
261 | self.assertEqual(len(received_signals), 1) |
||
262 | self.assertEqual(received_signals, [signals.user_registered]) |
||
263 | |||
264 | |||
265 | View Code Duplication | def test_acceptance_signal(self): |
|
266 | def receiver(sender, user, profile, **kwargs): |
||
267 | self.assertEqual(user.username, 'bob') |
||
268 | self.assertEqual(user.registration_profile, profile) |
||
269 | received_signals.append(kwargs.get('signal')) |
||
270 | |||
271 | received_signals = [] |
||
272 | signals.user_accepted.connect(receiver, sender=self.backend.__class__) |
||
273 | |||
274 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
275 | profile = RegistrationProfile.objects.get(user__username='bob') |
||
276 | self.backend.accept(profile, request=self.mock_request) |
||
277 | |||
278 | self.assertEqual(len(received_signals), 1) |
||
279 | self.assertEqual(received_signals, [signals.user_accepted]) |
||
280 | |||
281 | View Code Duplication | def test_acceptance_signal_fail(self): |
|
282 | def receiver(sender, user, profile, **kwargs): |
||
283 | self.assertEqual(user.username, 'bob') |
||
284 | self.assertEqual(user.registration_profile, profile) |
||
285 | received_signals.append(kwargs.get('signal')) |
||
286 | |||
287 | received_signals = [] |
||
288 | |||
289 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
290 | profile = RegistrationProfile.objects.get(user__username='bob') |
||
291 | self.backend.accept(profile, request=self.mock_request) |
||
292 | |||
293 | signals.user_accepted.connect(receiver, sender=self.backend.__class__) |
||
294 | # accept -> accept is not allowed thus fail |
||
295 | self.backend.accept(profile, request=self.mock_request) |
||
296 | |||
297 | self.assertEqual(len(received_signals), 0) |
||
298 | |||
299 | View Code Duplication | def test_rejection_signal(self): |
|
300 | def receiver(sender, user, profile, **kwargs): |
||
301 | self.assertEqual(user.username, 'bob') |
||
302 | self.assertEqual(user.registration_profile, profile) |
||
303 | received_signals.append(kwargs.get('signal')) |
||
304 | |||
305 | received_signals = [] |
||
306 | signals.user_rejected.connect(receiver, sender=self.backend.__class__) |
||
307 | |||
308 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
309 | profile = RegistrationProfile.objects.get(user__username='bob') |
||
310 | self.backend.reject(profile, request=self.mock_request) |
||
311 | |||
312 | self.assertEqual(len(received_signals), 1) |
||
313 | self.assertEqual(received_signals, [signals.user_rejected]) |
||
314 | |||
315 | View Code Duplication | def test_rejection_signal_fail(self): |
|
316 | def receiver(sender, user, profile, **kwargs): |
||
317 | self.assertEqual(user.username, 'bob') |
||
318 | self.assertEqual(user.registration_profile, profile) |
||
319 | received_signals.append(kwargs.get('signal')) |
||
320 | |||
321 | received_signals = [] |
||
322 | signals.user_rejected.connect(receiver, sender=self.backend.__class__) |
||
323 | |||
324 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
325 | profile = RegistrationProfile.objects.get(user__username='bob') |
||
326 | self.backend.accept(profile, request=self.mock_request) |
||
327 | # accept -> reject is not allowed |
||
328 | self.backend.reject(profile, request=self.mock_request) |
||
329 | |||
330 | self.assertEqual(len(received_signals), 0) |
||
331 | |||
332 | def test_activation_signal(self): |
||
333 | def receiver(sender, user, password, is_generated, **kwargs): |
||
334 | self.assertEqual(user.username, 'bob') |
||
335 | self.assertEqual(password, 'swordfish') |
||
336 | self.failIf(is_generated) |
||
337 | received_signals.append(kwargs.get('signal')) |
||
338 | |||
339 | received_signals = [] |
||
340 | signals.user_activated.connect(receiver, sender=self.backend.__class__) |
||
341 | |||
342 | self.backend.register(username='bob', email='[email protected]', request=self.mock_request) |
||
343 | profile = RegistrationProfile.objects.get(user__username='bob') |
||
344 | self.backend.accept(profile, request=self.mock_request) |
||
345 | self.backend.activate(profile.activation_key, request=self.mock_request, password='swordfish') |
||
346 | |||
347 | self.assertEqual(len(received_signals), 1) |
||
348 | self.assertEqual(received_signals, [signals.user_activated]) |
||
349 | |||
350 |