|
2 | 2 | from django.test import TestCase, override_settings
|
3 | 3 | from django.urls import reverse
|
4 | 4 |
|
| 5 | +from two_factor.plugins.registry import registry |
| 6 | + |
5 | 7 | from .utils import UserMixin
|
6 | 8 |
|
7 | 9 |
|
| 10 | +@override_settings( |
| 11 | + TWO_FACTOR_SMS_GATEWAY='two_factor.gateways.fake.Fake', |
| 12 | + TWO_FACTOR_CALL_GATEWAY='two_factor.gateways.fake.Fake', |
| 13 | +) |
8 | 14 | class ProfileTest(UserMixin, TestCase):
|
9 |
| - PHONENUMBER_PLUGIN_NAME = 'two_factor.plugins.phonenumber' |
10 |
| - EXPECTED_BASE_CONTEXT_KEYS = { |
11 |
| - 'default_device', |
12 |
| - 'default_device_type', |
13 |
| - 'backup_tokens', |
14 |
| - } |
15 |
| - EXPECTED_PHONENUMBER_PLUGIN_ADDITIONAL_KEYS = { |
16 |
| - 'backup_phones', |
17 |
| - 'available_phone_methods', |
18 |
| - } |
19 |
| - |
20 | 15 | def setUp(self):
|
21 | 16 | super().setUp()
|
22 | 17 | self.user = self.create_user()
|
23 | 18 | self.enable_otp()
|
24 | 19 | self.login_user()
|
25 | 20 |
|
26 |
| - @classmethod |
27 |
| - def get_installed_apps_list(cls, with_phone_number_plugin=True): |
28 |
| - apps = set(settings.INSTALLED_APPS) |
29 |
| - if with_phone_number_plugin: |
30 |
| - apps.add(cls.PHONENUMBER_PLUGIN_NAME) |
31 |
| - else: |
32 |
| - apps.remove(cls.PHONENUMBER_PLUGIN_NAME) |
33 |
| - return list(apps) |
34 |
| - |
35 | 21 | def get_profile(self):
|
36 | 22 | url = reverse('two_factor:profile')
|
37 | 23 | return self.client.get(url)
|
38 | 24 |
|
39 |
| - def test_get_profile_without_phonenumer_plugin_enabled(self): |
40 |
| - apps_list = self.get_installed_apps_list(with_phone_number_plugin=False) |
41 |
| - with override_settings(INSTALLED_APPS=apps_list): |
| 25 | + def test_get_profile_without_phonenumber_plugin_enabled(self): |
| 26 | + without_phonenumber_plugin = [ |
| 27 | + app for app in settings.INSTALLED_APPS if app != 'two_factor.plugins.phonenumber'] |
| 28 | + |
| 29 | + with override_settings(INSTALLED_APPS=without_phonenumber_plugin): |
| 30 | + self.assertFalse(registry.get_method('call')) |
| 31 | + self.assertFalse(registry.get_method('sms')) |
| 32 | + |
42 | 33 | response = self.get_profile()
|
43 |
| - context_keys = set(response.context.keys()) |
44 |
| - self.assertTrue(self.EXPECTED_BASE_CONTEXT_KEYS.issubset(context_keys)) |
45 |
| - # None of the phonenumber related keys are present |
46 |
| - self.assertTrue( |
47 |
| - self.EXPECTED_PHONENUMBER_PLUGIN_ADDITIONAL_KEYS.isdisjoint( |
48 |
| - context_keys |
49 |
| - ) |
50 |
| - ) |
| 34 | + |
| 35 | + self.assertTrue(response.context['available_phone_methods'] == []) |
51 | 36 |
|
52 | 37 | def test_get_profile_with_phonenumer_plugin_enabled(self):
|
53 |
| - apps_list = self.get_installed_apps_list(with_phone_number_plugin=True) |
54 |
| - with override_settings(INSTALLED_APPS=apps_list): |
55 |
| - response = self.get_profile() |
56 |
| - context_keys = set(response.context.keys()) |
57 |
| - expected_keys = ( |
58 |
| - self.EXPECTED_BASE_CONTEXT_KEYS |
59 |
| - | self.EXPECTED_PHONENUMBER_PLUGIN_ADDITIONAL_KEYS |
60 |
| - ) |
61 |
| - self.assertTrue(expected_keys.issubset(context_keys)) |
| 38 | + self.assertTrue(registry.get_method('call')) |
| 39 | + self.assertTrue(registry.get_method('sms')) |
| 40 | + |
| 41 | + response = self.get_profile() |
| 42 | + available_phone_method_codes = {method.code for method in response.context['available_phone_methods']} |
| 43 | + self.assertTrue(available_phone_method_codes == {'call', 'sms'}) |
0 commit comments