Commit 48dd3f1a by Clinton Blackburn Committed by Clinton Blackburn

Added sponsor (Organization) data loader

ECOM-5192
parent ea25f9b3
...@@ -342,3 +342,27 @@ class SchoolMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -342,3 +342,27 @@ class SchoolMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
tags.append(tag) tags.append(tag)
school.tags.set(*tags, clear=True) school.tags.set(*tags, clear=True)
class SponsorMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
@property
def node_type(self):
return 'sponsorer'
def process_node(self, data):
uuid = data['uuid']
body = (data['body'] or {}).get('value')
if body:
body = self.clean_html(body)
defaults = {
'key': data['url'].split('/')[-1],
'name': data['title'],
'description': body,
'logo_image_url': data['field_sponsorer_image']['url'],
}
sponsor, __ = Organization.objects.update_or_create(uuid=uuid, partner=self.partner, defaults=defaults)
logger.info('Processed sponsor with UUID [%s].', uuid)
return sponsor
...@@ -10,6 +10,7 @@ from opaque_keys.edx.keys import CourseKey ...@@ -10,6 +10,7 @@ from opaque_keys.edx.keys import CourseKey
from course_discovery.apps.course_metadata.data_loaders.marketing_site import ( from course_discovery.apps.course_metadata.data_loaders.marketing_site import (
DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader, DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader,
SponsorMarketingSiteDataLoader,
) )
from course_discovery.apps.course_metadata.data_loaders.tests import JSON from course_discovery.apps.course_metadata.data_loaders.tests import JSON
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
...@@ -459,3 +460,49 @@ class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -459,3 +460,49 @@ class SchoolMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
for school in schools: for school in schools:
self.assert_school_loaded(school) self.assert_school_loaded(school)
class SponsorMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = SponsorMarketingSiteDataLoader
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):
uuid = data['uuid']
school = Organization.objects.get(uuid=uuid, partner=self.partner)
body = (data['body'] or {}).get('value')
if body:
body = self.loader.clean_html(body)
expected_values = {
'key': data['url'].split('/')[-1],
'name': data['title'],
'description': body,
'logo_image_url': data['field_sponsorer_image']['url'],
}
for field, value in expected_values.items():
self.assertEqual(getattr(school, field), value)
@responses.activate
def test_ingest(self):
self.mock_login_response()
sponsors = self.mock_api()
self.loader.ingest()
for sponsor in sponsors:
self.assert_sponsor_loaded(sponsor)
...@@ -9,6 +9,7 @@ from course_discovery.apps.course_metadata.data_loaders.api import ( ...@@ -9,6 +9,7 @@ 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, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader, DrupalApiDataLoader, XSeriesMarketingSiteDataLoader, SubjectMarketingSiteDataLoader, SchoolMarketingSiteDataLoader,
SponsorMarketingSiteDataLoader,
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -80,6 +81,7 @@ class Command(BaseCommand): ...@@ -80,6 +81,7 @@ class Command(BaseCommand):
data_loaders = ( data_loaders = (
(partner.marketing_site_url_root, SubjectMarketingSiteDataLoader,), (partner.marketing_site_url_root, SubjectMarketingSiteDataLoader,),
(partner.marketing_site_url_root, SchoolMarketingSiteDataLoader,), (partner.marketing_site_url_root, SchoolMarketingSiteDataLoader,),
(partner.marketing_site_url_root, SponsorMarketingSiteDataLoader,),
(partner.organizations_api_url, OrganizationsApiDataLoader,), (partner.organizations_api_url, OrganizationsApiDataLoader,),
(partner.courses_api_url, CoursesApiDataLoader,), (partner.courses_api_url, CoursesApiDataLoader,),
(partner.ecommerce_api_url, EcommerceApiDataLoader,), (partner.ecommerce_api_url, EcommerceApiDataLoader,),
......
...@@ -919,3 +919,40 @@ MARKETING_SITE_API_SCHOOL_BODIES = [ ...@@ -919,3 +919,40 @@ MARKETING_SITE_API_SCHOOL_BODIES = [
'uuid': '2a73d2ce-c34a-4e08-8223-83bca9d2f01d' 'uuid': '2a73d2ce-c34a-4e08-8223-83bca9d2f01d'
}, },
] ]
MARKETING_SITE_API_SPONSOR_BODIES = [
{
'body': [],
'field_sponsorer_image': {
'url': 'https://www.edx.org/sites/default/files/sponsorer/image/trkcll.jpg',
},
'type': 'sponsorer',
'title': 'Turkcell Akademi',
'url': 'https://www.edx.org/sponsorer/turkcell-akademi',
'uuid': 'fcb48e7e-8f1b-4d4b-8bb0-77617aaad9ba'
},
{
'body': [],
'field_sponsorer_image': {
'url': 'https://www.edx.org/sites/default/files/sponsorer/image/databricks.png'
},
'type': 'sponsorer',
'title': 'Databricks',
'url': 'https://www.edx.org/sponsorer/databricks',
'uuid': '1d86977a-0661-44c9-8f39-32bbf8ca7d4b',
},
{
'body': {
'value': 'UC Berkeley is partnering with the U.S. Department of State to extend the reach of College '
'Writing 2X',
},
'field_sponsorer_image': {
'url': 'https://www.edx.org/sites/default/files/sponsorer/image/usdos-logo-seal.png',
},
'type': 'sponsorer',
'title': 'The U.S. Department of State',
'url': 'https://www.edx.org/sponsorer/u-s-department-state',
'uuid': 'db53bc49-bac0-4efe-8d77-1a2d8d185024'
},
]
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