Test that creating products w/o correct billing address fails
This commit is contained in:
parent
7b83efe995
commit
ab412cb877
3 changed files with 89 additions and 13 deletions
33
uncloud_pay/migrations/0014_auto_20200825_1915.py
Normal file
33
uncloud_pay/migrations/0014_auto_20200825_1915.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Generated by Django 3.1 on 2020-08-25 19:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('uncloud_pay', '0013_auto_20200809_1237'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='sampleonetimeproduct',
|
||||||
|
name='ot_price',
|
||||||
|
field=models.IntegerField(default=5),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='samplerecurringproduct',
|
||||||
|
name='rc_price',
|
||||||
|
field=models.IntegerField(default=10),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='samplerecurringproductonetimefee',
|
||||||
|
name='ot_price',
|
||||||
|
field=models.IntegerField(default=5),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='samplerecurringproductonetimefee',
|
||||||
|
name='rc_price',
|
||||||
|
field=models.IntegerField(default=10),
|
||||||
|
),
|
||||||
|
]
|
|
@ -789,8 +789,25 @@ class Product(UncloudModel):
|
||||||
# FIXME: use the right type of exception here!
|
# FIXME: use the right type of exception here!
|
||||||
raise Exception("Did not implement the discounter for this case")
|
raise Exception("Did not implement the discounter for this case")
|
||||||
|
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
try:
|
||||||
|
ba = BillingAddress.get_address_for(self.owner)
|
||||||
|
except BillingAddress.DoesNotExist:
|
||||||
|
raise ValidationError("User does not have a billing address")
|
||||||
|
|
||||||
|
if not ba.active:
|
||||||
|
raise ValidationError("User does not have an active billing address")
|
||||||
|
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# Sample products included into uncloud
|
# Sample products included into uncloud
|
||||||
class SampleOneTimeProduct(Product):
|
class SampleOneTimeProduct(Product):
|
||||||
|
"""
|
||||||
|
Products are usually more complex, but this product shows how easy
|
||||||
|
it can be to create your own one time product.
|
||||||
|
"""
|
||||||
|
|
||||||
default_recurring_period = RecurringPeriod.ONE_TIME
|
default_recurring_period = RecurringPeriod.ONE_TIME
|
||||||
|
|
||||||
|
@ -801,6 +818,11 @@ class SampleOneTimeProduct(Product):
|
||||||
return self.ot_price
|
return self.ot_price
|
||||||
|
|
||||||
class SampleRecurringProduct(Product):
|
class SampleRecurringProduct(Product):
|
||||||
|
"""
|
||||||
|
Products are usually more complex, but this product shows how easy
|
||||||
|
it can be to create your own recurring fee product.
|
||||||
|
"""
|
||||||
|
|
||||||
default_recurring_period = RecurringPeriod.PER_30D
|
default_recurring_period = RecurringPeriod.PER_30D
|
||||||
|
|
||||||
rc_price = models.IntegerField(default=10)
|
rc_price = models.IntegerField(default=10)
|
||||||
|
@ -810,6 +832,11 @@ class SampleRecurringProduct(Product):
|
||||||
return self.rc_price
|
return self.rc_price
|
||||||
|
|
||||||
class SampleRecurringProductOneTimeFee(Product):
|
class SampleRecurringProductOneTimeFee(Product):
|
||||||
|
"""
|
||||||
|
Products are usually more complex, but this product shows how easy
|
||||||
|
it can be to create your own one time + recurring fee product.
|
||||||
|
"""
|
||||||
|
|
||||||
default_recurring_period = RecurringPeriod.PER_30D
|
default_recurring_period = RecurringPeriod.PER_30D
|
||||||
|
|
||||||
ot_price = models.IntegerField(default=5)
|
ot_price = models.IntegerField(default=5)
|
||||||
|
|
|
@ -16,7 +16,7 @@ class ProductTestCase(TestCase):
|
||||||
username='random_user',
|
username='random_user',
|
||||||
email='jane.random@domain.tld')
|
email='jane.random@domain.tld')
|
||||||
|
|
||||||
ba = BillingAddress.objects.create(
|
self.ba = BillingAddress.objects.create(
|
||||||
owner=self.user,
|
owner=self.user,
|
||||||
organization = 'Test org',
|
organization = 'Test org',
|
||||||
street="unknown",
|
street="unknown",
|
||||||
|
@ -34,6 +34,29 @@ class ProductTestCase(TestCase):
|
||||||
self.assertEqual(p.one_time_price, 5)
|
self.assertEqual(p.one_time_price, 5)
|
||||||
self.assertEqual(p.recurring_price, 0)
|
self.assertEqual(p.recurring_price, 0)
|
||||||
|
|
||||||
|
def test_create_product_without_active_billing_address(self):
|
||||||
|
"""
|
||||||
|
Fail to create a product without an active billing address
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.ba.active = False
|
||||||
|
self.ba.save()
|
||||||
|
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
p = SampleOneTimeProduct.objects.create(owner=self.user)
|
||||||
|
|
||||||
|
def test_create_product_without_billing_address(self):
|
||||||
|
"""
|
||||||
|
Fail to create a product without a billing address
|
||||||
|
"""
|
||||||
|
|
||||||
|
user2 = get_user_model().objects.create(
|
||||||
|
username='random_user2',
|
||||||
|
email='jane.randomly@domain.tld')
|
||||||
|
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
p = SampleOneTimeProduct.objects.create(owner=user2)
|
||||||
|
|
||||||
|
|
||||||
def test_create_order_creates_correct_order_count(self):
|
def test_create_order_creates_correct_order_count(self):
|
||||||
"""
|
"""
|
||||||
|
@ -329,6 +352,7 @@ class BillTestCase(TestCase):
|
||||||
|
|
||||||
|
|
||||||
class ModifyProductTestCase(TestCase):
|
class ModifyProductTestCase(TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.user = get_user_model().objects.create(
|
self.user = get_user_model().objects.create(
|
||||||
username='random_user',
|
username='random_user',
|
||||||
|
@ -340,23 +364,15 @@ class ModifyProductTestCase(TestCase):
|
||||||
street="unknown",
|
street="unknown",
|
||||||
city="unknown",
|
city="unknown",
|
||||||
postal_code="somewhere else",
|
postal_code="somewhere else",
|
||||||
active=False)
|
active=True)
|
||||||
|
|
||||||
def test_user_no_address(self):
|
def test_modify_recurring_product(self):
|
||||||
"""
|
|
||||||
Raise an error, when there is no address
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
self.assertRaises(uncloud_pay.models.BillingAddress.DoesNotExist,
|
|
||||||
BillingAddress.get_address_for,
|
|
||||||
self.user)
|
|
||||||
|
|
||||||
def test_user_only_inactive_address(self):
|
|
||||||
"""
|
|
||||||
Raise an error, when there is no active address
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
product = SampleRecurringProduct.objects.create(owner=self.user)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# class NotABillingTC(TestCase):
|
# class NotABillingTC(TestCase):
|
||||||
|
|
Loading…
Reference in a new issue