Commit 2d7ba9e8 by Ahsan Ulhaq Committed by Ahsan Ul Haq

grade django oscar to latest version

LEARNER-2634
parent 7c123cbb
...@@ -28,7 +28,7 @@ from ecommerce.extensions.test.factories import prepare_voucher ...@@ -28,7 +28,7 @@ from ecommerce.extensions.test.factories import prepare_voucher
from ecommerce.tests.mixins import ApiMockMixin, LmsApiMockMixin from ecommerce.tests.mixins import ApiMockMixin, LmsApiMockMixin
from ecommerce.tests.testcases import TestCase from ecommerce.tests.testcases import TestCase
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
Catalog = get_model('catalogue', 'Catalog') Catalog = get_model('catalogue', 'Catalog')
......
...@@ -37,7 +37,7 @@ from ecommerce.extensions.offer.utils import render_email_confirmation_if_requir ...@@ -37,7 +37,7 @@ from ecommerce.extensions.offer.utils import render_email_confirmation_if_requir
from ecommerce.extensions.order.exceptions import AlreadyPlacedOrderException from ecommerce.extensions.order.exceptions import AlreadyPlacedOrderException
from ecommerce.extensions.voucher.utils import get_voucher_and_products_from_code from ecommerce.extensions.voucher.utils import get_voucher_and_products_from_code
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
ConditionalOffer = get_model('offer', 'ConditionalOffer') ConditionalOffer = get_model('offer', 'ConditionalOffer')
......
...@@ -4,7 +4,7 @@ from django.conf import settings ...@@ -4,7 +4,7 @@ from django.conf import settings
from django.utils.timezone import now, timedelta from django.utils.timezone import now, timedelta
from freezegun import freeze_time from freezegun import freeze_time
from oscar.core.loading import get_model from oscar.core.loading import get_model
from oscar.test.newfactories import BasketFactory from oscar.test.factories import BasketFactory
from ecommerce.core.constants import ENROLLMENT_CODE_PRODUCT_CLASS_NAME, ENROLLMENT_CODE_SWITCH from ecommerce.core.constants import ENROLLMENT_CODE_PRODUCT_CLASS_NAME, ENROLLMENT_CODE_SWITCH
from ecommerce.core.tests import toggle_switch from ecommerce.core.tests import toggle_switch
......
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import RequestFactory from django.test import RequestFactory
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import ProductAttributeValueFactory from oscar.test.factories import ProductAttributeValueFactory
from ecommerce.core.constants import ISO_8601_FORMAT from ecommerce.core.constants import ISO_8601_FORMAT
from ecommerce.extensions.api.serializers import OrderSerializer from ecommerce.extensions.api.serializers import OrderSerializer
......
...@@ -30,7 +30,7 @@ from ecommerce.tests.factories import PartnerFactory, ProductFactory, SiteConfig ...@@ -30,7 +30,7 @@ from ecommerce.tests.factories import PartnerFactory, ProductFactory, SiteConfig
from ecommerce.tests.mixins import ThrottlingMixin from ecommerce.tests.mixins import ThrottlingMixin
from ecommerce.tests.testcases import TestCase from ecommerce.tests.testcases import TestCase
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
Catalog = get_model('catalogue', 'Catalog') Catalog = get_model('catalogue', 'Catalog')
......
...@@ -26,7 +26,7 @@ from ecommerce.extensions.partner.shortcuts import get_partner_for_site ...@@ -26,7 +26,7 @@ from ecommerce.extensions.partner.shortcuts import get_partner_for_site
from ecommerce.extensions.payment import exceptions as payment_exceptions from ecommerce.extensions.payment import exceptions as payment_exceptions
from ecommerce.extensions.payment.helpers import get_default_processor_class, get_processor_class_by_name from ecommerce.extensions.payment.helpers import get_default_processor_class, get_processor_class_by_name
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Order = get_model('order', 'Order') Order = get_model('order', 'Order')
......
...@@ -11,7 +11,7 @@ from ecommerce.extensions.api.serializers import CheckoutSerializer ...@@ -11,7 +11,7 @@ from ecommerce.extensions.api.serializers import CheckoutSerializer
from ecommerce.extensions.payment.exceptions import ProcessorNotFoundError from ecommerce.extensions.payment.exceptions import ProcessorNotFoundError
from ecommerce.extensions.payment.helpers import get_processor_class_by_name from ecommerce.extensions.payment.helpers import get_processor_class_by_name
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
...@@ -16,7 +16,7 @@ from django.test import override_settings ...@@ -16,7 +16,7 @@ from django.test import override_settings
from factory.fuzzy import FuzzyText from factory.fuzzy import FuzzyText
from oscar.apps.basket.forms import BasketVoucherForm from oscar.apps.basket.forms import BasketVoucherForm
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test import newfactories as factories from oscar.test import factories
from oscar.test.utils import RequestFactory from oscar.test.utils import RequestFactory
from requests.exceptions import ConnectionError, Timeout from requests.exceptions import ConnectionError, Timeout
from slumber.exceptions import SlumberBaseException from slumber.exceptions import SlumberBaseException
...@@ -44,7 +44,7 @@ from ecommerce.tests.factories import ProductFactory, SiteFactory, StockRecordFa ...@@ -44,7 +44,7 @@ from ecommerce.tests.factories import ProductFactory, SiteFactory, StockRecordFa
from ecommerce.tests.mixins import ApiMockMixin, LmsApiMockMixin from ecommerce.tests.mixins import ApiMockMixin, LmsApiMockMixin
from ecommerce.tests.testcases import TestCase from ecommerce.tests.testcases import TestCase
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
BasketAttribute = get_model('basket', 'BasketAttribute') BasketAttribute = get_model('basket', 'BasketAttribute')
BasketAttributeType = get_model('basket', 'BasketAttributeType') BasketAttributeType = get_model('basket', 'BasketAttributeType')
...@@ -1015,5 +1015,5 @@ class VoucherRemoveViewTests(TestCase): ...@@ -1015,5 +1015,5 @@ class VoucherRemoveViewTests(TestCase):
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
actual = list(get_messages(request))[-1].message actual = list(get_messages(request))[-1].message
expected = "No coupon found with id '{}'".format(pk) expected = "No voucher found with id '{}'".format(pk)
self.assertEqual(actual, expected) self.assertEqual(actual, expected)
...@@ -16,7 +16,7 @@ from ecommerce.extensions.order.utils import UserAlreadyPlacedOrder ...@@ -16,7 +16,7 @@ from ecommerce.extensions.order.utils import UserAlreadyPlacedOrder
from ecommerce.extensions.payment.utils import embargo_check from ecommerce.extensions.payment.utils import embargo_check
from ecommerce.referrals.models import Referral from ecommerce.referrals.models import Referral
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
BasketAttribute = get_model('basket', 'BasketAttribute') BasketAttribute = get_model('basket', 'BasketAttribute')
BasketAttributeType = get_model('basket', 'BasketAttributeType') BasketAttributeType = get_model('basket', 'BasketAttributeType')
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-01-24 11:31
from __future__ import unicode_literals
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalogue', '0029_auto_20180119_0903'),
]
operations = [
migrations.AddField(
model_name='productattributevalue',
name='value_datetime',
field=models.DateTimeField(blank=True, null=True, verbose_name='DateTime'),
),
migrations.AddField(
model_name='productattributevalue',
name='value_multi_option',
field=models.ManyToManyField(blank=True, related_name='multi_valued_attribute_values', to='catalogue.AttributeOption', verbose_name='Value multi option'),
),
migrations.AlterField(
model_name='productattribute',
name='option_group',
field=models.ForeignKey(blank=True, help_text='Select an option group if using type "Option" or "Multi Option"', null=True, on_delete=django.db.models.deletion.CASCADE, to='catalogue.AttributeOptionGroup', verbose_name='Option Group'),
),
migrations.AlterField(
model_name='productattribute',
name='type',
field=models.CharField(choices=[(b'text', 'Text'), (b'integer', 'Integer'), (b'boolean', 'True / False'), (b'float', 'Float'), (b'richtext', 'Rich Text'), (b'date', 'Date'), (b'datetime', b'Datetime'), (b'option', 'Option'), (b'multi_option', 'Multi Option'), (b'entity', 'Entity'), (b'file', 'File'), (b'image', 'Image')], default=b'text', max_length=20, verbose_name='Type'),
),
migrations.AlterUniqueTogether(
name='productimage',
unique_together=set([]),
),
]
...@@ -126,6 +126,7 @@ class EdxOrderPlacementMixin(OrderPlacementMixin): ...@@ -126,6 +126,7 @@ class EdxOrderPlacementMixin(OrderPlacementMixin):
shipping_charge=shipping_charge, shipping_charge=shipping_charge,
order_total=order_total, order_total=order_total,
billing_address=billing_address, billing_address=billing_address,
request=request,
**kwargs **kwargs
) )
......
...@@ -5,7 +5,7 @@ import mock ...@@ -5,7 +5,7 @@ import mock
from django.core import mail from django.core import mail
from django.test import RequestFactory from django.test import RequestFactory
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import ProductFactory, UserFactory from oscar.test.factories import ProductFactory, UserFactory
from testfixtures import LogCapture from testfixtures import LogCapture
from waffle.models import Sample from waffle.models import Sample
......
...@@ -5,7 +5,6 @@ import mock ...@@ -5,7 +5,6 @@ import mock
from django.core import mail from django.core import mail
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test import factories from oscar.test import factories
from oscar.test.newfactories import BasketFactory
from testfixtures import LogCapture from testfixtures import LogCapture
from ecommerce.core.constants import ENROLLMENT_CODE_PRODUCT_CLASS_NAME, ENROLLMENT_CODE_SWITCH from ecommerce.core.constants import ENROLLMENT_CODE_PRODUCT_CLASS_NAME, ENROLLMENT_CODE_SWITCH
...@@ -20,7 +19,7 @@ from ecommerce.programs.tests.mixins import ProgramTestMixin ...@@ -20,7 +19,7 @@ from ecommerce.programs.tests.mixins import ProgramTestMixin
from ecommerce.tests.factories import ProductFactory from ecommerce.tests.factories import ProductFactory
from ecommerce.tests.testcases import TestCase from ecommerce.tests.testcases import TestCase
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
BasketAttribute = get_model('basket', 'BasketAttribute') BasketAttribute = get_model('basket', 'BasketAttribute')
BasketAttributeType = get_model('basket', 'BasketAttributeType') BasketAttributeType = get_model('basket', 'BasketAttributeType')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
...@@ -52,7 +51,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -52,7 +51,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
""" """
course = CourseFactory() course = CourseFactory()
seat = course.create_or_update_seat(seat_type, False, 50, self.partner, credit_provider_id, None, 2) seat = course.create_or_update_seat(seat_type, False, 50, self.partner, credit_provider_id, None, 2)
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(seat, 1) basket.add_product(seat, 1)
order = create_order(basket=basket, user=self.user) order = create_order(basket=basket, user=self.user)
return order return order
...@@ -218,7 +217,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -218,7 +217,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
_range = factories.RangeFactory(products=[product], ) _range = factories.RangeFactory(products=[product], )
voucher, product = prepare_voucher(_range=_range, benefit_value=percent_benefit) voucher, product = prepare_voucher(_range=_range, benefit_value=percent_benefit)
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(product) basket.add_product(product)
basket.vouchers.add(voucher) basket.vouchers.add(voucher)
Applicator().apply(basket, user=basket.owner, request=self.request) Applicator().apply(basket, user=basket.owner, request=self.request)
...@@ -242,7 +241,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -242,7 +241,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
condition=factories.ConditionFactory(type=Condition.COVERAGE, value=1, range=_range) condition=factories.ConditionFactory(type=Condition.COVERAGE, value=1, range=_range)
) )
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(product) basket.add_product(product)
basket.vouchers.add(voucher) basket.vouchers.add(voucher)
Applicator().apply(basket, user=basket.owner, request=self.request) Applicator().apply(basket, user=basket.owner, request=self.request)
...@@ -265,7 +264,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -265,7 +264,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
condition=factories.ConditionFactory(type=Condition.COVERAGE, value=1, range=_range) condition=factories.ConditionFactory(type=Condition.COVERAGE, value=1, range=_range)
) )
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(product) basket.add_product(product)
Applicator().apply_offers(basket, [site_offer]) Applicator().apply_offers(basket, [site_offer])
...@@ -279,7 +278,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -279,7 +278,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
with mock.patch('ecommerce.extensions.checkout.signals.track_segment_event') as mock_track: with mock.patch('ecommerce.extensions.checkout.signals.track_segment_event') as mock_track:
coupon = self.create_coupon() coupon = self.create_coupon()
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(coupon) basket.add_product(coupon)
order = factories.create_order(basket=basket, user=self.user) order = factories.create_order(basket=basket, user=self.user)
...@@ -299,7 +298,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase): ...@@ -299,7 +298,7 @@ class SignalTests(ProgramTestMixin, CouponMixin, TestCase):
course.create_or_update_seat('verified', True, 50, self.partner, create_enrollment_code=True) course.create_or_update_seat('verified', True, 50, self.partner, create_enrollment_code=True)
enrollment_code = Product.objects.get(product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME) enrollment_code = Product.objects.get(product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME)
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(enrollment_code) basket.add_product(enrollment_code)
order = factories.create_order(basket=basket, user=self.user) order = factories.create_order(basket=basket, user=self.user)
......
...@@ -6,7 +6,7 @@ import httpretty ...@@ -6,7 +6,7 @@ import httpretty
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from oscar.core.loading import get_model from oscar.core.loading import get_model
from oscar.test import newfactories as factories from oscar.test import factories
from ecommerce.core.url_utils import get_lms_courseware_url, get_lms_program_dashboard_url from ecommerce.core.url_utils import get_lms_courseware_url, get_lms_program_dashboard_url
from ecommerce.coupons.tests.mixins import DiscoveryMockMixin from ecommerce.coupons.tests.mixins import DiscoveryMockMixin
......
...@@ -18,7 +18,7 @@ from ecommerce.extensions.checkout.exceptions import BasketNotFreeError ...@@ -18,7 +18,7 @@ from ecommerce.extensions.checkout.exceptions import BasketNotFreeError
from ecommerce.extensions.checkout.mixins import EdxOrderPlacementMixin from ecommerce.extensions.checkout.mixins import EdxOrderPlacementMixin
from ecommerce.extensions.checkout.utils import get_receipt_page_url from ecommerce.extensions.checkout.utils import get_receipt_page_url
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
BasketAttribute = get_model('basket', 'BasketAttribute') BasketAttribute = get_model('basket', 'BasketAttribute')
BasketAttributeType = get_model('basket', 'BasketAttributeType') BasketAttributeType = get_model('basket', 'BasketAttributeType')
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-01-24 11:31
from __future__ import unicode_literals
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('customer', '0003_auto_20170215_2229'),
]
operations = [
migrations.AddField(
model_name='email',
name='email',
field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='Email Address'),
),
migrations.AlterField(
model_name='email',
name='user',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='emails', to=settings.AUTH_USER_MODEL, verbose_name='User'),
),
]
...@@ -9,7 +9,6 @@ import mock ...@@ -9,7 +9,6 @@ import mock
from django.test import override_settings from django.test import override_settings
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test import factories from oscar.test import factories
from oscar.test.newfactories import BasketFactory, UserFactory
from requests.exceptions import ConnectionError, Timeout from requests.exceptions import ConnectionError, Timeout
from testfixtures import LogCapture from testfixtures import LogCapture
...@@ -46,7 +45,7 @@ from ecommerce.tests.testcases import TestCase ...@@ -46,7 +45,7 @@ from ecommerce.tests.testcases import TestCase
JSON = 'application/json' JSON = 'application/json'
LOGGER_NAME = 'ecommerce.extensions.analytics.utils' LOGGER_NAME = 'ecommerce.extensions.analytics.utils'
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
Catalog = get_model('catalogue', 'Catalog') Catalog = get_model('catalogue', 'Catalog')
Option = get_model('catalogue', 'Option') Option = get_model('catalogue', 'Option')
...@@ -69,7 +68,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful ...@@ -69,7 +68,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful
def setUp(self): def setUp(self):
super(EnrollmentFulfillmentModuleTests, self).setUp() super(EnrollmentFulfillmentModuleTests, self).setUp()
self.user = UserFactory() self.user = factories.UserFactory()
self.user.tracking_context = { self.user.tracking_context = {
'ga_client_id': 'test-client-id', 'lms_user_id': 'test-user-id', 'lms_ip': '127.0.0.1' 'ga_client_id': 'test-client-id', 'lms_user_id': 'test-user-id', 'lms_ip': '127.0.0.1'
} }
...@@ -78,7 +77,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful ...@@ -78,7 +77,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful
self.seat = self.course.create_or_update_seat(self.certificate_type, False, 100, self.partner, self.provider) self.seat = self.course.create_or_update_seat(self.certificate_type, False, 100, self.partner, self.provider)
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(self.seat, 1) basket.add_product(self.seat, 1)
self.order = create_order(number=1, basket=basket, user=self.user) self.order = create_order(number=1, basket=basket, user=self.user)
...@@ -96,7 +95,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful ...@@ -96,7 +95,7 @@ class EnrollmentFulfillmentModuleTests(ProgramTestMixin, DiscoveryTestMixin, Ful
self.provider = provider self.provider = provider
self.seat = self.course.create_or_update_seat(self.certificate_type, False, 100, self.partner, self.provider) self.seat = self.course.create_or_update_seat(self.certificate_type, False, 100, self.partner, self.provider)
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(self.seat, 1) basket.add_product(self.seat, 1)
self.order = create_order(number=2, basket=basket, user=self.user) self.order = create_order(number=2, basket=basket, user=self.user)
...@@ -449,8 +448,8 @@ class CouponFulfillmentModuleTest(CouponMixin, FulfillmentTestMixin, TestCase): ...@@ -449,8 +448,8 @@ class CouponFulfillmentModuleTest(CouponMixin, FulfillmentTestMixin, TestCase):
def setUp(self): def setUp(self):
super(CouponFulfillmentModuleTest, self).setUp() super(CouponFulfillmentModuleTest, self).setUp()
coupon = self.create_coupon() coupon = self.create_coupon()
user = UserFactory() user = factories.UserFactory()
basket = BasketFactory(owner=user, site=self.site) basket = factories.BasketFactory(owner=user, site=self.site)
basket.add_product(coupon, 1) basket.add_product(coupon, 1)
self.order = create_order(number=1, basket=basket, user=user) self.order = create_order(number=1, basket=basket, user=user)
...@@ -491,8 +490,8 @@ class DonationsFromCheckoutTestFulfillmentModuleTest(FulfillmentTestMixin, TestC ...@@ -491,8 +490,8 @@ class DonationsFromCheckoutTestFulfillmentModuleTest(FulfillmentTestMixin, TestC
product_class=donation_class, product_class=donation_class,
title='Test product' title='Test product'
) )
user = UserFactory() user = factories.UserFactory()
basket = BasketFactory(owner=user, site=self.site) basket = factories.BasketFactory(owner=user, site=self.site)
factories.create_stockrecord(donation, num_in_stock=2, price_excl_tax=10) factories.create_stockrecord(donation, num_in_stock=2, price_excl_tax=10)
basket.add_product(donation, 1) basket.add_product(donation, 1)
self.order = create_order(number=1, basket=basket, user=user) self.order = create_order(number=1, basket=basket, user=user)
...@@ -530,8 +529,8 @@ class EnrollmentCodeFulfillmentModuleTests(DiscoveryTestMixin, TestCase): ...@@ -530,8 +529,8 @@ class EnrollmentCodeFulfillmentModuleTests(DiscoveryTestMixin, TestCase):
course = CourseFactory() course = CourseFactory()
course.create_or_update_seat('verified', True, 50, self.partner, create_enrollment_code=True) course.create_or_update_seat('verified', True, 50, self.partner, create_enrollment_code=True)
enrollment_code = Product.objects.get(product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME) enrollment_code = Product.objects.get(product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME)
user = UserFactory() user = factories.UserFactory()
basket = BasketFactory(owner=user, site=self.site) basket = factories.BasketFactory(owner=user, site=self.site)
basket.add_product(enrollment_code, self.QUANTITY) basket.add_product(enrollment_code, self.QUANTITY)
self.order = create_order(number=1, basket=basket, user=user) self.order = create_order(number=1, basket=basket, user=user)
...@@ -572,10 +571,10 @@ class EntitlementFulfillmentModuleTests(FulfillmentTestMixin, TestCase): ...@@ -572,10 +571,10 @@ class EntitlementFulfillmentModuleTests(FulfillmentTestMixin, TestCase):
def setUp(self): def setUp(self):
super(EntitlementFulfillmentModuleTests, self).setUp() super(EntitlementFulfillmentModuleTests, self).setUp()
self.user = UserFactory() self.user = factories.UserFactory()
self.course_entitlement = create_or_update_course_entitlement( self.course_entitlement = create_or_update_course_entitlement(
'verified', 100, self.partner, '111-222-333-444', 'Course Entitlement') 'verified', 100, self.partner, '111-222-333-444', 'Course Entitlement')
basket = BasketFactory(owner=self.user, site=self.site) basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(self.course_entitlement, 1) basket.add_product(self.course_entitlement, 1)
self.entitlement_option = Option.objects.get(name='Course Entitlement') self.entitlement_option = Option.objects.get(name='Course Entitlement')
self.order = create_order(number=1, basket=basket, user=self.user) self.order = create_order(number=1, basket=basket, user=self.user)
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-01-24 11:31
from __future__ import unicode_literals
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('offer', '0015_auto_20170926_1357'),
]
operations = [
migrations.AlterModelOptions(
name='conditionaloffer',
options={'ordering': ['-priority', 'pk'], 'verbose_name': 'Conditional offer', 'verbose_name_plural': 'Conditional offers'},
),
migrations.AlterField(
model_name='conditionaloffer',
name='benefit',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='offers', to='offer.Benefit', verbose_name='Benefit'),
),
migrations.AlterField(
model_name='conditionaloffer',
name='condition',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='offers', to='offer.Condition', verbose_name='Condition'),
),
migrations.AlterField(
model_name='conditionaloffer',
name='end_datetime',
field=models.DateTimeField(blank=True, help_text='Offers are active until the end date. Leave this empty if the offer has no expiry date.', null=True, verbose_name='End date'),
),
migrations.AlterField(
model_name='conditionaloffer',
name='start_datetime',
field=models.DateTimeField(blank=True, help_text='Offers are active from the start date. Leave this empty if the offer has no start date.', null=True, verbose_name='Start date'),
),
]
...@@ -37,6 +37,12 @@ class Benefit(AbstractBenefit): ...@@ -37,6 +37,12 @@ class Benefit(AbstractBenefit):
'Failed to create Benefit. Benefit value may not be a negative number.' 'Failed to create Benefit. Benefit value may not be a negative number.'
) )
def clean_percentage(self):
if not self.range:
log_message_and_raise_validation_error('Percentage benefits require a product range')
if self.value > 100:
log_message_and_raise_validation_error('Percentage discount cannot be greater than 100')
class ConditionalOffer(AbstractConditionalOffer): class ConditionalOffer(AbstractConditionalOffer):
UPDATABLE_OFFER_FIELDS = ['email_domains', 'max_uses'] UPDATABLE_OFFER_FIELDS = ['email_domains', 'max_uses']
......
...@@ -458,3 +458,16 @@ class ConditionalOfferTests(TestCase): ...@@ -458,3 +458,16 @@ class ConditionalOfferTests(TestCase):
"""Verify creating ConditionalOffer with no site specified""" """Verify creating ConditionalOffer with no site specified"""
offer = factories.ConditionalOfferFactory() offer = factories.ConditionalOfferFactory()
self.assertEqual(offer.site, None) self.assertEqual(offer.site, None)
class BenefitTests(TestCase):
def test_range(self):
with self.assertRaises(ValidationError):
factories.BenefitFactory(range=None)
def test_value(self):
with self.assertRaises(ValidationError):
factories.BenefitFactory(value=110)
with self.assertRaises(ValidationError):
factories.BenefitFactory(value=-10)
...@@ -5,7 +5,7 @@ import logging ...@@ -5,7 +5,7 @@ import logging
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django.db import transaction from django.db import transaction
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import UserFactory from oscar.test.factories import UserFactory
from ecommerce.core.models import SiteConfiguration from ecommerce.core.models import SiteConfiguration
......
...@@ -7,7 +7,7 @@ import httpretty ...@@ -7,7 +7,7 @@ import httpretty
import mock import mock
from django.test.client import RequestFactory from django.test.client import RequestFactory
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import BasketFactory from oscar.test.factories import BasketFactory
from requests import Timeout from requests import Timeout
from testfixtures import LogCapture from testfixtures import LogCapture
......
...@@ -77,7 +77,7 @@ class OrderNumberGenerator(object): ...@@ -77,7 +77,7 @@ class OrderNumberGenerator(object):
class OrderCreator(OscarOrderCreator): class OrderCreator(OscarOrderCreator):
def create_order_model(self, user, basket, shipping_address, shipping_method, shipping_charge, billing_address, def create_order_model(self, user, basket, shipping_address, shipping_method, shipping_charge, billing_address,
total, order_number, status, **extra_order_fields): total, order_number, status, request=None, **extra_order_fields):
""" """
Create an order model. Create an order model.
......
...@@ -13,7 +13,7 @@ from oscar.core.loading import get_class, get_model ...@@ -13,7 +13,7 @@ from oscar.core.loading import get_class, get_model
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
......
...@@ -15,7 +15,7 @@ from factory.django import mute_signals ...@@ -15,7 +15,7 @@ from factory.django import mute_signals
from oscar.apps.order.exceptions import UnableToPlaceOrder from oscar.apps.order.exceptions import UnableToPlaceOrder
from oscar.apps.payment.exceptions import PaymentError, TransactionDeclined, UserCancelled from oscar.apps.payment.exceptions import PaymentError, TransactionDeclined, UserCancelled
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test import factories, newfactories from oscar.test import factories
from oscar.test.contextmanagers import mock_signal_receiver from oscar.test.contextmanagers import mock_signal_receiver
from testfixtures import LogCapture from testfixtures import LogCapture
...@@ -162,10 +162,10 @@ class CybersourceMixin(PaymentEventsMixin): ...@@ -162,10 +162,10 @@ class CybersourceMixin(PaymentEventsMixin):
'line2': '', # this is not required by Cybersource, so make it empty unless the caller overrides it. 'line2': '', # this is not required by Cybersource, so make it empty unless the caller overrides it.
'line4': 'TestLine4', 'line4': 'TestLine4',
'postcode': 'TestPostCode', 'postcode': 'TestPostCode',
'country': newfactories.CountryFactory(), 'country': factories.CountryFactory(),
} }
kwargs.update(overrides or {}) kwargs.update(overrides or {})
return newfactories.BillingAddressFactory(**kwargs) return factories.BillingAddressFactory(**kwargs)
def generate_notification(self, basket, decision='ACCEPT', billing_address=None, auth_amount=None, **kwargs): def generate_notification(self, basket, decision='ACCEPT', billing_address=None, auth_amount=None, **kwargs):
""" """
......
...@@ -14,7 +14,7 @@ from ecommerce.extensions.payment.forms import PaymentForm ...@@ -14,7 +14,7 @@ from ecommerce.extensions.payment.forms import PaymentForm
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
......
...@@ -35,7 +35,7 @@ from ecommerce.extensions.payment.views import BasePaymentSubmitView ...@@ -35,7 +35,7 @@ from ecommerce.extensions.payment.views import BasePaymentSubmitView
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
BillingAddress = get_model('order', 'BillingAddress') BillingAddress = get_model('order', 'BillingAddress')
Country = get_model('address', 'Country') Country = get_model('address', 'Country')
......
...@@ -22,7 +22,7 @@ from ecommerce.extensions.payment.processors.paypal import Paypal ...@@ -22,7 +22,7 @@ from ecommerce.extensions.payment.processors.paypal import Paypal
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
BillingAddress = get_model('order', 'BillingAddress') BillingAddress = get_model('order', 'BillingAddress')
Country = get_model('address', 'Country') Country = get_model('address', 'Country')
......
...@@ -11,7 +11,7 @@ from ecommerce.extensions.payment.views import BasePaymentSubmitView ...@@ -11,7 +11,7 @@ from ecommerce.extensions.payment.views import BasePaymentSubmitView
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
BillingAddress = get_model('order', 'BillingAddress') BillingAddress = get_model('order', 'BillingAddress')
Country = get_model('address', 'Country') Country = get_model('address', 'Country')
NoShippingRequired = get_class('shipping.methods', 'NoShippingRequired') NoShippingRequired = get_class('shipping.methods', 'NoShippingRequired')
......
...@@ -3,7 +3,7 @@ from decimal import Decimal ...@@ -3,7 +3,7 @@ from decimal import Decimal
import factory import factory
from django.conf import settings from django.conf import settings
from oscar.core.loading import get_model from oscar.core.loading import get_model
from oscar.test.newfactories import UserFactory from oscar.test.factories import UserFactory
from ecommerce.extensions.refund.status import REFUND, REFUND_LINE from ecommerce.extensions.refund.status import REFUND, REFUND_LINE
from ecommerce.extensions.test.factories import create_order from ecommerce.extensions.test.factories import create_order
......
...@@ -5,7 +5,7 @@ from django.conf import settings ...@@ -5,7 +5,7 @@ from django.conf import settings
from django.test import override_settings from django.test import override_settings
from mock_django import mock_signal_receiver from mock_django import mock_signal_receiver
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import BasketFactory from oscar.test.factories import BasketFactory
from ecommerce.courses.tests.factories import CourseFactory from ecommerce.courses.tests.factories import CourseFactory
from ecommerce.entitlements.utils import create_or_update_course_entitlement from ecommerce.entitlements.utils import create_or_update_course_entitlement
......
import ddt import ddt
from django.test import override_settings from django.test import override_settings
from oscar.core.loading import get_model from oscar.core.loading import get_model
from oscar.test.newfactories import UserFactory from oscar.test.factories import UserFactory
from ecommerce.extensions.fulfillment.status import ORDER from ecommerce.extensions.fulfillment.status import ORDER
from ecommerce.extensions.refund.api import create_refunds, find_orders_associated_with_course from ecommerce.extensions.refund.api import create_refunds, find_orders_associated_with_course
......
...@@ -8,7 +8,7 @@ import mock ...@@ -8,7 +8,7 @@ import mock
from django.conf import settings from django.conf import settings
from oscar.apps.payment.exceptions import PaymentError from oscar.apps.payment.exceptions import PaymentError
from oscar.core.loading import get_class, get_model from oscar.core.loading import get_class, get_model
from oscar.test.newfactories import UserFactory from oscar.test.factories import UserFactory
from testfixtures import LogCapture from testfixtures import LogCapture
from ecommerce.core.constants import SEAT_PRODUCT_CLASS_NAME from ecommerce.core.constants import SEAT_PRODUCT_CLASS_NAME
......
from mock import patch from mock import patch
from oscar.test.newfactories import UserFactory from oscar.test.factories import UserFactory
from ecommerce.core.models import SegmentClient from ecommerce.core.models import SegmentClient
from ecommerce.extensions.refund.api import create_refunds from ecommerce.extensions.refund.api import create_refunds
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-01-24 11:31
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('voucher', '0004_auto_20160517_0930'),
]
operations = [
migrations.AlterField(
model_name='voucher',
name='date_created',
field=models.DateTimeField(auto_now_add=True),
),
migrations.AlterField(
model_name='voucherapplication',
name='date_created',
field=models.DateTimeField(auto_now_add=True),
),
]
...@@ -10,7 +10,7 @@ from ecommerce.extensions.payment.processors import HandledProcessorResponse ...@@ -10,7 +10,7 @@ from ecommerce.extensions.payment.processors import HandledProcessorResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
NoShippingRequired = get_class('shipping.methods', 'NoShippingRequired') NoShippingRequired = get_class('shipping.methods', 'NoShippingRequired')
OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator') OrderTotalCalculator = get_class('checkout.calculators', 'OrderTotalCalculator')
......
...@@ -10,7 +10,7 @@ from ecommerce.extensions.test import factories ...@@ -10,7 +10,7 @@ from ecommerce.extensions.test import factories
from ecommerce.programs.tests.mixins import ProgramTestMixin from ecommerce.programs.tests.mixins import ProgramTestMixin
from ecommerce.tests.testcases import TestCase from ecommerce.tests.testcases import TestCase
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
class ProgramOfferTests(ProgramTestMixin, TestCase): class ProgramOfferTests(ProgramTestMixin, TestCase):
......
...@@ -3,7 +3,7 @@ import logging ...@@ -3,7 +3,7 @@ import logging
from mock import patch from mock import patch
from oscar.core.loading import get_model from oscar.core.loading import get_model
from oscar.test.newfactories import BasketFactory, UserFactory from oscar.test.factories import BasketFactory, UserFactory
from ecommerce.core.tests import toggle_switch from ecommerce.core.tests import toggle_switch
from ecommerce.coupons.tests.mixins import CouponMixin from ecommerce.coupons.tests.mixins import CouponMixin
......
...@@ -25,7 +25,7 @@ from ecommerce.courses.utils import mode_for_product ...@@ -25,7 +25,7 @@ from ecommerce.courses.utils import mode_for_product
from ecommerce.extensions.fulfillment.signals import SHIPPING_EVENT_NAME from ecommerce.extensions.fulfillment.signals import SHIPPING_EVENT_NAME
from ecommerce.tests.factories import SiteConfigurationFactory from ecommerce.tests.factories import SiteConfigurationFactory
Applicator = get_class('offer.utils', 'Applicator') Applicator = get_class('offer.applicator', 'Applicator')
Basket = get_model('basket', 'Basket') Basket = get_model('basket', 'Basket')
Benefit = get_model('offer', 'Benefit') Benefit = get_model('offer', 'Benefit')
Catalog = get_model('catalogue', 'Catalog') Catalog = get_model('catalogue', 'Catalog')
......
...@@ -12,7 +12,7 @@ django-crispy-forms==1.6.1 ...@@ -12,7 +12,7 @@ django-crispy-forms==1.6.1
django_extensions==1.9.0 django_extensions==1.9.0
django-filter==1.0.4 django-filter==1.0.4
django-libsass==0.5 django-libsass==0.5
django-oscar==1.4 django-oscar==1.5.1
django-solo==1.1.2 django-solo==1.1.2
django-threadlocals==0.8 django-threadlocals==0.8
django-waffle==0.12.0 django-waffle==0.12.0
......
...@@ -5,6 +5,7 @@ coverage==4.3.4 ...@@ -5,6 +5,7 @@ coverage==4.3.4
ddt==1.1.1 ddt==1.1.1
diff-cover==0.9.6 diff-cover==0.9.6
django-nose==1.4.4 django-nose==1.4.4
django-webtest==1.9.2
factory-boy==2.8.1 factory-boy==2.8.1
freezegun==0.3.7 freezegun==0.3.7
httpretty==0.8.14 httpretty==0.8.14
......
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