def test_create_subscription_mf_units_log_with_insufficient_data(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.activate() subscription.save() url = reverse('mf-log-units', kwargs={'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code}) data = { "count": 150, "date": "2008-12-24", "update_type": "absolute" } for field in data: data_copy = data.copy() data_copy.pop(field) response = self.client.patch(url, json.dumps(data_copy), content_type='application/json') assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == {field: ['This field is required.']}
def test_create_subscription_mf_units_log_with_sub_canceled_before(self): subscription = SubscriptionFactory.create( state=Subscription.STATES.CANCELED, start_date=datetime.date(2016, 1, 1), cancel_date=datetime.date(2016, 12, 31)) metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) url = reverse('mf-log-units', kwargs={ 'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code }) date = str(datetime.date.today()) response = self.client.patch(url, json.dumps({ "count": 150, "date": date, "update_type": "absolute" }), content_type='application/json') assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == {"detail": "Date is out of bounds."}
def test_create_subscription_mf_units_log(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.activate() subscription.save() url = reverse('mf-log-units', kwargs={'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code}) date = str(datetime.date.today()) response = self.client.patch(url, json.dumps({ "count": 150, "date": date, "update_type": "absolute" }), content_type='application/json') assert response.status_code == status.HTTP_200_OK assert response.data == {'count': 150} response = self.client.patch(url, json.dumps({ "count": 29, "date": date, "update_type": "relative" }), content_type='application/json') assert response.status_code == status.HTTP_200_OK assert response.data == {'count': 179}
def test_create_subscription_mf_units_log_with_invalid_date(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.activate() subscription.save() url = reverse('mf-log-units', kwargs={ 'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code }) response = self.client.patch(url, json.dumps({ "count": 150, "date": "2008-12-24", "update_type": "absolute" }), content_type='application/json') assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == {'detail': 'Date is out of bounds.'}
def test_subscription_mf_units_log_intervals_3(self): # Every 2 weeks, 8 days of trial subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.start_date = datetime.date(year=2015, month=2, day=17) subscription.activate() subscription.save() subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.separate_cycles_during_trial = True subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.save() start_date = datetime.date(year=2015, month=5, day=31) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=31)) end_date = datetime.date(year=2015, month=5, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=31)) start_date = datetime.date(year=2015, month=6, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=1)) end_date = datetime.date(year=2015, month=6, day=7) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=1)) start_date = datetime.date(year=2015, month=6, day=8) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=8)) end_date = datetime.date(year=2015, month=6, day=14) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=8)) start_date = datetime.date(year=2015, month=6, day=15) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=15)) end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=28))
def test_subscription_billing_cycle_intervals_3(self): """ Every 2 weeks, 8 days of trial separate_cycles_during_trial = True generate_documents_on_trial_end = True """ subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.separate_cycles_during_trial = True subscription.plan.generate_documents_on_trial_end = True subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.activate() subscription.save() start_date = subscription.start_date reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=5, day=31) # billing cycle alignment assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=6, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=6, day=7) # trial end assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=6, day=8) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=6, day=14) # cycle realignment after trial assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=6, day=15) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.cycle_end_date(reference_date)
def test_subscription_mf_units_log_intervals_1(self): # Every month, 16 days of trial subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.start_date = datetime.date(year=2015, month=2, day=17) subscription.activate() subscription.save() subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.save() subscription.plan.separate_cycles_during_trial = True subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=17)) end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=23)) start_date = datetime.date(year=2015, month=3, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=1)) end_date = datetime.date(year=2015, month=3, day=4) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=1)) start_date = datetime.date(year=2015, month=3, day=5) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=5)) end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=22)) start_date = datetime.date(year=2015, month=4, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=4, day=5)) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=4, day=22))
def test_create_subscription_mf_units_log_with_unactivated_sub(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) url = reverse('mf-log-units', kwargs={'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code}) response = self.client.patch(url) assert response.status_code == status.HTTP_403_FORBIDDEN assert response.data == {'detail': 'Subscription is not active.'}
def test_subscription_billing_cycle_intervals_1(self): """ Every month, 16 days of trial separate_cycles_during_trial = True generate_documents_on_trial_end = False """ subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) start_date = datetime.date(year=2015, month=2, day=17) subscription.start_date = start_date subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) subscription.activate() subscription.save() subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.separate_cycles_during_trial = True subscription.plan.generate_documents_on_trial_end = False subscription.plan.save() reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=3, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=4, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.cycle_end_date(reference_date)
def test_subscription_mf_units_log_intervals_4(self): # Every year, 3 months (90 days) of trial subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.start_date = datetime.date(year=2015, month=2, day=17) subscription.activate() subscription.save() subscription.plan.interval = Plan.INTERVALS.YEAR subscription.plan.interval_count = 1 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=2, day=2) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=90)) subscription.save() start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=2) ) end_date = datetime.date(year=2015, month=5, day=3) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=2)) start_date = datetime.date(year=2015, month=5, day=4) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=4)) end_date = datetime.date(year=2015, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=5)) start_date = datetime.date(year=2016, month=1, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2016, month=1, day=1)) end_date = datetime.date(year=2016, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2016, month=12, day=31))
def test_create_subscription_mf_units_log_with_invalid_date(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.activate() subscription.save() url = reverse('mf-log-units', kwargs={'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code}) response = self.client.patch(url, json.dumps({ "count": 150, "date": "2008-12-24", "update_type": "absolute" }), content_type='application/json') assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == {'detail': 'Date is out of bounds.'}
def test_create_subscription_mf_units_log_with_sub_canceled_before(self): subscription = SubscriptionFactory.create(state=Subscription.STATES.CANCELED, start_date=datetime.date(2016, 1, 1), cancel_date=datetime.date(2016, 12, 31)) metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) url = reverse('mf-log-units', kwargs={'subscription_pk': subscription.pk, 'customer_pk': subscription.customer.pk, 'mf_product_code': metered_feature.product_code}) date = str(datetime.date.today()) response = self.client.patch(url, json.dumps({ "count": 150, "date": date, "update_type": "absolute" }), content_type='application/json') assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.data == {"detail": "Date is out of bounds."}
def test_subscription_billing_cycle_intervals(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) start_date = datetime.date(year=2015, month=2, day=17) subscription.start_date = start_date subscription.activate() subscription.save() with patch('silver.models.timezone') as mock_timezone: # Every month, 16 days of trial subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.save() subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=3, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=4, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.current_end_date # Every 2 months, 5 months of trial (2015-05-30) subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2014, month=12, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=150)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2014, month=12, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=1, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=3, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=5, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=30) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=7, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=8, day=31) assert end_date == subscription.current_end_date # Every 2 weeks, 8 days of trial subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=5, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=6, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=14) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=6, day=15) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.current_end_date # Every year, 3 months (90 days) of trial subscription.plan.interval = Plan.INTERVALS.YEAR subscription.plan.interval_count = 1 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=2, day=2) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=90)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=12, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2016, month=1, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2016, month=12, day=31) assert end_date == subscription.current_end_date
def test_subscription_billing_cycle_intervals(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) start_date = datetime.date(year=2015, month=2, day=17) subscription.start_date = start_date subscription.activate() subscription.save() with patch('silver.models.timezone') as mock_timezone: # Every month, 16 days of trial subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.save() subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=3, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=4, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.current_end_date # Every 2 months, 5 months of trial (2015-05-30) subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2014, month=12, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=150)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2014, month=12, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=1, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=3, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=5, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=30) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=7, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=8, day=31) assert end_date == subscription.current_end_date # Every 2 weeks, 8 days of trial subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=5, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=6, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=14) assert end_date == subscription.current_end_date start_date = datetime.date(year=2015, month=6, day=15) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.current_end_date # Every year, 3 months (90 days) of trial subscription.plan.interval = Plan.INTERVALS.YEAR subscription.plan.interval_count = 1 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=2, day=2) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=90)) subscription.save() start_date = subscription.start_date mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2015, month=12, day=31) assert end_date == subscription.current_end_date start_date = datetime.date(year=2016, month=1, day=1) mock_timezone.now.return_value = datetime.datetime.combine( start_date, datetime.datetime.min.time()) assert start_date == subscription.current_start_date end_date = datetime.date(year=2016, month=12, day=31) assert end_date == subscription.current_end_date
def test_subscription_billing_cycle_intervals_2(self): """ Every 2 months, 150 days of trial (2015-05-30) separate_cycles_during_trial = True generate_documents_on_trial_end = True """ subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 2 subscription.plan.separate_cycles_during_trial = True subscription.plan.generate_documents_on_trial_end = True subscription.plan.save() subscription.start_date = datetime.date(year=2014, month=12, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=150)) subscription.activate() subscription.save() start_date = subscription.start_date reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2014, month=12, day=31) assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=1, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=3, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=5, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=5, day=30) # trial end assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=5, day=31) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=6, day=30) # realigned to initial alignment assert end_date == subscription.cycle_end_date(reference_date) start_date = datetime.date(year=2015, month=7, day=1) reference_date = start_date assert start_date == subscription.cycle_start_date(reference_date) end_date = datetime.date(year=2015, month=8, day=31) assert end_date == subscription.cycle_end_date(reference_date)
def test_subscription_mf_units_log_intervals(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.start_date = datetime.date(year=2015, month=2, day=17) subscription.activate() subscription.save() # Every month, 16 days of trial subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.save() subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=17)) end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=23)) start_date = datetime.date(year=2015, month=3, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=1)) end_date = datetime.date(year=2015, month=3, day=4) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=1)) start_date = datetime.date(year=2015, month=3, day=5) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=5)) end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=22)) start_date = datetime.date(year=2015, month=4, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=4, day=5)) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=4, day=22)) # Every 2 months, 5 months of trial (2015-05-30) subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2014, month=12, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=150)) subscription.save() start_date = datetime.date(year=2014, month=12, day=31) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2014, month=12, day=31)) end_date = datetime.date(year=2014, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2014, month=12, day=31)) start_date = datetime.date(year=2015, month=1, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=1, day=1)) end_date = datetime.date(year=2015, month=1, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=1, day=1)) start_date = datetime.date(year=2015, month=3, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=23)) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=4, day=30)) start_date = datetime.date(year=2015, month=5, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=23)) end_date = datetime.date(year=2015, month=5, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=30)) start_date = datetime.date(year=2015, month=6, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=1)) end_date = datetime.date(year=2015, month=6, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=1)) # Every 2 weeks, 8 days of trial subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.save() start_date = datetime.date(year=2015, month=5, day=31) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=31)) end_date = datetime.date(year=2015, month=5, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=31)) start_date = datetime.date(year=2015, month=6, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=1)) end_date = datetime.date(year=2015, month=6, day=7) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=1)) start_date = datetime.date(year=2015, month=6, day=8) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=8)) end_date = datetime.date(year=2015, month=6, day=14) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=8)) start_date = datetime.date(year=2015, month=6, day=15) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=15)) end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=28)) # Every year, 3 months (90 days) of trial subscription.plan.interval = Plan.INTERVALS.YEAR subscription.plan.interval_count = 1 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=2, day=2) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=90)) subscription.save() start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=2)) end_date = datetime.date(year=2015, month=5, day=3) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=2)) start_date = datetime.date(year=2015, month=5, day=4) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=4)) end_date = datetime.date(year=2015, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=5)) start_date = datetime.date(year=2016, month=1, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2016, month=1, day=1)) end_date = datetime.date(year=2016, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2016, month=12, day=31))
def test_subscription_mf_units_log_intervals(self): subscription = SubscriptionFactory.create() metered_feature = MeteredFeatureFactory.create() subscription.plan.metered_features.add(metered_feature) subscription.start_date = datetime.date(year=2015, month=2, day=17) subscription.activate() subscription.save() # Every month, 16 days of trial subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 1 subscription.plan.save() subscription.trial_end = (subscription.start_date + datetime.timedelta(days=15)) start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=17)) end_date = datetime.date(year=2015, month=2, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=23)) start_date = datetime.date(year=2015, month=3, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=1)) end_date = datetime.date(year=2015, month=3, day=4) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=1)) start_date = datetime.date(year=2015, month=3, day=5) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=5)) end_date = datetime.date(year=2015, month=3, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=3, day=22)) start_date = datetime.date(year=2015, month=4, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=4, day=5)) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=4, day=22)) # Every 2 months, 5 months of trial (2015-05-30) subscription.plan.interval = Plan.INTERVALS.MONTH subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2014, month=12, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=150)) subscription.save() start_date = datetime.date(year=2014, month=12, day=31) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2014, month=12, day=31)) end_date = datetime.date(year=2014, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2014, month=12, day=31)) start_date = datetime.date(year=2015, month=1, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=1, day=1)) end_date = datetime.date(year=2015, month=1, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=1, day=1)) start_date = datetime.date(year=2015, month=3, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=3, day=23)) end_date = datetime.date(year=2015, month=4, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=4, day=30)) start_date = datetime.date(year=2015, month=5, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=23)) end_date = datetime.date(year=2015, month=5, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=30)) start_date = datetime.date(year=2015, month=6, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=1)) end_date = datetime.date(year=2015, month=6, day=30) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=1)) # Every 2 weeks, 8 days of trial subscription.plan.interval = Plan.INTERVALS.WEEK subscription.plan.interval_count = 2 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=5, day=31) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=7)) subscription.save() start_date = datetime.date(year=2015, month=5, day=31) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=31)) end_date = datetime.date(year=2015, month=5, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=31)) start_date = datetime.date(year=2015, month=6, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=1)) end_date = datetime.date(year=2015, month=6, day=7) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=1)) start_date = datetime.date(year=2015, month=6, day=8) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=8)) end_date = datetime.date(year=2015, month=6, day=14) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=8)) start_date = datetime.date(year=2015, month=6, day=15) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=6, day=15)) end_date = datetime.date(year=2015, month=6, day=28) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=6, day=28)) # Every year, 3 months (90 days) of trial subscription.plan.interval = Plan.INTERVALS.YEAR subscription.plan.interval_count = 1 subscription.plan.save() subscription.start_date = datetime.date(year=2015, month=2, day=2) subscription.trial_end = (subscription.start_date + datetime.timedelta(days=90)) subscription.save() start_date = subscription.start_date assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=2, day=2) ) end_date = datetime.date(year=2015, month=5, day=3) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=2, day=2)) start_date = datetime.date(year=2015, month=5, day=4) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2015, month=5, day=4)) end_date = datetime.date(year=2015, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2015, month=5, day=5)) start_date = datetime.date(year=2016, month=1, day=1) assert start_date == subscription.bucket_start_date( reference_date=datetime.date(year=2016, month=1, day=1)) end_date = datetime.date(year=2016, month=12, day=31) assert end_date == subscription.bucket_end_date( reference_date=datetime.date(year=2016, month=12, day=31))