def test_manager_process_expired_single_group(django_user_model): """Tests handling expiry with user with single group.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test') group.user_set.add(user) user_count = group.user_set.all().count() subscription_plan = create_subscription_plan(group) cost = create_cost(subscription_plan) user_subscription = models.UserSubscription.objects.create( user=user, plan_cost=cost, subscription_plan=cost.plans.all()[0], date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) user_subscription_id = user_subscription.id manager = _manager.Manager() manager.process_expired(user_subscription) user_subscription = models.UserSubscription.objects.get( id=user_subscription_id) assert group.user_set.all().count() == user_count - 1 assert user_subscription.active is False assert user_subscription.cancelled is True
def test_manager_process_subscriptions_with_new(django_user_model): """Tests processing of new subscription via process_subscriptions.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test') user_count = group.user_set.all().count() subscription_plan = create_subscription_plan(group) plan_cost = create_cost(subscription_plan) user_subscription = models.UserSubscription.objects.create( user=user, plan_cost=plan_cost, subscription_plan=subscription_plan, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=None, date_billing_next=None, active=False, cancelled=False, ) subscription_id = user_subscription.id manager = _manager.Manager() manager.process_subscriptions() user_subscription = models.UserSubscription.objects.get(id=subscription_id) assert group.user_set.all().count() == user_count + 1 assert user_subscription.active is True assert user_subscription.cancelled is False
def test_manager_process_new_next_date(django_user_model): """Tests that next billing date uses billing start date.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test') subscription_plan = create_subscription_plan(group) plan_cost = create_cost(subscription_plan) user_subscription = models.UserSubscription.objects.create( user=user, plan_cost=plan_cost, subscription_plan=subscription_plan, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=None, date_billing_last=None, date_billing_next=datetime(2018, 1, 1, 1, 1, 1), active=False, cancelled=False, ) manager = _manager.Manager() manager.process_new(user_subscription) user_subscription_id = user_subscription.id user_subscription = models.UserSubscription.objects.get( id=user_subscription_id) next_date = datetime(2018, 1, 31, 11, 30, 0, 520000) assert user_subscription.date_billing_next == next_date
def test_manager_process_new_payment_error(django_user_model): """Tests handlig of new subscription payment error.""" user = django_user_model.objects.create_user(username='******', password='******') subscription_plan = create_subscription_plan() plan_cost = create_cost(subscription_plan) user_subscription = models.UserSubscription.objects.create( user=user, plan_cost=plan_cost, subscription_plan=subscription_plan, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=False, cancelled=False, ) manager = _manager.Manager() manager.process_new(user_subscription) user_subscription_id = user_subscription.id user_subscription = models.UserSubscription.objects.get( id=user_subscription_id) assert user_subscription.date_billing_next is None assert user_subscription.active is False assert user_subscription.cancelled is False
def test_manager_process_subsriptions_with_expired(django_user_model): """Tests that process_susbscriptions processes expiries.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test') group.user_set.add(user) user_count = group.user_set.all().count() cost = create_cost(group) subscription = models.UserSubscription.objects.create( user=user, subscription=cost, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) subscription_id = subscription.id manager = _manager.Manager() manager.process_subscriptions() subscription = models.UserSubscription.objects.get(id=subscription_id) assert group.user_set.all().count() == user_count - 1 assert subscription.active is False assert subscription.cancelled is True
def test_manager_process_expired_multiple_different_groups(django_user_model): """Tests handling expiry with user with multiple different groups.""" user = django_user_model.objects.create_user(username='******', password='******') group_1 = Group.objects.create(name='test_1') group_1.user_set.add(user) user_count_1 = group_1.user_set.all().count() subscription_plan_1 = create_subscription_plan(group_1) plan_cost_1 = create_cost(subscription_plan_1) user_subscription_1 = models.UserSubscription.objects.create( user=user, plan_cost=plan_cost_1, subscription_plan=plan_cost_1.plans.all()[0], date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) group_2 = Group.objects.create(name='test_2') group_2.user_set.add(user) user_count_2 = group_1.user_set.all().count() subscription_plan_2 = create_subscription_plan(group_2) plan_cost_2 = create_cost(subscription_plan_2) user_subscription_2 = models.UserSubscription.objects.create( user=user, plan_cost=plan_cost_2, subscription_plan=plan_cost_2.plans.all()[0], date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) manager = _manager.Manager() manager.process_expired(user_subscription_1) user_subscription_2_id = user_subscription_2.id user_subscription_1_id = user_subscription_1.id user_subscription_1 = models.UserSubscription.objects.get( id=user_subscription_1_id) user_subscription_2 = models.UserSubscription.objects.get( id=user_subscription_2_id) assert group_1.user_set.all().count() == user_count_1 - 1 assert group_2.user_set.all().count() == user_count_2 assert user_subscription_1.active is False assert user_subscription_1.cancelled is True assert user_subscription_2.active is True assert user_subscription_2.cancelled is False
def test_manager_process_due_payment_error(django_user_model): """Tests handling of due subscription payment error.""" user = django_user_model.objects.create_user(username='******', password='******') subscription = create_due_subscription(user) subscription_id = subscription.id manager = _manager.Manager() manager.process_due(subscription) subscription = models.UserSubscription.objects.get(id=subscription_id) assert subscription.date_billing_last == datetime(2018, 1, 1, 1, 1, 1) assert subscription.date_billing_next == datetime(2018, 2, 1, 1, 1, 1)
def test_manager_record_transaction_with_date(django_user_model): """Tests handling of record_transaction with date provided.""" transaction_count = models.SubscriptionTransaction.objects.all().count() user = django_user_model.objects.create_user(username='******', password='******') subscription = create_due_subscription(user) transaction_date = datetime(2018, 1, 2, 1, 1, 1) manager = _manager.Manager() transaction = manager.record_transaction(subscription, transaction_date) assert models.SubscriptionTransaction.objects.all().count() == ( transaction_count + 1) assert transaction.date_transaction == transaction_date
def test_manager_record_transaction_without_date(django_user_model): """Tests handling of record_transaction without providing a date. Patching the timezone module to ensure consistent test results. """ transaction_count = models.SubscriptionTransaction.objects.all().count() user = django_user_model.objects.create_user(username='******', password='******') user_subscription = create_due_user_subscription(user) manager = _manager.Manager() transaction = manager.record_transaction(user_subscription) assert models.SubscriptionTransaction.objects.all().count() == ( transaction_count + 1) assert transaction.date_transaction == datetime(2018, 1, 1, 1, 1, 1)
def test_manager_process_subscriptions_with_due(django_user_model): """Tests processing of subscriptions with billing due.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test') user_count = group.user_set.all().count() subscription = create_due_subscription(user, group=group) subscription_id = subscription.id manager = _manager.Manager() manager.process_subscriptions() subscription = models.UserSubscription.objects.get(id=subscription_id) assert group.user_set.all().count() == user_count assert subscription.active is True assert subscription.cancelled is False
def test_manager_process_due_billing_dates(django_user_model): """Tests that last and next billing dates are updated properly. Patching the timezone module to ensure consistent test results. """ user = django_user_model.objects.create_user(username='******', password='******') subscription = create_due_subscription(user) subscription_id = subscription.id manager = _manager.Manager() manager.process_due(subscription) subscription = models.UserSubscription.objects.get(id=subscription_id) next_date = datetime(2018, 3, 3, 11, 30, 0, 520000) assert subscription.date_billing_next == next_date assert subscription.date_billing_last == datetime(2018, 2, 1, 2, 2, 2)
def test_manager_process_expired_multiple_same_groups(django_user_model): """Tests handling expiry with user with multiple same groups.""" user = django_user_model.objects.create_user(username='******', password='******') group = Group.objects.create(name='test_1') user_count = group.user_set.all().count() cost_1 = create_cost(group) subscription_1 = models.UserSubscription.objects.create( user=user, subscription=cost_1, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) subscription_1_id = subscription_1.id cost_2 = create_cost(group) subscription_2 = models.UserSubscription.objects.create( user=user, subscription=cost_2, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=True, cancelled=False, ) subscription_2_id = subscription_2.id manager = _manager.Manager() manager.process_expired(subscription_1) subscription_1 = models.UserSubscription.objects.get(id=subscription_1_id) subscription_2 = models.UserSubscription.objects.get(id=subscription_2_id) assert group.user_set.all().count() == user_count assert subscription_1.active is False assert subscription_1.cancelled is True assert subscription_2.active is True assert subscription_2.cancelled is False
def test_manager_process_new_without_group(django_user_model): """Tests processing of new subscription without group.""" user = django_user_model.objects.create_user(username='******', password='******') cost = create_cost(None) subscription = models.UserSubscription.objects.create( user=user, subscription=cost, date_billing_start=datetime(2018, 1, 1, 1, 1, 1), date_billing_end=datetime(2018, 12, 31, 1, 1, 1), date_billing_last=datetime(2018, 12, 1, 1, 1, 1), date_billing_next=None, active=False, cancelled=False, ) subscription_id = subscription.id manager = _manager.Manager() manager.process_new(subscription) subscription = models.UserSubscription.objects.get(id=subscription_id) assert subscription.active is True assert subscription.cancelled is False