From 1d1952c8d3b98a4b440a9ae14d4c86af06bb49db Mon Sep 17 00:00:00 2001 From: Douglas Hall Date: Thu, 22 Sep 2016 17:08:48 -0400 Subject: [PATCH] Added SiteMixin for tests that need to test Site specific functionality --- common/djangoapps/edxmako/tests.py | 1 - lms/djangoapps/branding/tests/test_views.py | 41 ++++++++++++++++ .../tests/test_configuration_overrides.py | 26 +++------- .../site_configuration/tests/factories.py | 12 +++++ .../site_configuration/tests/mixins.py | 47 +++++++++++++++++++ 5 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 openedx/core/djangoapps/site_configuration/tests/mixins.py diff --git a/common/djangoapps/edxmako/tests.py b/common/djangoapps/edxmako/tests.py index 3172c84cda..4e945b5af3 100644 --- a/common/djangoapps/edxmako/tests.py +++ b/common/djangoapps/edxmako/tests.py @@ -1,4 +1,3 @@ - from mock import patch, Mock import unittest import ddt diff --git a/lms/djangoapps/branding/tests/test_views.py b/lms/djangoapps/branding/tests/test_views.py index 991f528809..5364a0f82b 100644 --- a/lms/djangoapps/branding/tests/test_views.py +++ b/lms/djangoapps/branding/tests/test_views.py @@ -10,7 +10,9 @@ import mock import ddt from config_models.models import cache from branding.models import BrandingApiConfig +from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme_context +from student.tests.factories import UserFactory @ddt.ddt @@ -227,3 +229,42 @@ class TestFooter(TestCase): ) return self.client.get(url, HTTP_ACCEPT=accepts) + + +class TestIndex(SiteMixin, TestCase): + """ Test the index view """ + + def setUp(self): + """ Set up a user """ + super(TestIndex, self).setUp() + + patcher = mock.patch("student.models.tracker") + self.mock_tracker = patcher.start() + self.user = UserFactory.create() + self.user.set_password("password") + self.user.save() + + def test_index_does_not_redirect_without_site_override(self): + """ Test index view does not redirect if MKTG_URLS['ROOT'] is not set """ + response = self.client.get(reverse("root")) + self.assertEqual(response.status_code, 200) + + def test_index_redirects_to_marketing_site_with_site_override(self): + """ Test index view redirects if MKTG_URLS['ROOT'] is set in SiteConfiguration """ + self.use_site(self.site_other) + response = self.client.get(reverse("root")) + self.assertRedirects( + response, + self.site_configuration_other.values["MKTG_URLS"]["ROOT"], + fetch_redirect_response=False + ) + + def test_header_logo_links_to_marketing_site_with_site_override(self): + """ + Test marketing site root link is included on dashboard page + if MKTG_URLS['ROOT'] is set in SiteConfiguration + """ + self.use_site(self.site_other) + self.client.login(username=self.user.username, password="password") + response = self.client.get(reverse("dashboard")) + self.assertIn(self.site_configuration_other.values["MKTG_URLS"]["ROOT"], response.content) diff --git a/lms/djangoapps/shoppingcart/tests/test_configuration_overrides.py b/lms/djangoapps/shoppingcart/tests/test_configuration_overrides.py index 5025c56450..da85df5b66 100644 --- a/lms/djangoapps/shoppingcart/tests/test_configuration_overrides.py +++ b/lms/djangoapps/shoppingcart/tests/test_configuration_overrides.py @@ -2,8 +2,6 @@ """ Dashboard with Shopping Cart History tests with configuration overrides. """ -import mock - from django.core.urlresolvers import reverse from mock import patch @@ -15,24 +13,11 @@ from shoppingcart.models import ( ) from student.tests.factories import UserFactory from course_modes.models import CourseMode - - -def fake_all_orgs(default=None): # pylint: disable=unused-argument - """ - Method to return fake orgs, - """ - return set(['fakeX', 'fooX']) - - -def fake_site(name, default=None): # pylint: disable=unused-argument - """ - Method to return a fake site name. - """ - return 'fakeX' +from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin @patch.dict('django.conf.settings.FEATURES', {'ENABLE_PAID_COURSE_REGISTRATION': True}) -class TestOrderHistoryOnSiteDashboard(ModuleStoreTestCase): +class TestOrderHistoryOnSiteDashboard(SiteMixin, ModuleStoreTestCase): """ Test for dashboard order history site configuration overrides. """ @@ -76,7 +61,7 @@ class TestOrderHistoryOnSiteDashboard(ModuleStoreTestCase): self.foox_site_order_id = cart.id # Third Order with course not attributed to any site. - course3 = CourseFactory.create(org='otherorg', number='777', display_name='otherorg Course') + course3 = CourseFactory.create(org='fakeOtherX', number='777', display_name='fakeOtherX Course') course3_key = course3.id course3_mode = CourseMode(course_id=course3.id, mode_slug="honor", @@ -90,7 +75,7 @@ class TestOrderHistoryOnSiteDashboard(ModuleStoreTestCase): self.order_id = cart.id # Fourth Order with course not attributed to any site but with a CertificateItem - course4 = CourseFactory.create(org='otherorg', number='888') + course4 = CourseFactory.create(org='fakeOtherX', number='888') course4_key = course4.id course4_mode = CourseMode(course_id=course4.id, mode_slug="verified", @@ -104,7 +89,7 @@ class TestOrderHistoryOnSiteDashboard(ModuleStoreTestCase): self.certificate_order_id = cart.id # Fifth Order with course not attributed to any site but with a Donation - course5 = CourseFactory.create(org='otherorg', number='999') + course5 = CourseFactory.create(org='fakeOtherX', number='999') course5_key = course5.id cart = Order.get_cart_for_user(self.user) @@ -135,6 +120,7 @@ class TestOrderHistoryOnSiteDashboard(ModuleStoreTestCase): self.assertNotIn(receipt_url_donation, content) def test_shows_orders_with_non_site_courses_only_when_no_configuration_override_exists(self): + self.use_site(self.site_other) self.client.login(username=self.user.username, password="password") response = self.client.get(reverse("dashboard")) receipt_url_course = reverse('shoppingcart.views.show_receipt', kwargs={'ordernum': self.fakex_site_order_id}) diff --git a/openedx/core/djangoapps/site_configuration/tests/factories.py b/openedx/core/djangoapps/site_configuration/tests/factories.py index 7a5dee1ea9..1e2cfd6359 100644 --- a/openedx/core/djangoapps/site_configuration/tests/factories.py +++ b/openedx/core/djangoapps/site_configuration/tests/factories.py @@ -1,6 +1,7 @@ """ Model factories for unit testing views or models. """ +from django.contrib.sites.models import Site from factory.django import DjangoModelFactory from openedx.core.djangoapps.site_configuration.models import SiteConfiguration @@ -15,3 +16,14 @@ class SiteConfigurationFactory(DjangoModelFactory): values = {} enabled = True + + +class SiteFactory(DjangoModelFactory): + """ + Factory class for Site model + """ + class Meta(object): + model = Site + + domain = 'testserver.fake' + name = 'testserver.fake' diff --git a/openedx/core/djangoapps/site_configuration/tests/mixins.py b/openedx/core/djangoapps/site_configuration/tests/mixins.py new file mode 100644 index 0000000000..6ee2470636 --- /dev/null +++ b/openedx/core/djangoapps/site_configuration/tests/mixins.py @@ -0,0 +1,47 @@ +""" +Mixins for TestCase classes that need to account for multiple sites +""" +from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory, SiteFactory + + +class SiteMixin(object): + """ + Mixin for setting up Site framework models + """ + def setUp(self): + super(SiteMixin, self).setUp() + + self.site = SiteFactory.create() + self.site_configuration = SiteConfigurationFactory.create( + site=self.site, + values={ + "SITE_NAME": self.site.domain, + "course_org_filter": "fakeX", + } + ) + + self.site_other = SiteFactory.create( + domain='testserver.fakeother', + name='testserver.fakeother' + ) + self.site_configuration_other = SiteConfigurationFactory.create( + site=self.site_other, + values={ + "SITE_NAME": self.site_other.domain, + "course_org_filter": "fakeOtherX", + "ENABLE_MKTG_SITE": True, + "MKTG_URLS": { + "ROOT": "https://marketing.fakeother", + "ABOUT": "/fake-about" + } + } + ) + + # Initialize client with default site domain + self.use_site(self.site) + + def use_site(self, site): + """ + # Initializes the test client with the domain of the given site + """ + self.client = self.client_class(SERVER_NAME=site.domain)