Skip to content
Snippets Groups Projects
Unverified Commit 4b458099 authored by Zainab Amir's avatar Zainab Amir Committed by GitHub
Browse files

Add unique_together to CourseEntitlement (#22948)

Add unique_together on course_uuid and order_number to avoid
duplicate records

PROD-1064
parent 29b9b7b0
Branches
Tags release-2020-02-03-06.18
No related merge requests found
......@@ -141,6 +141,59 @@ class EntitlementViewSetTest(ModuleStoreTestCase):
)
assert results == CourseEntitlementSerializer(course_entitlement).data
def test_add_duplicate_entitlement(self):
"""
Request with identical course_uuid and order_number should not create duplicate
entitlement
"""
course_uuid = uuid.uuid4()
entitlement_data = self._get_data_set(self.user, str(course_uuid))
response = self.client.post(
self.entitlements_list_url,
data=json.dumps(entitlement_data),
content_type='application/json',
)
assert response.status_code == 201
response = self.client.post(
self.entitlements_list_url,
data=json.dumps(entitlement_data),
content_type='application/json',
)
assert response.status_code == 400
course_entitlement = CourseEntitlement.objects.filter(
course_uuid=course_uuid,
order_number=entitlement_data['order_number']
)
assert course_entitlement.count() == 1
def test_order_number_null(self):
"""
Test that for same course_uuid order_number set to null is treated as unique
entitlement
"""
course_uuid = uuid.uuid4()
entitlement_data = self._get_data_set(self.user, str(course_uuid))
entitlement_data['order_number'] = None
response = self.client.post(
self.entitlements_list_url,
data=json.dumps(entitlement_data),
content_type='application/json',
)
assert response.status_code == 201
response = self.client.post(
self.entitlements_list_url,
data=json.dumps(entitlement_data),
content_type='application/json',
)
assert response.status_code == 201
course_entitlement = CourseEntitlement.objects.filter(
course_uuid=course_uuid,
order_number=entitlement_data['order_number']
)
assert course_entitlement.count() == 2
def test_default_no_policy_entry(self):
"""
Verify that, when there are no entries in the course entitlement policy table,
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.27 on 2020-01-29 10:33
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entitlements', '0014_auto_20200115_2022'),
]
operations = [
migrations.AlterField(
model_name='courseentitlement',
name='order_number',
field=models.CharField(default=None, max_length=128, null=True),
),
migrations.AlterField(
model_name='historicalcourseentitlement',
name='order_number',
field=models.CharField(default=None, max_length=128, null=True),
),
migrations.AlterUniqueTogether(
name='courseentitlement',
unique_together=set([('course_uuid', 'order_number')]),
),
]
......@@ -171,12 +171,15 @@ class CourseEntitlement(TimeStampedModel):
blank=True,
on_delete=models.CASCADE,
)
order_number = models.CharField(max_length=128, null=True, blank=True)
order_number = models.CharField(max_length=128, default=None, null=True)
refund_locked = models.BooleanField(default=False)
_policy = models.ForeignKey(CourseEntitlementPolicy, null=True, blank=True, on_delete=models.CASCADE)
history = HistoricalRecords()
class Meta:
unique_together = ('course_uuid', 'order_number')
@property
def expired_at_datetime(self):
"""
......
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