Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand

from pythonpro.memberkit.models import Subscription


class Command(BaseCommand):
help = 'Cria Assinatura para usuários sem pagamentos'

def add_arguments(self, parser):
pass

def handle(self, *args, **options):
role_to_subscription_type_dct = {
'data_scientist': 4456,
'webdev': 4426,
'member': 4424,
'bootcamper': 4423,
'pythonista': 4423,
'client': 4420,
}
for role, subscription_type_id in role_to_subscription_type_dct.items():
users_with_role = get_user_model().objects.filter(
groups__name=role
).exclude(subscriptions__subscription_types__id=subscription_type_id).only('id')
for user in users_with_role:
self.stdout.write(self.style.SUCCESS(f'Processando usuário {user} com papel {role}'))
subscription = Subscription.objects.create(
subscriber_id=user.id,
status=Subscription.Status.INACTIVE,
observation='Assinatura sem pagamento criada automaticamente por comando no servidor'
)
subscription.subscription_types.set([subscription_type_id])
self.stdout.write(self.style.SUCCESS(f'Criada {subscription}'))
90 changes: 90 additions & 0 deletions pythonpro/memberkit/tests/test_commands.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import pytest as pytest
from django.core import management
from django_pagarme import facade as pagarme_facade
from django_pagarme.models import PagarmePayment, PagarmeItemConfig, PagarmeNotification
from model_bakery import baker
from rolepermissions.roles import assign_role

from pythonpro.core.models import User
from pythonpro.memberkit.models import SubscriptionType, PaymentItemConfigToSubscriptionType, Subscription
Expand Down Expand Up @@ -75,3 +77,91 @@ def _make_subscriptions_with_payment(payment_config, status):
payment.items.set([payment_config])
baker.make(PagarmeNotification, payment=payment, status=status)
return baker.make(Subscription, payment=payment, status=Subscription.Status.INACTIVE)


@pytest.fixture
def subscription_types(db):
role_to_subscription_type_dct = {
'data_scientist': 4456,
'webdev': 4426,
'member': 4424,
'bootcamper': 4423,
'client': 4420,
}
return [
baker.make(SubscriptionType, id=v, name=k)
for k, v in role_to_subscription_type_dct.items()
]


def test_subscription_not_created_for_lead(django_user_model):
lead = baker.make(django_user_model)
assign_role(lead, 'lead')
management.call_command('create_subscriptions_for_roles')
assert not Subscription.objects.exists()


role_to_subscription = pytest.mark.parametrize(
'role,subscription_type_id',
[
('data_scientist', 4456),
('client', 4420),
('webdev', 4426),
('member', 4424),
('pythonista', 4423),
('bootcamper', 4423),
]
)


@role_to_subscription
def test_subscription_created(role, subscription_type_id, subscription_types, django_user_model):
user_with_role = baker.make(django_user_model)
assign_role(user_with_role, role)
management.call_command('create_subscriptions_for_roles')
subscription = Subscription.objects.first()
assert subscription.subscriber == user_with_role
assert subscription.status == Subscription.Status.INACTIVE
assert subscription.subscription_types.first().id == subscription_type_id


@role_to_subscription
def test_subscription_creation_idempotence(role, subscription_type_id, subscription_types, django_user_model):
user_with_role = baker.make(django_user_model)
assign_role(user_with_role, role)
previous_subscription = baker.make(Subscription, subscriber=user_with_role)
previous_subscription.subscription_types.add(subscription_type_id)
management.call_command('create_subscriptions_for_roles')
management.call_command('create_subscriptions_for_roles')
assert Subscription.objects.count() == 1, 'Subscription should not be created'


@pytest.mark.parametrize(
'role,subscription_type_id',
[
('data_scientist', 4424),
('client', 4424),
('webdev', 4424),
('member', 4420),
('pythonista', 4424),
('bootcamper', 4424),
]
)
def test_subscription_creation_another_subscription_type(role, subscription_type_id, subscription_types,
django_user_model):
"""
Check all ids from parametrize area different from role_to_subscription
:param role:
:param subscription_type_id:
:param subscription_types:
:param django_user_model:
:return:
"""
user_with_role = baker.make(django_user_model)
assign_role(user_with_role, role)
previous_subscription = baker.make(Subscription, subscriber=user_with_role)
previous_subscription.subscription_types.add(subscription_type_id)
management.call_command('create_subscriptions_for_roles')
assert Subscription.objects.count() == 2, 'New Subscription should be created'
management.call_command('create_subscriptions_for_roles')
assert Subscription.objects.count() == 2, 'New Subscription should be created only once'