Skip to content

Commit

Permalink
Merge pull request #58 from edly-io/rehan/EDLY-2006
Browse files Browse the repository at this point in the history
Refactored number_of_courses to subscription_number_of_courses
  • Loading branch information
rehan99000 authored Oct 29, 2020
2 parents cd0765f + ae040e7 commit 8136aa5
Show file tree
Hide file tree
Showing 14 changed files with 72 additions and 31 deletions.
4 changes: 2 additions & 2 deletions ecommerce/static/js/models/subscription_model.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ define([
subscription_type: SUBSCRIPTION_TYPES.limited_access,
subscription_duration_value: 0,
subscription_duration_unit: SUBSCRIPTION_DURATION_UNITS.days,
number_of_courses: 0,
subscription_number_of_courses: 0,
subscription_actual_price: 0,
subscription_price: 0,
subscription_display_order: 1,
Expand All @@ -79,7 +79,7 @@ define([
return subscription_type === SUBSCRIPTION_TYPES.limited_access || subscription_type === SUBSCRIPTION_TYPES.full_access_courses;
}
},
number_of_courses: {
subscription_number_of_courses: {
pattern: 'number',
required: function() {
var subscription_type = this.get('subscription_type');
Expand Down
4 changes: 2 additions & 2 deletions ecommerce/static/js/views/subscription_detail_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ define([
subscriptionStatus = this.model.get('subscription_status'),
dateCreated = this.model.get('date_created'),
dateEdited = this.model.get('date_updated'),
numberOfCourses = this.model.get('number_of_courses'),
subscriptionNumberOfCourses = this.model.get('subscription_number_of_courses'),
subscriptionActualPrice = this.model.get('subscription_actual_price'),
subscriptionPrice = this.model.get('subscription_price'),
subscriptionDurationValue = this.model.get('subscription_duration_value'),
Expand All @@ -58,7 +58,7 @@ define([
subscription_status: subscriptionStatus,
subscription_actual_price: subscriptionActualPrice,
subscription_price: subscriptionPrice,
number_of_courses: numberOfCourses,
subscription_number_of_courses: subscriptionNumberOfCourses,
subscription_duration_value: subscriptionDurationValue,
subscription_duration_unit: subscriptionDurationUnit,
dateEdited: dateEdited ? this.formatDateTime(dateEdited) : '',
Expand Down
6 changes: 3 additions & 3 deletions ecommerce/static/js/views/subscription_form_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ define([
'input[name=actual_price]': {
observe: 'subscription_actual_price'
},
'input[name=number_of_courses]': {
observe: 'number_of_courses'
'input[name=subscription_number_of_courses]': {
observe: 'subscription_number_of_courses'
},
'input[name=price]': {
observe: 'subscription_price'
Expand Down Expand Up @@ -140,7 +140,7 @@ define([
toggleSubscriptionTypeFields: function() {
var subscriptionType = this.$('[name=subscription_type]:checked').val(),
limitedAccessFields = [
'[name=number_of_courses]',
'[name=subscription_number_of_courses]',
],
fullAccessFields = [
'[name=duration_value]',
Expand Down
4 changes: 2 additions & 2 deletions ecommerce/static/templates/subscription_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ <h3 class="hd-3">
<div class="value"><%= subscription_duration_value %> <%= subscription_duration_unit %></div>
</div>
<%}%>
<% if(number_of_courses) {%>
<% if(subscription_number_of_courses) {%>
<div class="info-item grid-item">
<div class="heading"><%= gettext('Number of Courses:') %></div>
<div class="value"><%= number_of_courses %></div>
<div class="value"><%= subscription_number_of_courses %></div>
</div>
<%}%>
<% if(dateCreated) {%>
Expand Down
2 changes: 1 addition & 1 deletion ecommerce/static/templates/subscription_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@

<div class="form-group">
<label for="number-of-courses"><%= gettext('Number of Courses') %> *</label>
<input id="number-of-courses" type="number" step="1" class="form-control non-editable" name="number_of_courses" min="1" >
<input id="number-of-courses" type="number" step="1" class="form-control non-editable" name="subscription_number_of_courses" min="1" >
<p class="help-block"><%= gettext('Provide the number of courses which students can access using this subscription.') %></p>
</div>

Expand Down
14 changes: 7 additions & 7 deletions ecommerce/subscriptions/api/v2/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
StockRecord = get_model('partner', 'StockRecord')

SUBSCRIPTION_TYPE_ATTRIBUTES = {
'limited-access': ['number_of_courses', 'subscription_duration_value', 'subscription_duration_unit', ],
'limited-access': ['subscription_number_of_courses', 'subscription_duration_value', 'subscription_duration_unit', ],
'full-access-courses': ['subscription_duration_value', 'subscription_duration_unit', ],
'full-access-time-period': ['number_of_courses', ],
'full-access-time-period': ['subscription_number_of_courses', ],
'lifetime-access': [],
}
SUBSCRIPTION_GENERAL_ATTRIBUTES = ['subscription_type', 'subscription_actual_price', 'subscription_price', 'subscription_status', 'subscription_display_order']
Expand Down Expand Up @@ -102,7 +102,7 @@ class SubscriptionSerializer(serializers.ModelSerializer):
subscription_actual_price = serializers.SerializerMethodField()
subscription_price = serializers.SerializerMethodField()
subscription_status = serializers.SerializerMethodField()
number_of_courses = serializers.SerializerMethodField()
subscription_number_of_courses = serializers.SerializerMethodField()
subscription_duration_value = serializers.SerializerMethodField()
subscription_duration_unit = serializers.SerializerMethodField()

Expand Down Expand Up @@ -130,13 +130,13 @@ def get_subscription_status(self, product):
"""
return product.attr.subscription_status

def get_number_of_courses(self, product):
def get_subscription_number_of_courses(self, product):
"""
Get number of courses depending on the subscription type.
"""
subscription_type = product.attribute_values.get(attribute__code='subscription_type').value.option
if subscription_type == 'limited-access' or subscription_type == 'full-access-time-period':
return product.attr.number_of_courses
return product.attr.subscription_number_of_courses
return None

def get_subscription_duration_value(self, product):
Expand Down Expand Up @@ -171,7 +171,7 @@ def to_internal_value(self, obj):
'subscription_actual_price': obj.get('subscription_actual_price', 0.0),
'subscription_price': obj.get('subscription_price', 0.0),
'subscription_status': subscription_status,
'number_of_courses': obj.get('number_of_courses', 0),
'subscription_number_of_courses': obj.get('subscription_number_of_courses', 0),
'subscription_duration_value': obj.get('subscription_duration_value', 0),
'subscription_duration_unit': obj.get('subscription_duration_unit', 'days'),
'subscription_display_order': obj.get('subscription_display_order', 1),
Expand Down Expand Up @@ -326,5 +326,5 @@ class Meta:
model = Product
fields = (
'title', 'subscription_type', 'subscription_actual_price', 'subscription_price', 'subscription_status',
'number_of_courses', 'subscription_duration_value', 'subscription_duration_unit'
'subscription_number_of_courses', 'subscription_duration_value', 'subscription_duration_unit'
)
11 changes: 11 additions & 0 deletions ecommerce/subscriptions/api/v2/tests/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""
Subscription constants.
"""

LIMITED_ACCESS = 'limited-access'
FULL_ACCESS_COURSES = 'full-access-courses'
FULL_ACCESS_TIME_PERIOD = 'full-access-time-period'
LIFETIME_ACCESS = 'lifetime-access'

SUBSCRIPTION_TYPES = [LIMITED_ACCESS, FULL_ACCESS_COURSES, FULL_ACCESS_TIME_PERIOD, LIFETIME_ACCESS]
SUBSCRIPTION_DURATION_UNIT_OPTIONS = ['days', 'months', 'years']
4 changes: 2 additions & 2 deletions ecommerce/subscriptions/api/v2/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

SUBSCRIPTION_ATTRIBUTES_VALUES = lambda subscription: {
'limited-access': {
'number_of_courses': FuzzyInteger(1, 10).fuzz(),
'subscription_number_of_courses': FuzzyInteger(1, 10).fuzz(),
'subscription_duration_value': FuzzyInteger(1, 10).fuzz(),
'subscription_duration_unit': choice(subscription.attr.get_attribute_by_code('subscription_duration_unit').option_group.options.all()),
'subscription_actual_price': FuzzyFloat(100.0, 500.0).fuzz(),
Expand All @@ -50,7 +50,7 @@
'subscription_status': FuzzyChoice((True, False)).fuzz()
},
'full-access-time-period': {
'number_of_courses': FuzzyInteger(1, 10).fuzz(),
'subscription_number_of_courses': FuzzyInteger(1, 10).fuzz(),
'subscription_actual_price': FuzzyFloat(100.0, 500.0).fuzz(),
'subscription_price': FuzzyFloat(10.0, 99.0).fuzz(),
'subscription_display_order': FuzzyInteger(1, 5).fuzz(),
Expand Down
2 changes: 1 addition & 1 deletion ecommerce/subscriptions/api/v2/tests/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class SubscriptionProductMixin(object):
SUBSRIPTION_ATTRIBUTES = [
{
'name': 'Number of Courses',
'code': 'number_of_courses',
'code': 'subscription_number_of_courses',
'type': ProductAttribute.INTEGER,
},
{
Expand Down
8 changes: 4 additions & 4 deletions ecommerce/subscriptions/api/v2/tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,22 +68,22 @@ def test_subscription_serializer(self, subscription_type):
subscription = self.create_subscription(subscription_type=subscription_type)
conditional_attribute_values = {
LIMITED_ACCESS: lambda subscription: {
'number_of_courses': subscription.attr.number_of_courses,
'subscription_number_of_courses': subscription.attr.subscription_number_of_courses,
'subscription_duration_unit': subscription.attr.subscription_duration_unit.option,
'subscription_duration_value': subscription.attr.subscription_duration_value
},
FULL_ACCESS_COURSES: lambda subscription: {
'number_of_courses': None,
'subscription_number_of_courses': None,
'subscription_duration_unit': subscription.attr.subscription_duration_unit.option,
'subscription_duration_value': subscription.attr.subscription_duration_value
},
FULL_ACCESS_TIME_PERIOD: lambda subscription: {
'number_of_courses': subscription.attr.number_of_courses,
'subscription_number_of_courses': subscription.attr.subscription_number_of_courses,
'subscription_duration_unit': None,
'subscription_duration_value': None
},
LIFETIME_ACCESS: lambda subscription: {
'number_of_courses': None,
'subscription_number_of_courses': None,
'subscription_duration_unit': None,
'subscription_duration_value': None
},
Expand Down
4 changes: 2 additions & 2 deletions ecommerce/subscriptions/api/v2/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def test_create(self):
'subscription_actual_price': 100.00,
'subscription_price': 50.00,
'subscription_active_status': 'true',
'number_of_courses': 4,
'subscription_number_of_courses': 4,
'subscription_duration_value': 4,
'subscription_duration_unit': 'months',
'subscription_display_order': 1
Expand All @@ -89,7 +89,7 @@ def test_update(self):
'subscription_actual_price': 100.00,
'subscription_price': 50.00,
'subscription_active_status': 'inactive',
'number_of_courses': 4,
'subscription_number_of_courses': 4,
'subscription_duration_value': 4,
'subscription_duration_unit': 'months',
'subscription_display_order': 1
Expand Down
25 changes: 25 additions & 0 deletions ecommerce/subscriptions/api/v2/tests/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""
Subscription utility methods.
"""
from datetime import date
from factory.fuzzy import (
FuzzyChoice,
FuzzyDate,
FuzzyInteger,
)

from ecommerce.subscriptions.api.v2.tests.constants import SUBSCRIPTION_TYPES


def mock_user_subscription():
"""
Mock LMS response for user subscription.
"""
return {
'subscription_id': FuzzyInteger(1, 100).fuzz(),
'subscription_type': FuzzyChoice(SUBSCRIPTION_TYPES).fuzz(),
'expiration_date': FuzzyDate(start_date=date.today()).fuzz().strftime('%Y-%m-%d'),
'course_enrollments': [],
'max_allowed_courses': FuzzyInteger(1, 10).fuzz(),
'user': FuzzyInteger(1, 10).fuzz()
}
9 changes: 6 additions & 3 deletions ecommerce/subscriptions/modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,16 @@ def fulfill_product(self, order, lines, email_opt_in=False):
subscription = line.product
subscription_type = subscription.attr.subscription_type.option
subscription_expiration = get_subscription_expiration_date(subscription)
number_of_courses = subscription.attribute_values.filter(attribute__code='number_of_courses').first()
subscription_expiration = str(subscription_expiration) if subscription_expiration else None
subscription_number_of_courses = subscription.attribute_values.filter(
attribute__code='subscription_number_of_courses'
).first()
data = {
'user': order.user.username,
'subscription_id': subscription.id,
'expiration_date': str(subscription_expiration) if subscription_expiration else subscription_expiration,
'expiration_date': subscription_expiration,
'subscription_type': subscription_type,
'max_allowed_courses': number_of_courses.value if number_of_courses else None,
'max_allowed_courses': subscription_number_of_courses.value if subscription_number_of_courses else None
}
try:
response = self._post_to_user_subscription_api(data, user=order.user)
Expand Down
6 changes: 4 additions & 2 deletions ecommerce/subscriptions/tests/test_modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,15 @@ def setUp(self):

subscription_type = self.subscription.attr.subscription_type.option
subscription_expiration = get_subscription_expiration_date(self.subscription)
number_of_courses = self.subscription.attribute_values.filter(attribute__code='number_of_courses').first()
subscription_number_of_courses = self.subscription.attribute_values.filter(
attribute__code='subscription_number_of_courses'
).first()
self.user_subscription_api_payload = {
'user': self.order.user.username,
'subscription_id': self.subscription.id,
'expiration_date': str(subscription_expiration) if subscription_expiration else subscription_expiration,
'subscription_type': subscription_type,
'max_allowed_courses': number_of_courses.value if number_of_courses else None,
'max_allowed_courses': subscription_number_of_courses.value if subscription_number_of_courses else None,
}

def test_get_supported_lines(self):
Expand Down

0 comments on commit 8136aa5

Please sign in to comment.