Commit fda9303d by Clinton Blackburn Committed by Clinton Blackburn

Updated Publisher to push E-Commerce seat info to Discovery

This ensures we don't have to wait for a data refresh to pull data from
the E-Commerce Service.

LEARNER-2719
parent 0533977d
...@@ -5,9 +5,10 @@ import responses ...@@ -5,9 +5,10 @@ import responses
from django.urls import reverse from django.urls import reverse
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from course_discovery.apps.core.models import Partner from course_discovery.apps.core.models import Currency, Partner
from course_discovery.apps.core.tests.factories import StaffUserFactory, UserFactory from course_discovery.apps.core.tests.factories import StaffUserFactory, UserFactory
from course_discovery.apps.core.utils import serialize_datetime from course_discovery.apps.core.utils import serialize_datetime
from course_discovery.apps.course_metadata.models import Seat as DiscoverySeat
from course_discovery.apps.course_metadata.models import CourseRun, Video from course_discovery.apps.course_metadata.models import CourseRun, Video
from course_discovery.apps.course_metadata.tests.factories import OrganizationFactory, PersonFactory from course_discovery.apps.course_metadata.tests.factories import OrganizationFactory, PersonFactory
from course_discovery.apps.ietf_language_tags.models import LanguageTag from course_discovery.apps.ietf_language_tags.models import LanguageTag
...@@ -89,11 +90,16 @@ class CourseRunViewSetTests(APITestCase): ...@@ -89,11 +90,16 @@ class CourseRunViewSetTests(APITestCase):
def test_publish(self, mock_access_token): # pylint: disable=unused-argument,too-many-statements def test_publish(self, mock_access_token): # pylint: disable=unused-argument,too-many-statements
publisher_course_run = self._create_course_run_for_publication() publisher_course_run = self._create_course_run_for_publication()
audit_seat = SeatFactory(course_run=publisher_course_run, type=Seat.AUDIT, upgrade_deadline=None) currency = Currency.objects.get(code='USD')
common_seat_kwargs = {
'course_run': publisher_course_run,
'currency': currency,
}
audit_seat = SeatFactory(type=Seat.AUDIT, upgrade_deadline=None, **common_seat_kwargs)
# The credit seat should NOT be published. # The credit seat should NOT be published.
SeatFactory(course_run=publisher_course_run, type=Seat.CREDIT) SeatFactory(type=Seat.CREDIT, **common_seat_kwargs)
professional_seat = SeatFactory(course_run=publisher_course_run, type=Seat.PROFESSIONAL) professional_seat = SeatFactory(type=Seat.PROFESSIONAL, **common_seat_kwargs)
verified_seat = SeatFactory(course_run=publisher_course_run, type=Seat.VERIFIED) verified_seat = SeatFactory(type=Seat.VERIFIED, **common_seat_kwargs)
partner = publisher_course_run.course.organizations.first().partner partner = publisher_course_run.course.organizations.first().partner
self._set_test_client_domain_and_login(partner) self._set_test_client_domain_and_login(partner)
...@@ -161,6 +167,17 @@ class CourseRunViewSetTests(APITestCase): ...@@ -161,6 +167,17 @@ class CourseRunViewSetTests(APITestCase):
expected = {publisher_course.primary_subject, publisher_course.secondary_subject} expected = {publisher_course.primary_subject, publisher_course.secondary_subject}
assert set(discovery_course.subjects.all()) == expected assert set(discovery_course.subjects.all()) == expected
common_seat_kwargs = {
'course_run': discovery_course_run,
'currency': currency,
}
DiscoverySeat.objects.get(type=DiscoverySeat.AUDIT, upgrade_deadline__isnull=True, **common_seat_kwargs)
DiscoverySeat.objects.get(type=DiscoverySeat.PROFESSIONAL, upgrade_deadline=professional_seat.upgrade_deadline,
price=professional_seat.price,
**common_seat_kwargs)
DiscoverySeat.objects.get(type=DiscoverySeat.VERIFIED, upgrade_deadline=verified_seat.upgrade_deadline,
price=verified_seat.price, **common_seat_kwargs)
def test_publish_missing_course_run(self): def test_publish_missing_course_run(self):
self.client.force_login(StaffUserFactory()) self.client.force_login(StaffUserFactory())
url = reverse('publisher:api:v1:course_run-publish', kwargs={'pk': 1}) url = reverse('publisher:api:v1:course_run-publish', kwargs={'pk': 1})
......
...@@ -10,6 +10,7 @@ from slumber.exceptions import SlumberBaseException ...@@ -10,6 +10,7 @@ from slumber.exceptions import SlumberBaseException
from course_discovery.apps.core.utils import serialize_datetime from course_discovery.apps.core.utils import serialize_datetime
from course_discovery.apps.course_metadata.models import CourseRun as DiscoveryCourseRun from course_discovery.apps.course_metadata.models import CourseRun as DiscoveryCourseRun
from course_discovery.apps.course_metadata.models import Seat as DiscoverySeat
from course_discovery.apps.course_metadata.models import Course, Video from course_discovery.apps.course_metadata.models import Course, Video
from course_discovery.apps.publisher.api.utils import serialize_seat_for_ecommerce_api from course_discovery.apps.publisher.api.utils import serialize_seat_for_ecommerce_api
from course_discovery.apps.publisher.models import CourseRun, Seat from course_discovery.apps.publisher.models import CourseRun, Seat
...@@ -140,6 +141,17 @@ class CourseRunViewSet(viewsets.GenericViewSet): ...@@ -140,6 +141,17 @@ class CourseRunViewSet(viewsets.GenericViewSet):
discovery_course_run.staff.add(*course_run.staff.all()) discovery_course_run.staff.add(*course_run.staff.all())
discovery_course_run.video_translation_languages.add(course_run.video_language) discovery_course_run.video_translation_languages.add(course_run.video_language)
for seat in course_run.seats.exclude(type=Seat.CREDIT):
DiscoverySeat.objects.update_or_create(
course_run=discovery_course_run,
type=seat.type,
currency=seat.currency,
defaults={
'price': seat.price,
'upgrade_deadline': seat.upgrade_deadline,
}
)
if created: if created:
discovery_course.canonical_course_run = discovery_course_run discovery_course.canonical_course_run = discovery_course_run
discovery_course.save() discovery_course.save()
......
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