Commit a62a16cc by Clinton Blackburn Committed by GitHub

Merge pull request #261 from edx/clintonb/code-cleanup

Code Cleanup
parents 77ac05a8 87ba7eea
...@@ -11,12 +11,11 @@ from course_discovery.apps.core.tests.utils import mock_api_callback, mock_jpeg_ ...@@ -11,12 +11,11 @@ from course_discovery.apps.core.tests.utils import mock_api_callback, mock_jpeg_
from course_discovery.apps.course_metadata.data_loaders.api import ( from course_discovery.apps.course_metadata.data_loaders.api import (
OrganizationsApiDataLoader, CoursesApiDataLoader, EcommerceApiDataLoader, AbstractDataLoader, ProgramsApiDataLoader OrganizationsApiDataLoader, CoursesApiDataLoader, EcommerceApiDataLoader, AbstractDataLoader, ProgramsApiDataLoader
) )
from course_discovery.apps.course_metadata.data_loaders.tests import JSON, JPEG from course_discovery.apps.course_metadata.data_loaders.tests import JSON, JPEG, mock_data
from course_discovery.apps.course_metadata.data_loaders.tests.mixins import ApiClientTestMixin, DataLoaderTestMixin from course_discovery.apps.course_metadata.data_loaders.tests.mixins import ApiClientTestMixin, DataLoaderTestMixin
from course_discovery.apps.course_metadata.models import ( from course_discovery.apps.course_metadata.models import (
Course, CourseRun, Organization, Seat, Program, ProgramType, Course, CourseRun, Organization, Seat, Program, ProgramType,
) )
from course_discovery.apps.course_metadata.tests import mock_data
from course_discovery.apps.course_metadata.tests.factories import ( from course_discovery.apps.course_metadata.tests.factories import (
CourseRunFactory, SeatFactory, ImageFactory, VideoFactory, OrganizationFactory, CourseFactory, CourseRunFactory, SeatFactory, ImageFactory, VideoFactory, OrganizationFactory, CourseFactory,
) )
......
...@@ -12,13 +12,12 @@ from course_discovery.apps.course_metadata.data_loaders.marketing_site import ( ...@@ -12,13 +12,12 @@ from course_discovery.apps.course_metadata.data_loaders.marketing_site import (
DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader, DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader,
SponsorMarketingSiteDataLoader, PersonMarketingSiteDataLoader, SponsorMarketingSiteDataLoader, PersonMarketingSiteDataLoader,
) )
from course_discovery.apps.course_metadata.data_loaders.tests import JSON from course_discovery.apps.course_metadata.data_loaders.tests import JSON, mock_data
from course_discovery.apps.course_metadata.data_loaders.tests.mixins import ApiClientTestMixin, DataLoaderTestMixin from course_discovery.apps.course_metadata.data_loaders.tests.mixins import ApiClientTestMixin, DataLoaderTestMixin
from course_discovery.apps.course_metadata.models import ( from course_discovery.apps.course_metadata.models import (
Course, CourseOrganization, CourseRun, Organization, Subject, Program, Video, Person, Course, CourseOrganization, CourseRun, Organization, Subject, Program, Video, Person,
) )
from course_discovery.apps.course_metadata.tests import mock_data from course_discovery.apps.course_metadata.tests import factories
from course_discovery.apps.course_metadata.tests.factories import ProgramFactory, OrganizationFactory
from course_discovery.apps.ietf_language_tags.models import LanguageTag from course_discovery.apps.ietf_language_tags.models import LanguageTag
ENGLISH_LANGUAGE_TAG = LanguageTag(code='en-us', name='English - United States') ENGLISH_LANGUAGE_TAG = LanguageTag(code='en-us', name='English - United States')
...@@ -212,6 +211,8 @@ class DrupalApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCase ...@@ -212,6 +211,8 @@ class DrupalApiDataLoaderTests(ApiClientTestMixin, DataLoaderTestMixin, TestCase
class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin): class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin):
mocked_data = []
@property @property
def api_url(self): def api_url(self):
return self.partner.marketing_site_url_root return self.partner.marketing_site_url_root
...@@ -241,6 +242,19 @@ class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin): ...@@ -241,6 +242,19 @@ class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin):
return request_callback return request_callback
def mock_api(self):
bodies = self.mocked_data
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies
def mock_login_response(self, failure=False): def mock_login_response(self, failure=False):
url = self.api_url + 'user' url = self.api_url + 'user'
landing_url = '{base}users/{username}'.format(base=self.api_url, landing_url = '{base}users/{username}'.format(base=self.api_url,
...@@ -293,24 +307,16 @@ class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin): ...@@ -293,24 +307,16 @@ class AbstractMarketingSiteDataLoaderTestMixin(DataLoaderTestMixin):
class XSeriesMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class XSeriesMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = XSeriesMarketingSiteDataLoader loader_class = XSeriesMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_XSERIES_BODIES
def create_mock_programs(self, programs): def create_mock_programs(self, programs):
for program in programs: for program in programs:
marketing_slug = program['url'].split('/')[-1] marketing_slug = program['url'].split('/')[-1]
ProgramFactory(marketing_slug=marketing_slug, partner=self.partner) factories.ProgramFactory(marketing_slug=marketing_slug, partner=self.partner)
def mock_api(self): def mock_api(self):
bodies = mock_data.MARKETING_SITE_API_XSERIES_BODIES bodies = super().mock_api()
self.create_mock_programs(bodies) self.create_mock_programs(bodies)
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies return bodies
def assert_program_loaded(self, data): def assert_program_loaded(self, data):
...@@ -362,19 +368,7 @@ class XSeriesMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix ...@@ -362,19 +368,7 @@ class XSeriesMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix
class SubjectMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class SubjectMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = SubjectMarketingSiteDataLoader loader_class = SubjectMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_SUBJECT_BODIES
def mock_api(self):
bodies = mock_data.MARKETING_SITE_API_SUBJECT_BODIES
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies
def assert_subject_loaded(self, data): def assert_subject_loaded(self, data):
slug = data['field_subject_url_slug'] slug = data['field_subject_url_slug']
...@@ -404,19 +398,7 @@ class SubjectMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix ...@@ -404,19 +398,7 @@ class SubjectMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix
class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = SchoolMarketingSiteDataLoader loader_class = SchoolMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_SCHOOL_BODIES
def mock_api(self):
bodies = mock_data.MARKETING_SITE_API_SCHOOL_BODIES
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies
def assert_school_loaded(self, data): def assert_school_loaded(self, data):
key = data['title'] key = data['title']
...@@ -448,19 +430,7 @@ class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -448,19 +430,7 @@ class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
class SponsorMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class SponsorMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = SponsorMarketingSiteDataLoader loader_class = SponsorMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_SPONSOR_BODIES
def mock_api(self):
bodies = mock_data.MARKETING_SITE_API_SPONSOR_BODIES
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies
def assert_sponsor_loaded(self, data): def assert_sponsor_loaded(self, data):
uuid = data['uuid'] uuid = data['uuid']
...@@ -494,19 +464,7 @@ class SponsorMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix ...@@ -494,19 +464,7 @@ class SponsorMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMix
class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = PersonMarketingSiteDataLoader loader_class = PersonMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_PERSON_BODIES
def mock_api(self):
bodies = mock_data.MARKETING_SITE_API_PERSON_BODIES
url = self.api_url + 'node.json'
responses.add_callback(
responses.GET,
url,
callback=self.mock_api_callback(url, bodies),
content_type=JSON
)
return bodies
def assert_person_loaded(self, data): def assert_person_loaded(self, data):
uuid = data['uuid'] uuid = data['uuid']
...@@ -537,7 +495,7 @@ class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -537,7 +495,7 @@ class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
def test_ingest(self): def test_ingest(self):
self.mock_login_response() self.mock_login_response()
people = self.mock_api() people = self.mock_api()
OrganizationFactory(name='MIT') factories.OrganizationFactory(name='MIT')
self.loader.ingest() self.loader.ingest()
......
...@@ -13,8 +13,8 @@ from course_discovery.apps.course_metadata.data_loaders.api import ( ...@@ -13,8 +13,8 @@ from course_discovery.apps.course_metadata.data_loaders.api import (
from course_discovery.apps.course_metadata.data_loaders.marketing_site import ( from course_discovery.apps.course_metadata.data_loaders.marketing_site import (
DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, DrupalApiDataLoader, XSeriesMarketingSiteDataLoader,
) )
from course_discovery.apps.course_metadata.data_loaders.tests import mock_data
from course_discovery.apps.course_metadata.models import Course, CourseRun, Organization, Program from course_discovery.apps.course_metadata.models import Course, CourseRun, Organization, Program
from course_discovery.apps.course_metadata.tests import mock_data
ACCESS_TOKEN = 'secret' ACCESS_TOKEN = 'secret'
JSON = 'application/json' JSON = 'application/json'
......
...@@ -12,6 +12,13 @@ from course_discovery.apps.ietf_language_tags.models import LanguageTag ...@@ -12,6 +12,13 @@ from course_discovery.apps.ietf_language_tags.models import LanguageTag
# pylint: disable=no-member, unused-argument # pylint: disable=no-member, unused-argument
def add_m2m_data(m2m_relation, data):
""" Helper function to enable factories to easily associate many-to-many data with created objects. """
if data:
for datum in data:
m2m_relation.add(datum)
class AbstractMediaModelFactory(factory.DjangoModelFactory): class AbstractMediaModelFactory(factory.DjangoModelFactory):
src = FuzzyURL() src = FuzzyURL()
description = FuzzyText() description = FuzzyText()
...@@ -83,13 +90,8 @@ class CourseFactory(factory.DjangoModelFactory): ...@@ -83,13 +90,8 @@ class CourseFactory(factory.DjangoModelFactory):
@factory.post_generation @factory.post_generation
def subjects(self, create, extracted, **kwargs): def subjects(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.subjects, extracted)
return
if extracted:
for subject in extracted:
self.subjects.add(subject)
class CourseRunFactory(factory.DjangoModelFactory): class CourseRunFactory(factory.DjangoModelFactory):
...@@ -116,16 +118,12 @@ class CourseRunFactory(factory.DjangoModelFactory): ...@@ -116,16 +118,12 @@ class CourseRunFactory(factory.DjangoModelFactory):
@factory.post_generation @factory.post_generation
def transcript_languages(self, create, extracted, **kwargs): def transcript_languages(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.transcript_languages, extracted)
return
if extracted:
for transcript_language in extracted:
self.transcript_languages.add(transcript_language)
class OrganizationFactory(factory.DjangoModelFactory): class OrganizationFactory(factory.DjangoModelFactory):
uuid = factory.LazyFunction(uuid4)
key = FuzzyText(prefix='Org.fake/') key = FuzzyText(prefix='Org.fake/')
name = FuzzyText() name = FuzzyText()
description = FuzzyText() description = FuzzyText()
...@@ -167,13 +165,8 @@ class ProgramTypeFactory(factory.django.DjangoModelFactory): ...@@ -167,13 +165,8 @@ class ProgramTypeFactory(factory.django.DjangoModelFactory):
@factory.post_generation @factory.post_generation
def applicable_seat_types(self, create, extracted, **kwargs): def applicable_seat_types(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.applicable_seat_types, extracted)
return
if extracted:
for seat_type in extracted:
self.applicable_seat_types.add(seat_type)
class ProgramFactory(factory.django.DjangoModelFactory): class ProgramFactory(factory.django.DjangoModelFactory):
...@@ -192,34 +185,18 @@ class ProgramFactory(factory.django.DjangoModelFactory): ...@@ -192,34 +185,18 @@ class ProgramFactory(factory.django.DjangoModelFactory):
@factory.post_generation @factory.post_generation
def courses(self, create, extracted, **kwargs): def courses(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.courses, extracted)
return
if extracted:
# Use the passed in list of courses
for course in extracted:
self.courses.add(course)
@factory.post_generation @factory.post_generation
def excluded_course_runs(self, create, extracted, **kwargs): def excluded_course_runs(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.excluded_course_runs, extracted)
return
if extracted:
for course_run in extracted:
self.excluded_course_runs.add(course_run)
@factory.post_generation @factory.post_generation
def authoring_organizations(self, create, extracted, **kwargs): def authoring_organizations(self, create, extracted, **kwargs):
if not create: # pragma: no cover if create: # pragma: no cover
# Simple build, do nothing. add_m2m_data(self.authoring_organizations, extracted)
return
if extracted:
for organization in extracted:
self.authoring_organizations.add(organization)
class AbstractSocialNetworkModelFactory(factory.DjangoModelFactory): class AbstractSocialNetworkModelFactory(factory.DjangoModelFactory):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment