Commit 6672f641 by John Eskew

Add commerce AppConfig and use to register signals. Move imports.

Add explicit 'lms.djangoapps' prefix to all commerce imports, as another
commerce Django app exists at openedx.core.djangoapps.commerce
parent ac3642ad
...@@ -203,7 +203,7 @@ class RefundableTest(SharedModuleStoreTestCase): ...@@ -203,7 +203,7 @@ class RefundableTest(SharedModuleStoreTestCase):
raised while getting order detail for ecommerce. raised while getting order detail for ecommerce.
""" """
# importing this after overriding value of ECOMMERCE_API_URL # importing this after overriding value of ECOMMERCE_API_URL
from commerce.tests.mocks import mock_order_endpoint from lms.djangoapps.commerce.tests.mocks import mock_order_endpoint
self.client.login(username=self.user.username, password=self.USER_PASSWORD) self.client.login(username=self.user.username, password=self.USER_PASSWORD)
with mock_order_endpoint(order_number=self.ORDER_NUMBER, exception=exception, reset_on_exit=False): with mock_order_endpoint(order_number=self.ORDER_NUMBER, exception=exception, reset_on_exit=False):
......
...@@ -95,7 +95,7 @@ class TestStudentDashboardUnenrollments(SharedModuleStoreTestCase): ...@@ -95,7 +95,7 @@ class TestStudentDashboardUnenrollments(SharedModuleStoreTestCase):
self.cert_status = cert_status self.cert_status = cert_status
with patch('student.views.cert_info', side_effect=self.mock_cert): with patch('student.views.cert_info', side_effect=self.mock_cert):
with patch('commerce.signals.handle_refund_order') as mock_refund_handler: with patch('lms.djangoapps.commerce.signals.handle_refund_order') as mock_refund_handler:
REFUND_ORDER.connect(mock_refund_handler) REFUND_ORDER.connect(mock_refund_handler)
response = self.client.post( response = self.client.post(
reverse('change_enrollment'), reverse('change_enrollment'),
......
""" Commerce app. """
# this is here to support registering the signals in signals.py
from commerce import signals
...@@ -3,6 +3,6 @@ ...@@ -3,6 +3,6 @@
from config_models.admin import ConfigurationModelAdmin from config_models.admin import ConfigurationModelAdmin
from django.contrib import admin from django.contrib import admin
from commerce.models import CommerceConfiguration from .models import CommerceConfiguration
admin.site.register(CommerceConfiguration, ConfigurationModelAdmin) admin.site.register(CommerceConfiguration, ConfigurationModelAdmin)
...@@ -4,6 +4,6 @@ API URLs. ...@@ -4,6 +4,6 @@ API URLs.
from django.conf.urls import include, url from django.conf.urls import include, url
urlpatterns = [ urlpatterns = [
url(r'^v0/', include('commerce.api.v0.urls', namespace='v0')), url(r'^v0/', include('lms.djangoapps.commerce.api.v0.urls', namespace='v0')),
url(r'^v1/', include('commerce.api.v1.urls', namespace='v1')), url(r'^v1/', include('lms.djangoapps.commerce.api.v1.urls', namespace='v1')),
] ]
...@@ -14,12 +14,13 @@ from django.test.utils import override_settings ...@@ -14,12 +14,13 @@ from django.test.utils import override_settings
from edx_rest_api_client import exceptions from edx_rest_api_client import exceptions
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from commerce.api.v0.views import SAILTHRU_CAMPAIGN_COOKIE
from commerce.constants import Messages
from commerce.tests.mocks import mock_basket_order
from commerce.tests.test_views import UserMixin
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory
from enrollment.api import get_enrollment from enrollment.api import get_enrollment
from ..views import SAILTHRU_CAMPAIGN_COOKIE
from ....constants import Messages
from ....tests.mocks import mock_basket_order
from ....tests.test_views import UserMixin
from openedx.core.djangoapps.embargo.test_utils import restrict_course from openedx.core.djangoapps.embargo.test_utils import restrict_course
from openedx.core.lib.django_test_client_utils import get_absolute_url from openedx.core.lib.django_test_client_utils import get_absolute_url
from student.models import CourseEnrollment from student.models import CourseEnrollment
...@@ -250,7 +251,7 @@ class BasketsViewTests(EnrollmentEventTestMixin, UserMixin, ModuleStoreTestCase) ...@@ -250,7 +251,7 @@ class BasketsViewTests(EnrollmentEventTestMixin, UserMixin, ModuleStoreTestCase)
self.assertFalse(CourseEnrollment.is_enrolled(self.user, self.course.id)) self.assertFalse(CourseEnrollment.is_enrolled(self.user, self.course.id))
self.assertIsNotNone(get_enrollment(self.user.username, unicode(self.course.id))) self.assertIsNotNone(get_enrollment(self.user.username, unicode(self.course.id)))
@mock.patch('commerce.api.v0.views.update_email_opt_in') @mock.patch('lms.djangoapps.commerce.api.v0.views.update_email_opt_in')
@ddt.data(*itertools.product((False, True), (False, True), (False, True))) @ddt.data(*itertools.product((False, True), (False, True), (False, True)))
@ddt.unpack @ddt.unpack
def test_marketing_email_opt_in(self, is_opt_in, has_sku, is_exception, mock_update): def test_marketing_email_opt_in(self, is_opt_in, has_sku, is_exception, mock_update):
......
...@@ -3,7 +3,7 @@ API v0 URLs. ...@@ -3,7 +3,7 @@ API v0 URLs.
""" """
from django.conf.urls import include, url from django.conf.urls import include, url
from commerce.api.v0 import views from . import views
BASKET_URLS = [ BASKET_URLS = [
url(r'^$', views.BasketsView.as_view(), name='create'), url(r'^$', views.BasketsView.as_view(), name='create'),
......
...@@ -9,12 +9,12 @@ from rest_framework.permissions import IsAuthenticated ...@@ -9,12 +9,12 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.status import HTTP_406_NOT_ACCEPTABLE, HTTP_409_CONFLICT from rest_framework.status import HTTP_406_NOT_ACCEPTABLE, HTTP_409_CONFLICT
from rest_framework.views import APIView from rest_framework.views import APIView
from commerce.constants import Messages
from commerce.http import DetailResponse
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware import courses from courseware import courses
from enrollment.api import add_enrollment from enrollment.api import add_enrollment
from enrollment.views import EnrollmentCrossDomainSessionAuth from enrollment.views import EnrollmentCrossDomainSessionAuth
from ...constants import Messages
from ...http import DetailResponse
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.embargo import api as embargo_api from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in
......
...@@ -3,7 +3,7 @@ from django.conf import settings ...@@ -3,7 +3,7 @@ from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from rest_framework.permissions import BasePermission, DjangoModelPermissions from rest_framework.permissions import BasePermission, DjangoModelPermissions
from commerce.utils import is_account_activation_requirement_disabled from ...utils import is_account_activation_requirement_disabled
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.lib.api.permissions import ApiKeyHeaderPermission from openedx.core.lib.api.permissions import ApiKeyHeaderPermission
......
...@@ -7,8 +7,8 @@ from opaque_keys import InvalidKeyError ...@@ -7,8 +7,8 @@ from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from rest_framework import serializers from rest_framework import serializers
from commerce.api.v1.models import Course
from course_modes.models import CourseMode from course_modes.models import CourseMode
from .models import Course
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
import ddt import ddt
from django.test import TestCase from django.test import TestCase
from commerce.api.v1.models import Course
from course_modes.models import CourseMode from course_modes.models import CourseMode
from ..models import Course
@ddt.ddt @ddt.ddt
......
""" Commerce API v1 serializer tests. """ """ Commerce API v1 serializer tests. """
from django.test import TestCase from django.test import TestCase
from commerce.api.v1.serializers import serializers, validate_course_id from ..serializers import serializers, validate_course_id
class CourseValidatorTests(TestCase): class CourseValidatorTests(TestCase):
......
...@@ -14,9 +14,9 @@ from edx_rest_api_client import exceptions ...@@ -14,9 +14,9 @@ from edx_rest_api_client import exceptions
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from rest_framework.utils.encoders import JSONEncoder from rest_framework.utils.encoders import JSONEncoder
from commerce.tests.mocks import mock_order_endpoint
from commerce.tests.test_views import UserMixin
from course_modes.models import CourseMode from course_modes.models import CourseMode
from ....tests.mocks import mock_order_endpoint
from ....tests.test_views import UserMixin
from lms.djangoapps.verify_student.models import VerificationDeadline from lms.djangoapps.verify_student.models import VerificationDeadline
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
......
""" API v1 URLs. """
from django.conf import settings from django.conf import settings
from django.conf.urls import include, url from django.conf.urls import include, url
from commerce.api.v1 import views from . import views
COURSE_URLS = [ COURSE_URLS = [
url(r'^$', views.CourseListView.as_view(), name='list'), url(r'^$', views.CourseListView.as_view(), name='list'),
......
...@@ -10,11 +10,11 @@ from rest_framework.permissions import IsAuthenticated ...@@ -10,11 +10,11 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework_oauth.authentication import OAuth2Authentication from rest_framework_oauth.authentication import OAuth2Authentication
from commerce.api.v1.models import Course
from commerce.api.v1.permissions import ApiKeyOrModelPermission, IsAuthenticatedOrActivationOverridden
from commerce.api.v1.serializers import CourseSerializer
from commerce.utils import is_account_activation_requirement_disabled
from course_modes.models import CourseMode from course_modes.models import CourseMode
from .models import Course
from .permissions import ApiKeyOrModelPermission, IsAuthenticatedOrActivationOverridden
from .serializers import CourseSerializer
from ...utils import is_account_activation_requirement_disabled
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.lib.api.mixins import PutAsCreateMixin from openedx.core.lib.api.mixins import PutAsCreateMixin
from util.json_request import JsonResponse from util.json_request import JsonResponse
......
"""
Commerce Application Configuration
"""
from django.apps import AppConfig
class CommerceConfig(AppConfig):
"""
Application Configuration for Commerce.
"""
name = 'lms.djangoapps.commerce'
def ready(self):
"""
Connect handlers to signals.
"""
from . import signals # pylint: disable=unused-variable
...@@ -9,7 +9,7 @@ import logging ...@@ -9,7 +9,7 @@ import logging
from django.core.management import BaseCommand from django.core.management import BaseCommand
from commerce.models import CommerceConfiguration from ...models import CommerceConfiguration
logger = logging.getLogger(__name__) # pylint: disable=invalid-name logger = logging.getLogger(__name__) # pylint: disable=invalid-name
......
...@@ -4,7 +4,7 @@ Tests for management command for enabling commerce configuration. ...@@ -4,7 +4,7 @@ Tests for management command for enabling commerce configuration.
from django.core.management import call_command from django.core.management import call_command
from django.test import TestCase from django.test import TestCase
from commerce.models import CommerceConfiguration from ....models import CommerceConfiguration
class TestCommerceConfigurationCommand(TestCase): class TestCommerceConfigurationCommand(TestCase):
......
...@@ -10,9 +10,12 @@ from urlparse import urljoin ...@@ -10,9 +10,12 @@ from urlparse import urljoin
import requests import requests
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from .models import CommerceConfiguration
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client, is_commerce_service_configured
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.theming import helpers as theming_helpers from openedx.core.djangoapps.theming import helpers as theming_helpers
from request_cache.middleware import RequestCache from request_cache.middleware import RequestCache
...@@ -28,10 +31,6 @@ def handle_refund_order(sender, course_enrollment=None, **kwargs): ...@@ -28,10 +31,6 @@ def handle_refund_order(sender, course_enrollment=None, **kwargs):
Signal receiver for unenrollments, used to automatically initiate refunds Signal receiver for unenrollments, used to automatically initiate refunds
when applicable. when applicable.
""" """
# Import is placed here to avoid model import at project startup.
from django.contrib.auth.models import AnonymousUser
from openedx.core.djangoapps.commerce.utils import is_commerce_service_configured
if not is_commerce_service_configured(): if not is_commerce_service_configured():
return return
...@@ -84,10 +83,6 @@ def refund_seat(course_enrollment): ...@@ -84,10 +83,6 @@ def refund_seat(course_enrollment):
exceptions.SlumberBaseException: for any unhandled HTTP error during communication with the E-Commerce Service. exceptions.SlumberBaseException: for any unhandled HTTP error during communication with the E-Commerce Service.
exceptions.Timeout: if the attempt to reach the commerce service timed out. exceptions.Timeout: if the attempt to reach the commerce service timed out.
""" """
# Import is placed here to avoid model import at project startup.
from commerce.models import CommerceConfiguration
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
User = get_user_model() # pylint:disable=invalid-name User = get_user_model() # pylint:disable=invalid-name
course_key_str = unicode(course_enrollment.course_id) course_key_str = unicode(course_enrollment.course_id)
enrollee = course_enrollment.user enrollee = course_enrollment.user
......
...@@ -4,7 +4,7 @@ import json ...@@ -4,7 +4,7 @@ import json
import httpretty import httpretty
from django.conf import settings from django.conf import settings
from commerce.tests import factories from . import factories
# pylint: disable=invalid-name # pylint: disable=invalid-name
......
...@@ -18,11 +18,15 @@ from django.test.utils import override_settings ...@@ -18,11 +18,15 @@ from django.test.utils import override_settings
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from requests import Timeout from requests import Timeout
from commerce.models import CommerceConfiguration
from commerce.signals import create_zendesk_ticket, generate_refund_notification_body, send_refund_notification
from commerce.tests import JSON
from commerce.tests.mocks import mock_create_refund, mock_process_refund
from course_modes.models import CourseMode from course_modes.models import CourseMode
from ..models import CommerceConfiguration
from ..signals import (
create_zendesk_ticket,
generate_refund_notification_body,
send_refund_notification
)
from . import JSON
from .mocks import mock_create_refund, mock_process_refund
from student.signals import REFUND_ORDER from student.signals import REFUND_ORDER
from student.tests.factories import CourseEnrollmentFactory, UserFactory from student.tests.factories import CourseEnrollmentFactory, UserFactory
...@@ -76,11 +80,11 @@ class TestRefundSignal(TestCase): ...@@ -76,11 +80,11 @@ class TestRefundSignal(TestCase):
Ensure that the receiver quietly bypasses attempts to initiate Ensure that the receiver quietly bypasses attempts to initiate
refunds when there is no external service configured. refunds when there is no external service configured.
""" """
with mock.patch('commerce.signals.refund_seat') as mock_refund_seat: with mock.patch('lms.djangoapps.commerce.signals.refund_seat') as mock_refund_seat:
self.send_signal() self.send_signal()
self.assertFalse(mock_refund_seat.called) self.assertFalse(mock_refund_seat.called)
@mock.patch('commerce.signals.refund_seat') @mock.patch('lms.djangoapps.commerce.signals.refund_seat')
def test_receiver(self, mock_refund_seat): def test_receiver(self, mock_refund_seat):
""" """
Ensure that the REFUND_ORDER signal triggers correct calls to Ensure that the REFUND_ORDER signal triggers correct calls to
...@@ -100,8 +104,8 @@ class TestRefundSignal(TestCase): ...@@ -100,8 +104,8 @@ class TestRefundSignal(TestCase):
self.send_signal() self.send_signal()
self.assertFalse(mock_refund_seat.called) self.assertFalse(mock_refund_seat.called)
@mock.patch('commerce.signals.refund_seat') @mock.patch('lms.djangoapps.commerce.signals.refund_seat')
@mock.patch('commerce.signals.get_request_user', return_value=None) @mock.patch('lms.djangoapps.commerce.signals.get_request_user', return_value=None)
def test_requester(self, mock_get_request_user, mock_refund_seat): def test_requester(self, mock_get_request_user, mock_refund_seat):
""" """
Ensure the right requester is specified when initiating refunds. Ensure the right requester is specified when initiating refunds.
...@@ -131,7 +135,7 @@ class TestRefundSignal(TestCase): ...@@ -131,7 +135,7 @@ class TestRefundSignal(TestCase):
self.send_signal() self.send_signal()
self.assertFalse(mock_refund_seat.called) self.assertFalse(mock_refund_seat.called)
@mock.patch('commerce.signals.log.exception') @mock.patch('lms.djangoapps.commerce.signals.log.exception')
def test_error_logging(self, mock_log_exception): def test_error_logging(self, mock_log_exception):
""" """
Ensure that unexpected Exceptions are logged as errors (but do not Ensure that unexpected Exceptions are logged as errors (but do not
...@@ -141,7 +145,7 @@ class TestRefundSignal(TestCase): ...@@ -141,7 +145,7 @@ class TestRefundSignal(TestCase):
self.send_signal() self.send_signal()
self.assertTrue(mock_log_exception.called) self.assertTrue(mock_log_exception.called)
@mock.patch('commerce.signals.send_refund_notification') @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification')
def test_notification_when_approval_fails(self, mock_send_notification): def test_notification_when_approval_fails(self, mock_send_notification):
""" """
Ensure the notification function is triggered when refunds are initiated, and cannot be automatically approved. Ensure the notification function is triggered when refunds are initiated, and cannot be automatically approved.
...@@ -156,7 +160,7 @@ class TestRefundSignal(TestCase): ...@@ -156,7 +160,7 @@ class TestRefundSignal(TestCase):
self.assertTrue(mock_send_notification.called) self.assertTrue(mock_send_notification.called)
mock_send_notification.assert_called_with(self.course_enrollment, [failed_refund_id]) mock_send_notification.assert_called_with(self.course_enrollment, [failed_refund_id])
@mock.patch('commerce.signals.send_refund_notification') @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification')
def test_notification_if_automatic_approval_disabled(self, mock_send_notification): def test_notification_if_automatic_approval_disabled(self, mock_send_notification):
""" """
Ensure the notification is always sent if the automatic approval functionality is disabled. Ensure the notification is always sent if the automatic approval functionality is disabled.
...@@ -170,7 +174,7 @@ class TestRefundSignal(TestCase): ...@@ -170,7 +174,7 @@ class TestRefundSignal(TestCase):
self.assertTrue(mock_send_notification.called) self.assertTrue(mock_send_notification.called)
mock_send_notification.assert_called_with(self.course_enrollment, [refund_id]) mock_send_notification.assert_called_with(self.course_enrollment, [refund_id])
@mock.patch('commerce.signals.send_refund_notification') @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification')
def test_no_notification_after_approval(self, mock_send_notification): def test_no_notification_after_approval(self, mock_send_notification):
""" """
Ensure the notification function is triggered when refunds are initiated, and cannot be automatically approved. Ensure the notification function is triggered when refunds are initiated, and cannot be automatically approved.
...@@ -185,7 +189,7 @@ class TestRefundSignal(TestCase): ...@@ -185,7 +189,7 @@ class TestRefundSignal(TestCase):
last_request = httpretty.last_request() last_request = httpretty.last_request()
self.assertDictEqual(json.loads(last_request.body), {'action': 'approve_payment_only'}) self.assertDictEqual(json.loads(last_request.body), {'action': 'approve_payment_only'})
@mock.patch('commerce.signals.send_refund_notification') @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification')
def test_notification_no_refund(self, mock_send_notification): def test_notification_no_refund(self, mock_send_notification):
""" """
Ensure the notification function is NOT triggered when no refunds are Ensure the notification function is NOT triggered when no refunds are
...@@ -195,7 +199,7 @@ class TestRefundSignal(TestCase): ...@@ -195,7 +199,7 @@ class TestRefundSignal(TestCase):
self.send_signal() self.send_signal()
self.assertFalse(mock_send_notification.called) self.assertFalse(mock_send_notification.called)
@mock.patch('commerce.signals.send_refund_notification') @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification')
@ddt.data( @ddt.data(
CourseMode.HONOR, CourseMode.HONOR,
CourseMode.PROFESSIONAL, CourseMode.PROFESSIONAL,
...@@ -216,8 +220,8 @@ class TestRefundSignal(TestCase): ...@@ -216,8 +220,8 @@ class TestRefundSignal(TestCase):
self.send_signal() self.send_signal()
self.assertFalse(mock_send_notification.called) self.assertFalse(mock_send_notification.called)
@mock.patch('commerce.signals.send_refund_notification', side_effect=Exception("Splat!")) @mock.patch('lms.djangoapps.commerce.signals.send_refund_notification', side_effect=Exception("Splat!"))
@mock.patch('commerce.signals.log.warning') @mock.patch('lms.djangoapps.commerce.signals.log.warning')
def test_notification_error(self, mock_log_warning, mock_send_notification): def test_notification_error(self, mock_log_warning, mock_send_notification):
""" """
Ensure an error occuring during notification does not break program Ensure an error occuring during notification does not break program
......
...@@ -9,8 +9,8 @@ from django.test.utils import override_settings ...@@ -9,8 +9,8 @@ from django.test.utils import override_settings
from mock import patch from mock import patch
from waffle.testutils import override_switch from waffle.testutils import override_switch
from commerce.models import CommerceConfiguration from ..models import CommerceConfiguration
from commerce.utils import EcommerceService from ..utils import EcommerceService
from openedx.core.lib.log_utils import audit_log from openedx.core.lib.log_utils import audit_log
from student.tests.factories import UserFactory from student.tests.factories import UserFactory
......
...@@ -109,7 +109,7 @@ class ReceiptViewTests(UserMixin, ModuleStoreTestCase): ...@@ -109,7 +109,7 @@ class ReceiptViewTests(UserMixin, ModuleStoreTestCase):
self.assertRegexpMatches(response.content, expected_pattern) self.assertRegexpMatches(response.content, expected_pattern)
@ddt.data(True, False) @ddt.data(True, False)
@mock.patch('commerce.views.is_user_payment_error') @mock.patch('lms.djangoapps.commerce.views.is_user_payment_error')
def test_cybersource_message(self, is_user_message_expected, mock_is_user_payment_error): def test_cybersource_message(self, is_user_message_expected, mock_is_user_payment_error):
""" """
Ensure that the page displays the right message for the reason_code (it Ensure that the page displays the right message for the reason_code (it
......
...@@ -3,7 +3,7 @@ Defines the URL routes for this app. ...@@ -3,7 +3,7 @@ Defines the URL routes for this app.
""" """
from django.conf.urls import url from django.conf.urls import url
from commerce import views from . import views
urlpatterns = [ urlpatterns = [
url(r'^checkout/cancel/$', views.checkout_cancel, name='checkout_cancel'), url(r'^checkout/cancel/$', views.checkout_cancel, name='checkout_cancel'),
......
...@@ -7,7 +7,7 @@ from django.conf import settings ...@@ -7,7 +7,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from student.models import CourseEnrollment from student.models import CourseEnrollment
from commerce.models import CommerceConfiguration from .models import CommerceConfiguration
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
......
...@@ -10,9 +10,9 @@ from django.views.decorators.csrf import csrf_exempt ...@@ -10,9 +10,9 @@ from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods from django.views.decorators.http import require_http_methods
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from commerce.models import CommerceConfiguration
from course_modes.models import CourseMode from course_modes.models import CourseMode
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from .models import CommerceConfiguration
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.theming.helpers import is_request_in_themed_site from openedx.core.djangoapps.theming.helpers import is_request_in_themed_site
......
...@@ -12,7 +12,7 @@ from mock import patch ...@@ -12,7 +12,7 @@ from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from pytz import utc from pytz import utc
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from courseware.courses import get_course_date_blocks from courseware.courses import get_course_date_blocks
......
...@@ -35,7 +35,7 @@ from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory ...@@ -35,7 +35,7 @@ from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from certificates import api as certs_api from certificates import api as certs_api
from certificates.models import CertificateGenerationConfiguration, CertificateStatuses from certificates.models import CertificateGenerationConfiguration, CertificateStatuses
from certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory from certificates.tests.factories import CertificateInvalidationFactory, GeneratedCertificateFactory
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from courseware.access_utils import check_course_open_for_learner from courseware.access_utils import check_course_open_for_learner
......
...@@ -12,7 +12,7 @@ import shoppingcart ...@@ -12,7 +12,7 @@ import shoppingcart
import survey.views import survey.views
from certificates import api as certs_api from certificates import api as certs_api
from certificates.models import CertificateStatuses from certificates.models import CertificateStatuses
from commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from course_modes.models import (CourseMode, get_course_prices) from course_modes.models import (CourseMode, get_course_prices)
from courseware.access import has_access, has_ccx_coach_role from courseware.access import has_access, has_ccx_coach_role
from courseware.access_utils import check_course_open_for_learner from courseware.access_utils import check_course_open_for_learner
......
...@@ -10,7 +10,7 @@ from opaque_keys import InvalidKeyError ...@@ -10,7 +10,7 @@ from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey, UsageKey from opaque_keys.edx.keys import CourseKey, UsageKey
import lms.djangoapps.instructor.enrollment as enrollment import lms.djangoapps.instructor.enrollment as enrollment
from commerce.signals import create_zendesk_ticket from lms.djangoapps.commerce.signals import create_zendesk_ticket
from courseware.models import StudentModule from courseware.models import StudentModule
from lms.djangoapps.instructor.views.tools import get_student_from_identifier from lms.djangoapps.instructor.views.tools import get_student_from_identifier
from student import auth from student import auth
......
...@@ -5,7 +5,7 @@ from django.http import Http404 ...@@ -5,7 +5,7 @@ from django.http import Http404
from django.views.decorators.http import require_GET from django.views.decorators.http import require_GET
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from lms.djangoapps.learner_dashboard.programs import ProgramsFragmentView from lms.djangoapps.learner_dashboard.programs import ProgramsFragmentView
from lms.djangoapps.learner_dashboard.utils import FAKE_COURSE_KEY, strip_course_id from lms.djangoapps.learner_dashboard.utils import FAKE_COURSE_KEY, strip_course_id
......
...@@ -27,9 +27,9 @@ from provider.oauth2.models import AccessToken as dop_access_token ...@@ -27,9 +27,9 @@ from provider.oauth2.models import AccessToken as dop_access_token
from provider.oauth2.models import RefreshToken as dop_refresh_token from provider.oauth2.models import RefreshToken as dop_refresh_token
from testfixtures import LogCapture from testfixtures import LogCapture
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from commerce.tests import factories from lms.djangoapps.commerce.tests import factories
from commerce.tests.mocks import mock_get_orders from lms.djangoapps.commerce.tests.mocks import mock_get_orders
from course_modes.models import CourseMode from course_modes.models import CourseMode
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from openedx.core.djangoapps.oauth_dispatch.tests import factories as dot_factories from openedx.core.djangoapps.oauth_dispatch.tests import factories as dot_factories
......
...@@ -18,7 +18,7 @@ from django.views.decorators.http import require_http_methods ...@@ -18,7 +18,7 @@ from django.views.decorators.http import require_http_methods
from django_countries import countries from django_countries import countries
import third_party_auth import third_party_auth
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from lms.djangoapps.commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from openedx.core.djangoapps.commerce.utils import ecommerce_api_client from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
......
...@@ -28,14 +28,14 @@ from opaque_keys.edx.keys import CourseKey ...@@ -28,14 +28,14 @@ from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
from waffle.testutils import override_switch from waffle.testutils import override_switch
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from commerce.tests import TEST_API_URL, TEST_PAYMENT_DATA, TEST_PUBLIC_URL_ROOT from lms.djangoapps.commerce.tests import TEST_API_URL, TEST_PAYMENT_DATA, TEST_PUBLIC_URL_ROOT
from common.test.utils import XssTestMixin from common.test.utils import XssTestMixin
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline
from lms.djangoapps.verify_student.views import PayAndVerifyView, checkout_with_ecommerce_service, render_to_response from lms.djangoapps.verify_student.views import PayAndVerifyView, checkout_with_ecommerce_service, render_to_response
from commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from openedx.core.djangoapps.embargo.test_utils import restrict_course from openedx.core.djangoapps.embargo.test_utils import restrict_course
from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme
from openedx.core.djangoapps.user_api.accounts.api import get_account_settings from openedx.core.djangoapps.user_api.accounts.api import get_account_settings
......
...@@ -30,7 +30,7 @@ from opaque_keys import InvalidKeyError ...@@ -30,7 +30,7 @@ from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from pytz import UTC from pytz import UTC
from commerce.utils import EcommerceService, is_account_activation_requirement_disabled from lms.djangoapps.commerce.utils import EcommerceService, is_account_activation_requirement_disabled
from course_modes.models import CourseMode from course_modes.models import CourseMode
from edxmako.shortcuts import render_to_response, render_to_string from edxmako.shortcuts import render_to_response, render_to_string
from eventtracking import tracker from eventtracking import tracker
......
...@@ -2243,7 +2243,7 @@ INSTALLED_APPS = [ ...@@ -2243,7 +2243,7 @@ INSTALLED_APPS = [
'corsheaders', 'corsheaders',
'openedx.core.djangoapps.cors_csrf', 'openedx.core.djangoapps.cors_csrf',
'commerce', 'lms.djangoapps.commerce.apps.CommerceConfig',
# Credit courses # Credit courses
'openedx.core.djangoapps.credit.apps.CreditConfig', 'openedx.core.djangoapps.credit.apps.CreditConfig',
......
...@@ -847,7 +847,7 @@ if configuration_helpers.get_value('ENABLE_BULK_ENROLLMENT_VIEW', settings.FEATU ...@@ -847,7 +847,7 @@ if configuration_helpers.get_value('ENABLE_BULK_ENROLLMENT_VIEW', settings.FEATU
# Shopping cart # Shopping cart
urlpatterns += [ urlpatterns += [
url(r'^shoppingcart/', include('shoppingcart.urls')), url(r'^shoppingcart/', include('shoppingcart.urls')),
url(r'^commerce/', include('commerce.urls', namespace='commerce')), url(r'^commerce/', include('lms.djangoapps.commerce.urls', namespace='commerce')),
] ]
# Course goals # Course goals
......
...@@ -10,7 +10,7 @@ from freezegun import freeze_time ...@@ -10,7 +10,7 @@ from freezegun import freeze_time
from mock import Mock, patch from mock import Mock, patch
import pytz import pytz
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from course_modes.models import CourseMode from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory from course_modes.tests.factories import CourseModeFactory
from courseware.models import DynamicUpgradeDeadlineConfiguration from courseware.models import DynamicUpgradeDeadlineConfiguration
......
...@@ -14,8 +14,8 @@ from pytz import UTC ...@@ -14,8 +14,8 @@ from pytz import UTC
from waffle.models import Flag from waffle.models import Flag
from waffle.testutils import override_flag from waffle.testutils import override_flag
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from lms.djangoapps.course_goals.api import add_course_goal, remove_course_goal from lms.djangoapps.course_goals.api import add_course_goal, remove_course_goal
from course_modes.models import CourseMode from course_modes.models import CourseMode
from courseware.tests.factories import StaffFactory from courseware.tests.factories import StaffFactory
......
...@@ -4,7 +4,7 @@ Tests for course verification sock ...@@ -4,7 +4,7 @@ Tests for course verification sock
import ddt import ddt
from commerce.models import CommerceConfiguration from lms.djangoapps.commerce.models import CommerceConfiguration
from course_modes.models import CourseMode from course_modes.models import CourseMode
from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag from openedx.core.djangoapps.waffle_utils.testutils import override_waffle_flag
from openedx.features.course_experience import DISPLAY_COURSE_SOCK_FLAG from openedx.features.course_experience import DISPLAY_COURSE_SOCK_FLAG
......
...@@ -9,7 +9,7 @@ from django.utils.decorators import method_decorator ...@@ -9,7 +9,7 @@ from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import ensure_csrf_cookie
from commerce.utils import EcommerceService from lms.djangoapps.commerce.utils import EcommerceService
from course_modes.models import get_cosmetic_verified_display_price from course_modes.models import get_cosmetic_verified_display_price
from courseware.access import has_access from courseware.access import has_access
from courseware.courses import ( from courseware.courses import (
......
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