Improve billing address testing
This commit is contained in:
parent
78d1de9031
commit
fd39526350
2 changed files with 104 additions and 13 deletions
|
@ -422,6 +422,7 @@ class Bill(models.Model):
|
||||||
|
|
||||||
ending_date = end_of_month(starting_date)
|
ending_date = end_of_month(starting_date)
|
||||||
|
|
||||||
|
# FIXME above: maybe even use different date / active / open bill
|
||||||
bill, created = cls.objects.get_or_create(
|
bill, created = cls.objects.get_or_create(
|
||||||
owner=owner,
|
owner=owner,
|
||||||
starting_date=starting_date,
|
starting_date=starting_date,
|
||||||
|
@ -438,8 +439,13 @@ class Bill(models.Model):
|
||||||
starting_date=starting_date,
|
starting_date=starting_date,
|
||||||
ending_date=ending_date)
|
ending_date=ending_date)
|
||||||
|
|
||||||
# Bill all active, recurring orders
|
else:
|
||||||
#if order.
|
# Bill all recurring orders -- filter in the next iteration :-)
|
||||||
|
|
||||||
|
br = BillRecord.objects.create(bill=bill,
|
||||||
|
order=order,
|
||||||
|
starting_date=starting_date,
|
||||||
|
ending_date=ending_date)
|
||||||
|
|
||||||
return bill
|
return bill
|
||||||
|
|
||||||
|
@ -450,8 +456,7 @@ class Bill(models.Model):
|
||||||
# maxtime = time of last order
|
# maxtime = time of last order
|
||||||
# iterate month based through it
|
# iterate month based through it
|
||||||
|
|
||||||
cls.assign_orders_to_bill(owner, year, month)
|
cls.create_next_bill_for_user(owner)
|
||||||
pass
|
|
||||||
|
|
||||||
def assign_orders_to_bill(self, owner, year, month):
|
def assign_orders_to_bill(self, owner, year, month):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -5,9 +5,77 @@ from datetime import datetime, date, timedelta
|
||||||
from .models import *
|
from .models import *
|
||||||
from uncloud_service.models import GenericServiceProduct
|
from uncloud_service.models import GenericServiceProduct
|
||||||
|
|
||||||
|
class BillingAddressTestCase(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.user = get_user_model().objects.create(
|
||||||
|
username='random_user',
|
||||||
|
email='jane.random@domain.tld')
|
||||||
|
|
||||||
|
|
||||||
|
def test_user_only_inactive_address(self):
|
||||||
|
"""
|
||||||
|
Raise an error, when there is no active address
|
||||||
|
"""
|
||||||
|
|
||||||
|
ba = BillingAddress.objects.create(
|
||||||
|
owner=self.user,
|
||||||
|
organization = 'Test org',
|
||||||
|
street="unknown",
|
||||||
|
city="unknown",
|
||||||
|
postal_code="somewhere else",
|
||||||
|
active=False)
|
||||||
|
|
||||||
|
self.assertRaises(uncloud_pay.models.BillingAddress.DoesNotExist,
|
||||||
|
BillingAddress.get_address_for,
|
||||||
|
self.user)
|
||||||
|
|
||||||
|
def test_user_only_active_address(self):
|
||||||
|
"""
|
||||||
|
Find the active address
|
||||||
|
"""
|
||||||
|
|
||||||
|
ba = BillingAddress.objects.create(
|
||||||
|
owner=self.user,
|
||||||
|
organization = 'Test org',
|
||||||
|
street="unknown",
|
||||||
|
city="unknown",
|
||||||
|
postal_code="unknown",
|
||||||
|
active=True)
|
||||||
|
|
||||||
|
|
||||||
|
self.assertEqual(BillingAddress.get_address_for(self.user), ba)
|
||||||
|
|
||||||
|
def test_multiple_addresses(self):
|
||||||
|
"""
|
||||||
|
Find the active address only, skip inactive
|
||||||
|
"""
|
||||||
|
|
||||||
|
ba = BillingAddress.objects.create(
|
||||||
|
owner=self.user,
|
||||||
|
organization = 'Test org',
|
||||||
|
street="unknown",
|
||||||
|
city="unknown",
|
||||||
|
postal_code="unknown",
|
||||||
|
active=True)
|
||||||
|
|
||||||
|
ba2 = BillingAddress.objects.create(
|
||||||
|
owner=self.user,
|
||||||
|
organization = 'Test org',
|
||||||
|
street="unknown",
|
||||||
|
city="unknown",
|
||||||
|
postal_code="somewhere else",
|
||||||
|
active=False)
|
||||||
|
|
||||||
|
|
||||||
|
self.assertEqual(BillingAddress.get_address_for(self.user), ba)
|
||||||
|
|
||||||
|
|
||||||
class ProductActivationTestCase(TestCase):
|
class ProductActivationTestCase(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
self.user_without_address = get_user_model().objects.create(
|
||||||
|
username='no_home_person',
|
||||||
|
email='far.away@domain.tld')
|
||||||
|
|
||||||
self.user = get_user_model().objects.create(
|
self.user = get_user_model().objects.create(
|
||||||
username='jdoe',
|
username='jdoe',
|
||||||
email='john.doe@domain.tld')
|
email='john.doe@domain.tld')
|
||||||
|
@ -16,23 +84,21 @@ class ProductActivationTestCase(TestCase):
|
||||||
username='recurrent_product_user',
|
username='recurrent_product_user',
|
||||||
email='jane.doe@domain.tld')
|
email='jane.doe@domain.tld')
|
||||||
|
|
||||||
self.user_without_address = get_user_model().objects.create(
|
BillingAddress.objects.create(
|
||||||
username='no_home_person',
|
|
||||||
email='far.away@domain.tld')
|
|
||||||
|
|
||||||
self.billing_address = BillingAddress.objects.create(
|
|
||||||
owner=self.user,
|
owner=self.user,
|
||||||
organization = 'Test org',
|
organization = 'Test org',
|
||||||
street="unknown",
|
street="unknown",
|
||||||
city="unknown",
|
city="unknown",
|
||||||
postal_code="unknown")
|
postal_code="unknown",
|
||||||
|
active=True)
|
||||||
|
|
||||||
self.billing_address = BillingAddress.objects.create(
|
BillingAddress.objects.create(
|
||||||
owner=self.recurring_user,
|
owner=self.recurring_user,
|
||||||
organization = 'Test org',
|
organization = 'Test org',
|
||||||
street="Somewhere",
|
street="Somewhere",
|
||||||
city="Else",
|
city="Else",
|
||||||
postal_code="unknown")
|
postal_code="unknown",
|
||||||
|
active=True)
|
||||||
|
|
||||||
self.order_meta = {}
|
self.order_meta = {}
|
||||||
self.order_meta[1] = {
|
self.order_meta[1] = {
|
||||||
|
@ -49,7 +115,18 @@ class ProductActivationTestCase(TestCase):
|
||||||
recurring_period=RecurringPeriod.ONE_TIME,
|
recurring_period=RecurringPeriod.ONE_TIME,
|
||||||
price=self.order_meta[1]['price'],
|
price=self.order_meta[1]['price'],
|
||||||
description=self.order_meta[1]['description'],
|
description=self.order_meta[1]['description'],
|
||||||
billing_address=self.billing_address)
|
billing_address=BillingAddress.get_address_for(self.user))
|
||||||
|
|
||||||
|
self.recurring_order = Order.objects.create(
|
||||||
|
owner=self.recurring_user,
|
||||||
|
starting_date=timezone.make_aware(datetime.datetime(2020,3,3)),
|
||||||
|
recurring_period=RecurringPeriod.PER_30D,
|
||||||
|
price=15,
|
||||||
|
description="A pretty VM",
|
||||||
|
billing_address=BillingAddress.get_address_for(self.recurring_user)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_bill_one_time_one_bill_record(self):
|
def test_bill_one_time_one_bill_record(self):
|
||||||
|
@ -70,6 +147,15 @@ class ProductActivationTestCase(TestCase):
|
||||||
self.assertEqual(bill.sum, self.order_meta[1]['price'])
|
self.assertEqual(bill.sum, self.order_meta[1]['price'])
|
||||||
|
|
||||||
|
|
||||||
|
def test_bill_creates_record_for_recurring_order(self):
|
||||||
|
"""
|
||||||
|
Ensure there is only 1 bill record per order
|
||||||
|
"""
|
||||||
|
|
||||||
|
bill = Bill.create_next_bill_for_user(self.recurring_user)
|
||||||
|
|
||||||
|
self.assertEqual(self.recurring_order.billrecord_set.count(), 1)
|
||||||
|
self.assertEqual(bill.billrecord_set.count(), 1)
|
||||||
|
|
||||||
# class NotABillingTC(TestCase):
|
# class NotABillingTC(TestCase):
|
||||||
# #class BillingTestCase(TestCase):
|
# #class BillingTestCase(TestCase):
|
||||||
|
|
Loading…
Reference in a new issue