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