more tests
diff --git a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
index 3f8f917..b2975d7 100644
--- a/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
+++ b/erpnext/accounts/doctype/subscriptions/test_subscriptions.py
@@ -5,7 +5,7 @@
import frappe
import unittest
-from frappe.utils.data import nowdate, add_days, get_last_day, cint, getdate, add_to_date, get_datetime_str, add_months
+from frappe.utils.data import nowdate, add_days, get_last_day, cint, getdate, add_to_date, get_datetime_str, add_months, date_diff
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
@@ -270,6 +270,77 @@
subscription.delete()
+ def test_subscription_cancelation_invoices(self):
+ subscription = frappe.new_doc('Subscriptions')
+ subscription.subscriber = '_Test Customer'
+ subscription.append('plans', {'plan': '_Test Plan Name'})
+ subscription.save()
+
+ self.assertEqual(subscription.status, 'Active')
+
+ subscription.cancel_subscription()
+ # Invoice must have been generated
+ self.assertEqual(len(subscription.invoices), 1)
+
+ invoice = subscription.get_current_invoice()
+ diff = date_diff(nowdate(), subscription.current_invoice_start) + 1
+ plan_days = date_diff(subscription.current_invoice_end, subscription.current_invoice_start) + 1
+ prorate_factor = diff/plan_days
+
+ self.assertEqual(
+ subscription.get_proration_factor(
+ subscription.current_invoice_end,
+ subscription.current_invoice_start
+ ), prorate_factor)
+ self.assertEqual(invoice.grand_total, prorate_factor * 900)
+ self.assertEqual(subscription.status, 'Canceled')
+
+ subscription.delete()
+
+ def test_subscription_cancellation_invoices_with_proration_false(self):
+ settings = frappe.get_single('Subscription Settings')
+ to_prorate = settings.prorate
+ settings.prorate = 0
+ settings.save()
+
+ subscription = frappe.new_doc('Subscriptions')
+ subscription.subscriber = '_Test Customer'
+ subscription.append('plans', {'plan': '_Test Plan Name'})
+ subscription.save()
+ subscription.cancel_subscription()
+ invoice = subscription.get_current_invoice()
+
+ self.assertEqual(invoice.grand_total, 900)
+
+ settings.prorate = to_prorate
+ settings.save()
+
+ subscription.delete()
+
+ def test_subscription_cancellation_invoices_with_proration_true(self):
+ settings = frappe.get_single('Subscription Settings')
+ to_prorate = settings.prorate
+ settings.prorate = 1
+ settings.save()
+
+ subscription = frappe.new_doc('Subscriptions')
+ subscription.subscriber = '_Test Customer'
+ subscription.append('plans', {'plan': '_Test Plan Name'})
+ subscription.save()
+ subscription.cancel_subscription()
+
+ invoice = subscription.get_current_invoice()
+ diff = date_diff(nowdate(), subscription.current_invoice_start) + 1
+ plan_days = date_diff(subscription.current_invoice_end, subscription.current_invoice_start) + 1
+ prorate_factor = diff/plan_days
+
+ self.assertEqual(invoice.grand_total, prorate_factor * 900)
+
+ settings.prorate = to_prorate
+ settings.save()
+
+ subscription.delete()
+
def test_subcription_cancelation_and_process(self):
settings = frappe.get_single('Subscription Settings')
default_grace_period_action = settings.cancel_after_grace