def test_token_expiry_is_extended_with_auto_refresh_activated(self): ttl = knox_settings.TOKEN_TTL original_time = datetime(2018, 7, 25, 0, 0, 0, 0) with freeze_time(original_time): instance, token = AuthToken.objects.create(user=self.user) self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token)) five_hours_later = original_time + timedelta(hours=5) with override_settings(REST_KNOX=auto_refresh_knox): reload_module(auth) # necessary to reload settings in core code with freeze_time(five_hours_later): response = self.client.get(root_url, {}, format='json') reload_module(auth) self.assertEqual(response.status_code, 200) # original expiry date was extended: new_expiry = AuthToken.objects.get().expiry expected_expiry = original_time + ttl + timedelta(hours=5) self.assertEqual( new_expiry.replace(tzinfo=None), expected_expiry, "Expiry time should have been extended to {} but is {}.".format( expected_expiry, new_expiry)) # token works after original expiry: after_original_expiry = original_time + ttl + timedelta(hours=1) with freeze_time(after_original_expiry): response = self.client.get(root_url, {}, format='json') self.assertEqual(response.status_code, 200) # token does not work after new expiry: new_expiry = AuthToken.objects.get().expiry with freeze_time(new_expiry + timedelta(seconds=1)): response = self.client.get(root_url, {}, format='json') self.assertEqual(response.status_code, 401)
def test_load_from_disk(self): reload_module(settings) self.assertEqual(0, Page.objects.count()) self.client.post(self.url, { 'picked_files': p('..', 'smuggler_fixtures', 'page_dump.json') }, follow=True) self.assertEqual(1, Page.objects.count())
def local_settings_update(self, changes): """Update local_settings.py with new content created according to the changes parameter. The changes parameter should be a list generated by check_modules()""" if not local_settings: raise SystemError('Missing local_settings.py!') logger.info( 'Creating new local_settings.py with following changes: %s', self._show_changes(changes)) target = inspect.getsourcefile(local_settings) data = self._local_settings_new(changes) backup = inspect.getsource(local_settings) logger.warn('Updating %s', target) self._save_file(target, data) try: reload_module(local_settings) except ImportError as e: logger.exception(e) logger.warn('Restoring %s from backup', target) self._save_file(target, backup) else: # Force reloading of django settings settings._wrapped = empty
def disable(self): super(override_tmpcadir, self).disable() self.mock.stop() self.mock_.stop() self.mockc.stop() shutil.rmtree(self.options['CA_DIR']) reload_module(ca_settings)
def test_ordering_with_nonstandard_ordering_param(self): with override_settings(REST_FRAMEWORK={'ORDERING_PARAM': 'order'}): reload_module(filters) class OrderingListView(generics.ListAPIView): queryset = OrderingFilterModel.objects.all() serializer_class = OrderingFilterSerializer filter_backends = (filters.OrderingFilter, ) ordering = ('title', ) ordering_fields = ('text', ) view = OrderingListView.as_view() request = factory.get('/', {'order': 'text'}) response = view(request) self.assertEqual(response.data, [ { 'id': 1, 'title': 'zyx', 'text': 'abc' }, { 'id': 2, 'title': 'yxw', 'text': 'bcd' }, { 'id': 3, 'title': 'xwv', 'text': 'cde' }, ]) reload_module(filters)
def test_token_expiry_is_extended_with_auto_refresh_activated(self): ttl = knox_settings.TOKEN_TTL original_time = datetime(2018, 7, 25, 0, 0, 0, 0) with freeze_time(original_time): token_key = AuthToken.objects.create(user=self.user) self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token_key)) five_hours_later = original_time + timedelta(hours=5) with override_settings(REST_KNOX=auto_refresh_knox): reload_module(auth) # necessary to reload settings in core code with freeze_time(five_hours_later): response = self.client.get(root_url, {}, format='json') reload_module(auth) self.assertEqual(response.status_code, 200) # original expiry date was extended: new_expiry = AuthToken.objects.get().expires expected_expiry = original_time + ttl + timedelta(hours=5) self.assertEqual(new_expiry.replace(tzinfo=None), expected_expiry, "Expiry time should have been extended to {} but is {}." .format(expected_expiry, new_expiry)) # token works after original expiry: after_original_expiry = original_time + ttl + timedelta(hours=1) with freeze_time(after_original_expiry): response = self.client.get(root_url, {}, format='json') self.assertEqual(response.status_code, 200) # token does not work after new expiry: new_expiry = AuthToken.objects.get().expires with freeze_time(new_expiry + timedelta(seconds=1)): response = self.client.get(root_url, {}, format='json') self.assertEqual(response.status_code, 401)
def test_load_from_disk(self): reload_module(settings) self.assertEqual(0, Page.objects.count()) self.client.post( self.url, {'picked_files': p('..', 'smuggler_fixtures', 'page_dump.json')}, follow=True) self.assertEqual(1, Page.objects.count())
def test_requires_at_least_one_field(self): reload_module(settings) form = ImportForm({}, {}) self.assertFalse(form.is_valid()) self.assertEqual(form.errors, { '__all__': [ 'At least one fixture file needs to be uploaded or selected.' ]})
def test_default_upload_config(self): reload_module(local_settings) from django_drf_filepond import models upload_tmp = models.storage.location LOG.debug('We have a settings value of: %s' % (upload_tmp)) self.assertEqual( upload_tmp, os.path.join(local_settings.BASE_DIR, 'filepond_uploads'))
def tearDownClass(cls): overridden = False if hasattr(cls, '_cls_overridden_context'): overridden = True super(DjangoCATestCase, cls).tearDownClass() if overridden is True: reload_module(ca_settings)
def test_widget_with_default_settings(self): """ Test the widget with default settings which is defined in django settings file """ zoom = 18 map_size = "400x400" thumbnail_size = "100x100" widget_settings = { "GoogleStaticOverlayMapWidget": ( ("zoom", zoom), ("size", map_size), ("thumbnail_size", thumbnail_size), ), "GOOGLE_MAP_API_KEY": GOOGLE_MAP_API_KEY, } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GoogleStaticOverlayMapWidget() settings = widget.map_settings # test `map_settings` method self.assertEqual(settings.get("zoom"), zoom) self.assertEqual(settings.get("size"), map_size) self.assertEqual(settings.get("thumbnail_size"), thumbnail_size) # test render point = Point(-92.9903, 34.7392) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) map_image_url = widget.get_image_url(point) self.assertIn(GOOGLE_MAP_API_KEY, map_image_url) self.assertIn(html_escape(map_image_url), result) # test map_image_url res = urlopen(map_image_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png") # test thumbnail_image_url thumbnail_url = widget.get_thumbnail_url(point) res = urlopen(thumbnail_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png") # test map_image_url with `None` value result = widget.render(name=widget_html_elem_name, value=None, attrs={'id': widget_html_elem_id}) thumbnail_url = widget.get_thumbnail_url(None) self.assertIn(thumbnail_url, result)
def test_upload_config_no_base_dir(self): LOG.debug('******SETTINGS.BASE_DIR: %s' % settings.BASE_DIR) del settings.BASE_DIR reload_module(local_settings) LOG.debug('******LOCAL_SETTINGS.BASE_DIR: %s' % local_settings.BASE_DIR) up_dir = os.path.join(local_settings.BASE_DIR, 'filepond_uploads') LOG.debug('We have a settings value of: %s' % (up_dir)) app_base = os.path.dirname(django_drf_filepond.__file__) self.assertEqual(up_dir, os.path.join(app_base, 'filepond_uploads'))
def setUp(self): # settings and storage modules should be reloaded reload_module(settings) reload_module(storage) self.factory = RequestFactory() self.user = get_user_model().objects.create_user("test_user", "*****@*****.**", "123456") self.request = RequestFactory().get('/') self.request.session = mock.MagicMock() self.request.user = self.user
def setUp(self): # settings and storage modules should be reloaded reload_module(settings) reload_module(storage) self.factory = RequestFactory() self.user = get_user_model().objects.create_user("test_user", "*****@*****.**", "123456") self.request = RequestFactory().get("/") self.request.session = mock.MagicMock() self.request.user = self.user
def test_load_and_save(self): reload_module(settings) f = SimpleUploadedFile( 'uploaded.json', b'[{"pk": 1, "model": "test_app.page",' b' "fields": {"title": "test",' b' "path": "", "body": "test body"}}]') self.client.post(self.url, {'store': True, 'uploads': f}, follow=True) self.assertTrue( os.path.exists(p('..', 'smuggler_fixtures', 'uploaded.json'))) os.unlink(p('..', 'smuggler_fixtures', 'uploaded.json'))
def test_widget_with_default_settings(self): """ Test the widget with default settings which is defined in django settings file """ zoom = 15 default_map_center = [51.5073509, -0.12775829999] widget_settings = { "GooglePointFieldWidget": ( ("zoom", zoom), ("mapCenterLocation", default_map_center), ) } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GooglePointFieldWidget() self.assertEqual(hasattr(widget, "settings"), True) self.assertEqual(hasattr(widget, "settings_namespace"), True) self.assertEqual(isinstance(widget.media, django_forms.Media), True) # test `map_options` method options_str = widget.map_options() options = json.loads(options_str) self.assertEqual(options.get("zoom"), zoom) self.assertEqual(options.get("mapCenterLocation"), default_map_center) # test render with Point object value point = Point(-104.9903, 39.7392, srid=DJANGO_DEFAULT_SRID_VALUE) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) self.assertIn(widget.serialize(point), result) self.assertIn( get_textarea_html(widget_html_elem_id, widget_html_elem_name, point), result) self.assertIn(escapejs(options_str), result) # test render with serialized data value result = widget.render(name=widget_html_elem_name, value=widget.serialize(point)) self.assertIn(widget.serialize(point), result) # test widget `attrs` param w = mw_widgets.GooglePointFieldWidget(attrs={"max-height": 600}) self.assertIn("max-height", w.attrs) # test widget render `attrs` param with `None` value self.assertIn( widget_html_elem_name, w.render(name=widget_html_elem_name, value=None, attrs=None))
def enable(self): self.options['CA_DIR'] = tempfile.mkdtemp() self.mock = patch.object(ca_storage, 'location', self.options['CA_DIR']) self.mock_ = patch.object(ca_storage, '_location', self.options['CA_DIR']) self.mock.start() self.mock_.start() super(override_tmpcadir, self).enable() reload_module(ca_settings)
def test_override_verify_class(self): # Reload so that the settings.BROWSERID_VERIFY_CLASS takes effect. path = 'django_browserid.tests.test_urls.MyVerifyClass' with self.settings(BROWSERID_VERIFY_CLASS=path): reload_module(urls) view = resolve('/browserid/login/', urls).func self.assertEqual(view, MyVerifyClass.as_view()) # Reset urls back to normal. reload_module(urls)
def test_override_verify_class(self): # Reload so that the settings.BROWSERID_VERIFY_CLASS takes effect. path = "django_browserid.tests.test_urls.MyVerifyClass" with self.settings(BROWSERID_VERIFY_CLASS=path): reload_module(urls) view = resolve("/browserid/login/", urls).func self.assertEqual(view, MyVerifyClass.as_view()) # Reset urls back to normal. reload_module(urls)
def test_load_from_disk_and_upload(self): reload_module(settings) f = open(p('..', 'smuggler_fixtures', 'page_dump.json'), mode='rb') response = self.client.post(self.url, { 'uploads': f, 'picked_files': p('..', 'smuggler_fixtures', 'page_dump.json') }, follow=True) response_messages = list(response.context['messages']) self.assertEqual(1, len(response_messages)) self.assertEqual(messages.INFO, response_messages[0].level) self.assertEqual(response_messages[0].message, 'Successfully imported 2 files. Loaded 2 objects.')
def reload_urls(settings, urlconf=None, cms_apps=True): if 'cms.urls' in sys.modules: reload_module(sys.modules['cms.urls']) if urlconf is None: urlconf = settings.ROOT_URLCONF if urlconf in sys.modules: reload_module(sys.modules[urlconf]) clear_url_caches() if cms_apps: from cms.appresolver import clear_app_resolvers, get_app_patterns clear_app_resolvers() get_app_patterns()
def enable(self): super(override_settings, self).enable() try: reload_module(ca_settings) except Exception: # pragma: no cover # If an exception is thrown reloading ca_settings, we disable everything again. # Otherwise an exception in ca_settings will cause overwritten settings to persist # to the next tests. super(override_settings, self).disable() reload_module(ca_settings) raise
def test_invalid_prefix_return_401(self): with override_settings(REST_KNOX=auth_header_prefix_knox): reload_module(auth) token = AuthToken.objects.create(user=self.user) self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token)) failed_response = self.client.get(root_url) self.client.credentials(HTTP_AUTHORIZATION=('Baerer %s' % token)) response = self.client.get(root_url) reload_module(auth) self.assertEqual(failed_response.status_code, 401) self.assertEqual(response.status_code, 200)
def test_invalid_prefix_return_401(self): with override_settings(REST_KNOX=auth_header_prefix_knox): reload_module(auth) instance, token = AuthToken.objects.create(user=self.user) self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token)) failed_response = self.client.get(root_url) self.client.credentials(HTTP_AUTHORIZATION=('Baerer %s' % token)) response = self.client.get(root_url) reload_module(auth) self.assertEqual(failed_response.status_code, 401) self.assertEqual(response.status_code, 200)
def test_load_and_save(self): reload_module(settings) f = SimpleUploadedFile('uploaded.json', b'[{"pk": 1, "model": "test_app.page",' b' "fields": {"title": "test",' b' "path": "", "body": "test body"}}]') self.client.post(self.url, { 'store': True, 'uploads': f }, follow=True) self.assertTrue(os.path.exists( p('..', 'smuggler_fixtures', 'uploaded.json'))) os.unlink(p('..', 'smuggler_fixtures', 'uploaded.json'))
def tearDownClass(cls): overridden = False ca_dir = None if hasattr(cls, '_cls_overridden_context'): overridden = True ca_dir = cls._cls_overridden_context.options.get('CA_DIR') super(DjangoCATestCase, cls).tearDownClass() if overridden is True: reload_module(ca_settings) if ca_dir is not None: shutil.rmtree(ca_dir)
def test_expiry_present_also_when_none(self): with override_settings(REST_KNOX=token_no_expiration_knox): reload_module(views) self.assertEqual(AuthToken.objects.count(), 0) url = reverse('knox_login') self.client.credentials(HTTP_AUTHORIZATION=get_basic_auth_header( self.username, self.password)) response = self.client.post(url, {}, format='json') self.assertEqual(token_no_expiration_knox["TOKEN_TTL"], None) self.assertEqual(response.status_code, 200) self.assertIn('token', response.data) self.assertIn('expiry', response.data) self.assertEqual(response.data['expiry'], None) reload_module(views)
def test_widget_with_default_settings(self): """ Test the widget with default settings which is defined in django settings file """ zoom = 15 default_map_center = [51.5073509, -0.12775829999] widget_settings = { "GooglePointFieldWidget": ( ("zoom", zoom), ("mapCenterLocation", default_map_center), ) } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GooglePointFieldInlineWidget() self.assertEqual(hasattr(widget, "settings"), True) self.assertEqual(hasattr(widget, "settings_namespace"), True) self.assertEqual(isinstance(widget.media, django_forms.Media), True) # test `map_options` method options_str = widget.map_options() options = json.loads(options_str) self.assertEqual(options.get("zoom"), zoom) self.assertEqual(options.get("mapCenterLocation"), default_map_center) # test render with Point object value point = Point(-104.9903, 39.7392) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) self.assertIn(widget.serialize(point), result) self.assertIn(get_textarea_html(widget_html_elem_id, widget_html_elem_name, point), result) # test render with serialized data value result = widget.render(name=widget_html_elem_name, value=widget.serialize(point)) self.assertIn(widget.serialize(point), result) # test widget as a formset empty form result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) self.assertIn(widget.serialize(point), result) inline_widget_data = widget.get_js_widget_data(widget_html_elem_name, widget_html_elem_id) self.assertIn(escapejs(json.dumps(inline_widget_data)), result) # test widget `attrs` param w = mw_widgets.GooglePointFieldInlineWidget(attrs={"max-height": 600}) self.assertIn("max-height", w.attrs) # test widget render `attrs` param with `None` value self.assertIn(widget_html_elem_name, w.render(name=widget_html_elem_name, value=None, attrs=None))
def test_load_from_disk_and_upload(self): reload_module(settings) f = open(p('..', 'smuggler_fixtures', 'page_dump.json'), mode='rb') response = self.client.post( self.url, { 'uploads': f, 'picked_files': p('..', 'smuggler_fixtures', 'page_dump.json') }, follow=True) response_messages = list(response.context['messages']) self.assertEqual(1, len(response_messages)) self.assertEqual(messages.INFO, response_messages[0].level) self.assertEqual(response_messages[0].message, 'Successfully imported 2 files. Loaded 2 objects.')
def test_get_raw_token(self): # Should return None if header lacks correct type keyword with override_api_settings(AUTH_HEADER_TYPES='JWT'): reload_module(authentication) self.assertIsNone(self.backend.get_raw_token(self.fake_header)) reload_module(authentication) # Should raise error if header is malformed with self.assertRaises(AuthenticationFailed): self.backend.get_raw_token(b'Bearer one two') with self.assertRaises(AuthenticationFailed): self.backend.get_raw_token(b'Bearer') # Otherwise, should return unvalidated token in header self.assertEqual(self.backend.get_raw_token(self.fake_header), self.fake_token) # Should return token if header has one of many valid token types with override_api_settings(AUTH_HEADER_TYPES=('JWT', 'Bearer')): reload_module(authentication) self.assertEqual( self.backend.get_raw_token(self.fake_header), self.fake_token, ) reload_module(authentication)
def reload_urlconf(urlconf=None): if 'cms.urls' in sys.modules: reload_module(sys.modules['cms.urls']) if urlconf is None: urlconf = settings.ROOT_URLCONF if urlconf in sys.modules: reload_module(sys.modules[urlconf]) clear_url_caches() try: from cms.appresolver import clear_app_resolvers, get_app_patterns clear_app_resolvers() get_app_patterns() except ImportError: pass
def test_widget_with_custom_settings(self): """ Test the widget with custom settings which is updated by `settings` parameter """ zoom = 18 map_size = "300x300" thumbnail_size = "75x75" widget_settings = { "GOOGLE_MAP_API_KEY": GOOGLE_MAP_API_KEY, } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GoogleStaticOverlayMapWidget( zoom=zoom, size=map_size, thumbnail_size=thumbnail_size) settings = widget.map_settings # test `map_settings` method self.assertEqual(settings.get("zoom"), zoom) self.assertEqual(settings.get("size"), map_size) # test render point = Point(-105.9903, 38.7392) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) map_image_url = widget.get_image_url(point) self.assertIn(GOOGLE_MAP_API_KEY, map_image_url) self.assertIn(html_escape(map_image_url), result) # test map_image_url res = urlopen(map_image_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png") # test thumbnail_image_url thumbnail_url = widget.get_thumbnail_url(point) res = urlopen(thumbnail_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png")
def test_exceed_token_amount_per_user(self): with override_settings(REST_KNOX=token_user_limit_knox): reload_module(views) for _ in range(10): AuthToken.objects.create(user=self.user) url = reverse('knox_login') self.client.credentials(HTTP_AUTHORIZATION=get_basic_auth_header( self.username, self.password)) response = self.client.post(url, {}, format='json') reload_module(views) self.assertEqual(response.status_code, 403) self.assertEqual( response.data, {"error": "Maximum amount of tokens allowed per user exceeded."})
def test_exceed_token_amount_per_user(self): with override_settings(REST_KNOX=token_user_limit_knox): reload_module(views) for _ in range(10): AuthToken.objects.create(user=self.user) url = reverse('knox_login') self.client.credentials( HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password) ) response = self.client.post(url, {}, format='json') reload_module(views) self.assertEqual(response.status_code, 403) self.assertEqual(response.data, {"error": "Maximum amount of tokens allowed per user exceeded."})
def test_login_returns_serialized_token_and_username_field(self): with override_settings(REST_KNOX=user_serializer_knox): reload_module(views) self.assertEqual(AuthToken.objects.count(), 0) url = reverse('knox_login') self.client.credentials(HTTP_AUTHORIZATION=get_basic_auth_header( self.username, self.password)) response = self.client.post(url, {}, format='json') self.assertEqual(user_serializer_knox["USER_SERIALIZER"], UserSerializer) reload_module(views) self.assertEqual(response.status_code, 200) self.assertIn('token', response.data) username_field = self.user.USERNAME_FIELD self.assertIn('user', response.data) self.assertIn(username_field, response.data['user'])
def test_token_expiry_is_not_extended_within_MIN_REFRESH_INTERVAL(self): now = datetime.now() with freeze_time(now): token_key = AuthToken.objects.create(user=self.user) original_expiry = AuthToken.objects.get().expires self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token_key)) in_min_interval = now + timedelta(seconds=knox_settings.MIN_REFRESH_INTERVAL - 10) with override_settings(REST_KNOX=auto_refresh_knox): reload_module(auth) # necessary to reload settings in core code with freeze_time(in_min_interval): response = self.client.get(root_url, {}, format='json') reload_module(auth) # necessary to reload settings in core code self.assertEqual(response.status_code, 200) self.assertEqual(original_expiry, AuthToken.objects.get().expires)
def test_login_returns_serialized_token_and_username_field(self): with override_settings(REST_KNOX=user_serializer_knox): reload_module(views) self.assertEqual(AuthToken.objects.count(), 0) url = reverse('knox_login') self.client.credentials( HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password) ) response = self.client.post(url, {}, format='json') self.assertEqual(user_serializer_knox["USER_SERIALIZER"], UserSerializer) reload_module(views) self.assertEqual(response.status_code, 200) self.assertIn('token', response.data) username_field = self.user.USERNAME_FIELD self.assertIn('user', response.data) self.assertIn(username_field, response.data['user'])
def test_widget_with_custom_settings(self): """ Test the widget with custom settings which is updated by `settings` parameter """ zoom = 18 map_size = "300x300" thumbnail_size = "75x75" widget_settings = { "GOOGLE_MAP_API_KEY": GOOGLE_MAP_API_KEY, } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GoogleStaticOverlayMapWidget(zoom=zoom, size=map_size, thumbnail_size=thumbnail_size) settings = widget.map_settings # test `map_settings` method self.assertEqual(settings.get("zoom"), zoom) self.assertEqual(settings.get("size"), map_size) # test render point = Point(-105.9903, 38.7392) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) map_image_url = widget.get_image_url(point) self.assertIn(GOOGLE_MAP_API_KEY, map_image_url) self.assertIn(html_escape(map_image_url), result) # test map_image_url res = urlopen(map_image_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png") # test thumbnail_image_url thumbnail_url = widget.get_thumbnail_url(point) res = urlopen(thumbnail_url) self.assertEqual(res.getcode(), 200) if hasattr(res.info(), 'type'): self.assertEqual(res.info().type, "image/png") else: self.assertEqual(res.info().get_content_type(), "image/png")
def test_not_modified_auto(self): fake_defs = { 'non_managed.legacy': { 'Meta': { 'object_name': 'Legacy', 'db_table': "'legacy_table'", 'managed': 'False' }, 'id': ('django.db.models.fields.AutoField', [], { 'primary_key': 'True' }), 'name': ('django.db.models.fields.CharField', [], { 'max_length': '10', 'null': 'True' }), #'size': ('django.db.models.fields.IntegerField', [], {}) # The "change" is the addition of this field } } class InitialMigration(SchemaMigration): "Serves as fake previous migration" def forwards(self, orm): pass def backwards(self, orm): pass models = fake_defs complete_apps = ['non_managed'] from non_managed import models as dummy_import_to_force_loading_models # TODO: Does needing this indicate a bug in MokeyPatcher? reload_module(dummy_import_to_force_loading_models) # really force... migrations = Migrations("non_managed") initial_orm = FakeORM(InitialMigration, "non_managed") changes = AutoChanges(migrations=migrations, old_defs=fake_defs, old_orm=initial_orm, new_defs=self.full_defs) change_list = changes.get_changes() if list(change_list): self.fail("Auto migration changes table for non-managed model")
def test_token_expiry_is_not_extended_within_MIN_REFRESH_INTERVAL(self): now = datetime.now() with freeze_time(now): instance, token = AuthToken.objects.create(user=self.user) original_expiry = AuthToken.objects.get().expiry self.client.credentials(HTTP_AUTHORIZATION=('Token %s' % token)) in_min_interval = now + timedelta( seconds=knox_settings.MIN_REFRESH_INTERVAL - 10) with override_settings(REST_KNOX=auto_refresh_knox): reload_module(auth) # necessary to reload settings in core code with freeze_time(in_min_interval): response = self.client.get(root_url, {}, format='json') reload_module(auth) # necessary to reload settings in core code self.assertEqual(response.status_code, 200) self.assertEqual(original_expiry, AuthToken.objects.get().expiry)
def test_search_with_nonstandard_search_param(self): with override_settings(REST_FRAMEWORK={"SEARCH_PARAM": "query"}): reload_module(filters) class SearchListView(generics.ListAPIView): queryset = SearchFilterModel.objects.all() serializer_class = SearchFilterSerializer filter_backends = (filters.SearchFilter,) search_fields = ("title", "text") view = SearchListView.as_view() request = factory.get("/", {"query": "b"}) response = view(request) self.assertEqual( response.data, [{"id": 1, "title": "z", "text": "abc"}, {"id": 2, "title": "zz", "text": "bcd"}] ) reload_module(filters)
def test_search_with_nonstandard_search_param(self): with override_settings(REST_FRAMEWORK={'SEARCH_PARAM': 'query'}): reload_module(filters) class SearchListView(generics.ListAPIView): queryset = SearchFilterModel.objects.all() serializer_class = SearchFilterSerializer filter_backends = (filters.SearchFilter,) search_fields = ('title', 'text') view = SearchListView.as_view() request = factory.get('/', {'query': 'b'}) response = view(request) assert response.data == [ {'id': 1, 'title': 'z', 'text': 'abc'}, {'id': 2, 'title': 'zz', 'text': 'bcd'} ] reload_module(filters)
def test_does_not_exceed_on_expired_keys(self): with override_settings(REST_KNOX=token_user_limit_knox): reload_module(views) for _ in range(9): AuthToken.objects.create(user=self.user) AuthToken.objects.create(user=self.user, expires=timedelta(seconds=0)) # now 10 keys, but only 9 valid so request should succeed. url = reverse('knox_login') self.client.credentials( HTTP_AUTHORIZATION=get_basic_auth_header(self.username, self.password) ) response = self.client.post(url, {}, format='json') failed_response = self.client.post(url, {}, format='json') reload_module(views) self.assertEqual(response.status_code, 200) self.assertIn('token', response.data) self.assertEqual(failed_response.status_code, 403) self.assertEqual(failed_response.data, {"error": "Maximum amount of tokens allowed per user exceeded."})
def test_login_returns_configured_expiry_datetime_format(self): with override_settings(REST_KNOX=expiry_datetime_format_knox): reload_module(views) self.assertEqual(AuthToken.objects.count(), 0) url = reverse('knox_login') self.client.credentials(HTTP_AUTHORIZATION=get_basic_auth_header( self.username, self.password)) response = self.client.post(url, {}, format='json') self.assertEqual( expiry_datetime_format_knox["EXPIRY_DATETIME_FORMAT"], EXPIRY_DATETIME_FORMAT) reload_module(views) self.assertEqual(response.status_code, 200) self.assertIn('token', response.data) self.assertNotIn('user', response.data) self.assertEqual( response.data['expiry'], DateTimeField(format=EXPIRY_DATETIME_FORMAT).to_representation( AuthToken.objects.first().expiry))
def test_ordering_with_nonstandard_ordering_param(self): with override_settings(REST_FRAMEWORK={'ORDERING_PARAM': 'order'}): reload_module(filters) class OrderingListView(generics.ListAPIView): queryset = OrderingFilterModel.objects.all() serializer_class = OrderingFilterSerializer filter_backends = (filters.OrderingFilter,) ordering = ('title',) ordering_fields = ('text',) view = OrderingListView.as_view() request = factory.get('/', {'order': 'text'}) response = view(request) assert response.data == [ {'id': 1, 'title': 'zyx', 'text': 'abc'}, {'id': 2, 'title': 'yxw', 'text': 'bcd'}, {'id': 3, 'title': 'xwv', 'text': 'cde'}, ] reload_module(filters)
def test_not_modified_auto(self): fake_defs = { 'non_managed.legacy': { 'Meta': {'object_name': 'Legacy', 'db_table': "'legacy_table'", 'managed': 'False'}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True'}), #'size': ('django.db.models.fields.IntegerField', [], {}) # The "change" is the addition of this field } } class InitialMigration(SchemaMigration): "Serves as fake previous migration" def forwards(self, orm): pass def backwards(self, orm): pass models = fake_defs complete_apps = ['non_managed'] from non_managed import models as dummy_import_to_force_loading_models # TODO: Does needing this indicate a bug in MokeyPatcher? reload_module(dummy_import_to_force_loading_models) # really force... migrations = Migrations("non_managed") initial_orm = FakeORM(InitialMigration, "non_managed") changes = AutoChanges( migrations = migrations, old_defs = fake_defs, old_orm = initial_orm, new_defs = self.full_defs ) change_list = changes.get_changes() if list(change_list): self.fail("Auto migration changes table for non-managed model")
def test_widget_with_custom_settings(self): """ Test the widget with custom settings which is updated by `settings` parameter """ zoom = 9 map_size = "100x100" widget_settings = { "GoogleStaticMapWidget": ( ("zoom", zoom), ("size", map_size), ), "GOOGLE_MAP_API_KEY": GOOGLE_MAP_API_KEY, } with override_settings(MAP_WIDGETS=widget_settings): reload_module(mw_widgets) widget = mw_widgets.GoogleStaticMapWidget(zoom=zoom, size=map_size) settings = widget.map_settings # test `map_settings` method self.assertEqual(settings.get("zoom"), zoom) self.assertEqual(settings.get("size"), map_size) # test render point = Point(-105.9903, 38.7392) widget_html_elem_id = "id_location" widget_html_elem_name = "location" result = widget.render(name=widget_html_elem_name, value=point, attrs={'id': widget_html_elem_id}) map_image_url = widget.get_image_url(point) self.assertIn(GOOGLE_MAP_API_KEY, map_image_url) self.assertIn(html_escape(map_image_url), result) # test map_image_url res = urllib.urlopen(map_image_url) self.assertEqual(res.getcode(), 200) self.assertEqual(res.info().type, "image/png")
def test_ordering_with_nonstandard_ordering_param(self): with override_settings(REST_FRAMEWORK={"ORDERING_PARAM": "order"}): reload_module(filters) class OrderingListView(generics.ListAPIView): queryset = OrderingFilterModel.objects.all() serializer_class = OrderingFilterSerializer filter_backends = (filters.OrderingFilter,) ordering = ("title",) ordering_fields = ("text",) view = OrderingListView.as_view() request = factory.get("/", {"order": "text"}) response = view(request) self.assertEqual( response.data, [ {"id": 1, "title": "zyx", "text": "abc"}, {"id": 2, "title": "yxw", "text": "bcd"}, {"id": 3, "title": "xwv", "text": "cde"}, ], ) reload_module(filters)
def setUp(self): reload_module(settings) reload_module(storage) self.backend = settings.stored_messages_settings.STORAGE_BACKEND() super(BackendBaseTest, self).setUp()
def tearDown(self): reload_module(settings)
def save_options(self, test_func): super(override_settings, self).save_options(test_func) reload_module(ca_settings)
def test_picked_files(self): reload_module(settings) form = ImportForm() self.assertIsInstance(form['picked_files'].field, FilePathField)
def test_store_checkbox(self): reload_module(settings) form = ImportForm() self.assertIsInstance(form['store'].field, BooleanField)
def disable(self): super(override_settings, self).disable() reload_module(ca_settings)