mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Added test for contenttype redirect with m2m objects.
Thanks carltongibson for the test logic.
This commit is contained in:
		| @@ -128,3 +128,11 @@ class ModelWithNullFKToSite(models.Model): | |||||||
|  |  | ||||||
|     def get_absolute_url(self): |     def get_absolute_url(self): | ||||||
|         return '/title/%s/' % quote(self.title) |         return '/title/%s/' % quote(self.title) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ModelWithM2MToSite(models.Model): | ||||||
|  |     title = models.CharField(max_length=200) | ||||||
|  |     sites = models.ManyToManyField(Site) | ||||||
|  |  | ||||||
|  |     def get_absolute_url(self): | ||||||
|  |         return '/title/%s/' % quote(self.title) | ||||||
|   | |||||||
| @@ -10,7 +10,8 @@ from django.test import TestCase, override_settings | |||||||
|  |  | ||||||
| from .models import ( | from .models import ( | ||||||
|     Article, Author, FooWithBrokenAbsoluteUrl, FooWithoutUrl, FooWithUrl, |     Article, Author, FooWithBrokenAbsoluteUrl, FooWithoutUrl, FooWithUrl, | ||||||
|     ModelWithNullFKToSite, SchemeIncludedURL, Site as MockSite, |     ModelWithM2MToSite, ModelWithNullFKToSite, SchemeIncludedURL, | ||||||
|  |     Site as MockSite, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -107,6 +108,36 @@ class ContentTypesViewsTests(TestCase): | |||||||
|         response = self.client.get(url) |         response = self.client.get(url) | ||||||
|         self.assertRedirects(response, '%s' % obj.get_absolute_url(), fetch_redirect_response=False) |         self.assertRedirects(response, '%s' % obj.get_absolute_url(), fetch_redirect_response=False) | ||||||
|  |  | ||||||
|  |     @mock.patch('django.apps.apps.get_model') | ||||||
|  |     def test_shortcut_view_with_site_m2m(self, get_model): | ||||||
|  |         """ | ||||||
|  |         When the object has a ManyToManyField to Site, redirect to the | ||||||
|  |         domain of the first site found in the m2m relationship. | ||||||
|  |         """ | ||||||
|  |         get_model.side_effect = lambda *args, **kwargs: MockSite if args[0] == 'sites.Site' else ModelWithM2MToSite | ||||||
|  |  | ||||||
|  |         # get_current_site() will lookup a Site object, so these must match the | ||||||
|  |         # domains in the MockSite model. | ||||||
|  |         Site.objects.bulk_create([ | ||||||
|  |             Site(domain='example2.com', name='example2.com'), | ||||||
|  |             Site(domain='example3.com', name='example3.com'), | ||||||
|  |         ]) | ||||||
|  |         MockSite.objects.bulk_create([ | ||||||
|  |             MockSite(pk=1, domain='example1.com'), | ||||||
|  |             MockSite(pk=2, domain='example2.com'), | ||||||
|  |             MockSite(pk=3, domain='example3.com'), | ||||||
|  |         ]) | ||||||
|  |         ct = ContentType.objects.get_for_model(ModelWithM2MToSite) | ||||||
|  |         site_3_obj = ModelWithM2MToSite.objects.create(title='Not Linked to Current Site') | ||||||
|  |         site_3_obj.sites.add(MockSite.objects.get(pk=3)) | ||||||
|  |         expected_url = 'http://example3.com%s' % site_3_obj.get_absolute_url() | ||||||
|  |  | ||||||
|  |         with self.settings(SITE_ID=2): | ||||||
|  |             # Redirects to the domain of the first Site found in the m2m | ||||||
|  |             # relationship (ordering is arbitrary). | ||||||
|  |             response = self.client.get('/shortcut/%s/%s/' % (ct.pk, site_3_obj.pk)) | ||||||
|  |             self.assertRedirects(response, expected_url, fetch_redirect_response=False) | ||||||
|  |  | ||||||
|  |  | ||||||
| class ShortcutViewTests(TestCase): | class ShortcutViewTests(TestCase): | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user