def test_under_limit(self): """ Make sure that the User rate produced: - base_description is None - base_cost is 0.0 - unit_cost is equal to the per_excess_fee - quantity is equal to 0 - unit_description is None - total and subtotals are 0.0 """ invoice_date = utils.months_from_date(self.subscription.date_start, random.randint(2, self.subscription_length)) num_users = lambda: random.randint(0, self.user_rate.monthly_limit) num_active = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_inactive = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_inactive, is_active=False) tasks.generate_invoices(invoice_date) invoice = self.subscription.invoice_set.latest('date_created') user_line_item = invoice.lineitem_set.get_feature_by_type(FeatureType.USER).get() self.assertIsNone(user_line_item.base_description) self.assertEqual(user_line_item.base_cost, Decimal('0.0000')) self.assertIsNone(user_line_item.unit_description) self.assertEqual(user_line_item.quantity, 0) self.assertEqual(user_line_item.unit_cost, self.user_rate.per_excess_fee) self.assertEqual(user_line_item.subtotal, Decimal('0.0000')) self.assertEqual(user_line_item.total, Decimal('0.0000'))
def test_over_limit(self): """ Make sure that the User rate produced: - base_description is None - base_cost is 0.0 - unit_description is not None - unit_cost is equal to the per_excess_fee on the user rate - quantity is equal to number of commcare users in that domain minus the monthly_limit on the user rate - total and subtotals are equal to number of extra users * per_excess_fee """ invoice_date = utils.months_from_date(self.subscription.date_start, random.randint(2, self.subscription_length)) num_users = lambda: random.randint(self.user_rate.monthly_limit + 1, self.user_rate.monthly_limit + 2) num_active = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_inactive = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_inactive, is_active=False) tasks.generate_invoices(invoice_date) invoice = self.subscription.invoice_set.latest('date_created') user_line_item = invoice.lineitem_set.get_feature_by_type(FeatureType.USER).get() # there is no base cost self.assertIsNone(user_line_item.base_description) self.assertEqual(user_line_item.base_cost, Decimal('0.0000')) num_to_charge = num_active - self.user_rate.monthly_limit self.assertIsNotNone(user_line_item.unit_description) self.assertEqual(user_line_item.quantity, num_to_charge) self.assertEqual(user_line_item.unit_cost, self.user_rate.per_excess_fee) self.assertEqual(user_line_item.subtotal, num_to_charge * self.user_rate.per_excess_fee) self.assertEqual(user_line_item.total, num_to_charge * self.user_rate.per_excess_fee)
def _generate_users_fee_to_credit_against(self): user_rate = self.subscription.plan_version.feature_rates.filter(feature__feature_type=FeatureType.USER)[:1].get() num_active = random.randint(user_rate.monthly_limit + 1, user_rate.monthly_limit + 2) generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_excess = num_active - user_rate.monthly_limit per_month_fee = num_excess * user_rate.per_excess_fee return user_rate, per_month_fee
def setUp(self): super(TestCreditLines, self).setUp() self.product_rate = self.subscription.plan_version.product_rate self.user_rate = self.subscription.plan_version.feature_rates.filter(feature__feature_type=FeatureType.USER)[:1].get() num_active = random.randint(self.user_rate.monthly_limit + 1, self.user_rate.monthly_limit + 2) generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_excess = num_active - self.user_rate.monthly_limit self.monthly_user_fee = num_excess * self.user_rate.per_excess_fee
def _generate_users_fee_to_credit_against(self): user_rate = self.subscription.plan_version.feature_rates.filter( feature__feature_type=FeatureType.USER)[:1].get() num_active = random.randint(user_rate.monthly_limit + 1, user_rate.monthly_limit + 2) generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_excess = num_active - user_rate.monthly_limit per_month_fee = num_excess * user_rate.per_excess_fee return user_rate, per_month_fee
def setUp(self): super(TestCreditLines, self).setUp() self.product_rate = self.subscription.plan_version.product_rates.get() self.user_rate = self.subscription.plan_version.feature_rates.filter( feature__feature_type=FeatureType.USER)[:1].get() num_active = random.randint(self.user_rate.monthly_limit + 1, self.user_rate.monthly_limit + 2) generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_excess = num_active - self.user_rate.monthly_limit self.monthly_user_fee = num_excess * self.user_rate.per_excess_fee
def setUp(self): super(TestDomainInvoiceFactory, self).setUp() self.invoice_start, self.invoice_end = get_previous_month_date_range() self.domain = generator.arbitrary_domain() self.account = BillingAccount.get_or_create_account_by_domain( domain=self.domain.name, created_by="TEST")[0] self.community = DefaultProductPlan.get_default_plan_by_domain( self.domain).plan.get_version() generator.arbitrary_commcare_users_for_domain( self.domain.name, self.community.user_limit + 1) self.invoice_factory = DomainInvoiceFactory(self.invoice_start, self.invoice_end, self.domain)
def setUp(self): super(TestDomainInvoiceFactory, self).setUp() self.invoice_start, self.invoice_end = get_previous_month_date_range() self.domain = generator.arbitrary_domain() self.account = BillingAccount.get_or_create_account_by_domain( domain=self.domain.name, created_by="TEST" )[0] self.community = DefaultProductPlan.get_default_plan_by_domain( self.domain).plan.get_version() generator.arbitrary_commcare_users_for_domain( self.domain.name, self.community.user_limit + 1 ) self.invoice_factory = DomainInvoiceFactory( self.invoice_start, self.invoice_end, self.domain )
def test_over_limit(self): """ Make sure that the User rate produced: - base_description is None - base_cost is 0.0 - unit_description is not None - unit_cost is equal to the per_excess_fee on the user rate - quantity is equal to number of commcare users in that domain minus the monthly_limit on the user rate - total and subtotals are equal to number of extra users * per_excess_fee """ invoice_date = utils.months_from_date( self.subscription.date_start, random.randint(2, self.subscription_length)) num_users = lambda: random.randint(self.user_rate.monthly_limit + 1, self.user_rate.monthly_limit + 2) num_active = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_inactive = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_inactive, is_active=False) tasks.generate_invoices(invoice_date) invoice = self.subscription.invoice_set.latest('date_created') user_line_item = invoice.lineitem_set.get_feature_by_type( FeatureType.USER).get() # there is no base cost self.assertIsNone(user_line_item.base_description) self.assertEqual(user_line_item.base_cost, Decimal('0.0000')) num_to_charge = num_active - self.user_rate.monthly_limit self.assertIsNotNone(user_line_item.unit_description) self.assertEqual(user_line_item.quantity, num_to_charge) self.assertEqual(user_line_item.unit_cost, self.user_rate.per_excess_fee) self.assertEqual(user_line_item.subtotal, num_to_charge * self.user_rate.per_excess_fee) self.assertEqual(user_line_item.total, num_to_charge * self.user_rate.per_excess_fee)
def test_under_limit(self): """ Make sure that the User rate produced: - base_description is None - base_cost is 0.0 - unit_cost is equal to the per_excess_fee - quantity is equal to 0 - unit_description is None - total and subtotals are 0.0 """ invoice_date = utils.months_from_date( self.subscription.date_start, random.randint(2, self.subscription_length)) num_users = lambda: random.randint(0, self.user_rate.monthly_limit) num_active = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_active) num_inactive = num_users() generator.arbitrary_commcare_users_for_domain(self.domain.name, num_inactive, is_active=False) tasks.generate_invoices(invoice_date) invoice = self.subscription.invoice_set.latest('date_created') user_line_item = invoice.lineitem_set.get_feature_by_type( FeatureType.USER).get() self.assertIsNone(user_line_item.base_description) self.assertEqual(user_line_item.base_cost, Decimal('0.0000')) self.assertIsNone(user_line_item.unit_description) self.assertEqual(user_line_item.quantity, 0) self.assertEqual(user_line_item.unit_cost, self.user_rate.per_excess_fee) self.assertEqual(user_line_item.subtotal, Decimal('0.0000')) self.assertEqual(user_line_item.total, Decimal('0.0000'))