예제 #1
0
 def test_member_not_found(self, ctx,
                           mock_member_repository: MemberRepository,
                           sample_member: Member,
                           member_manager: MemberManager):
     mock_member_repository.get_by_id = MagicMock(
         return_value=(None), side_effect=MemberNotFoundError(""))
     # When...
     with pytest.raises(MemberNotFoundError):
         member_manager.create_subscription(ctx, sample_member.id,
                                            SubscriptionBody())
예제 #2
0
    def create(self, ctx, body: MemberBody) -> Member:
        LOG.debug("create_member_records",
                  extra=log_extra(ctx, username=body.username))
        # Check that the user exists in the system.
        fetched_member = self.member_repository.get_by_login(
            ctx, body.username)
        if fetched_member:
            raise MemberAlreadyExist(fetched_member.username)

        fetched_account_type, _ = self.account_type_repository.search_by(
            ctx, terms="Adhérent")
        if not fetched_account_type:
            raise AccountTypeNotFoundError("Adhérent")

        created_member = self.member_repository.create(
            ctx=ctx,
            object_to_create=AbstractMember(
                id=0,
                username=body.username,
                first_name=body.first_name,
                last_name=body.last_name,
                email=body.mail,
                departure_date=datetime.now(),
                ip='',
                subnet='',
                comment='',
                membership=MembershipStatus.INITIAL.value))

        self.mailinglist_repository.update_from_member(ctx, created_member.id,
                                                       249)

        _ = self.account_repository.create(
            ctx,
            AbstractAccount(
                id=0,
                actif=True,
                account_type=fetched_account_type[0].id,
                member=created_member.id,
                name=
                f'{created_member.first_name} {created_member.last_name} ({created_member.username})',
                pinned=False,
                compte_courant=False,
                balance=0,
                pending_balance=0))

        _ = self.create_subscription(
            ctx=ctx,
            member_id=created_member.id,
            body=SubscriptionBody(member=created_member.id),
        )

        return created_member
예제 #3
0
    def test_unknown_membership(
            self, ctx, mock_membership_repository: MembershipRepository,
            mock_member_repository: MemberRepository, sample_member: Member,
            member_manager: MemberManager):
        mock_member_repository.get_by_id = MagicMock(
            return_value=(sample_member))
        mock_membership_repository.search = MagicMock(
            return_value=([], 0), side_effect=MembershipNotFoundError(""))

        with raises(MembershipNotFoundError):
            member_manager.update_subscription(ctx, sample_member.id,
                                               SubscriptionBody())
            mock_membership_repository.update.assert_not_called()
예제 #4
0
    def test_pending_payment_initial(
            self, ctx, mock_membership_repository: MembershipRepository,
            mock_member_repository: MemberRepository, sample_member: Member,
            mock_charter_repository: CharterRepository,
            member_manager: MemberManager):
        mock_member_repository.get_by_id = MagicMock(
            return_value=(sample_member))
        mock_membership_repository.search = MagicMock(return_value=([], 0))
        mock_charter_repository.get = MagicMock(
            return_value=str(datetime.datetime.today()))
        # When...
        member_manager.create_subscription(ctx, sample_member.id,
                                           SubscriptionBody())

        # Expect to create a new membership record...
        mock_membership_repository.create.assert_called_once()
예제 #5
0
    def test_unknown_price_asign_to_duration(
            self, ctx, mock_membership_repository: MembershipRepository,
            mock_member_repository: MemberRepository, sample_member: Member,
            mock_charter_repository: CharterRepository,
            sample_subscription_empty: SubscriptionBody,
            member_manager: MemberManager):
        mock_member_repository.get_by_id = MagicMock(
            return_value=(sample_member))
        mock_membership_repository.search = MagicMock(return_value=([], 0))
        mock_charter_repository.get = MagicMock(
            return_value=str(datetime.datetime.today()))
        sample_subscription_empty.duration = 5

        with raises(NoPriceAssignedToThatDuration):
            member_manager.create_subscription(ctx, sample_member.id,
                                               sample_subscription_empty)
예제 #6
0
 def sign(self, ctx, charter_id: int, member_id: int):
     m = self.member_repository.get_by_id(ctx, member_id)
     if not m:
         raise MemberNotFoundError(member_id)
     subscriptions, _ = self.membership_repository.search(
         ctx,
         limit=1,
         filter_=AbstractMembership(
             member=member_id, status=MembershipStatus.PENDING_RULES.value))
     if not subscriptions:
         raise MembershipNotFoundError(member_id)
     self.charter_repository.update(ctx, charter_id, member_id)
     if subscriptions[0].status == MembershipStatus.PENDING_RULES.value:
         self.membership_repository.update(
             ctx, subscriptions[0].uuid, SubscriptionBody(),
             MembershipStatus.PENDING_PAYMENT_INITIAL)
예제 #7
0
    def test_unknown_price_asign_to_duration(
            self, ctx, mock_membership_repository: MembershipRepository,
            mock_member_repository: MemberRepository,
            mock_charter_repository: CharterRepository, sample_member: Member,
            sample_subscription_duration_account_payment_method:
        SubscriptionBody, sample_membership_pending_rules: Membership,
            member_manager: MemberManager):
        mock_member_repository.get_by_id = MagicMock(
            return_value=(sample_member))
        mock_membership_repository.search = MagicMock(
            return_value=([sample_membership_pending_rules], 1))
        mock_charter_repository.get = MagicMock(
            return_value=str(datetime.datetime.today()))
        sample_subscription_duration_account_payment_method.duration = 5

        with raises(NoPriceAssignedToThatDuration):
            member_manager.update_subscription(
                ctx, sample_member.id,
                sample_subscription_duration_account_payment_method)

        mock_membership_repository.search.assert_called_once()
        mock_member_repository.get_by_id.assert_called_once()
        mock_charter_repository.get.assert_called_once()
        mock_membership_repository.update.assert_not_called()
예제 #8
0
def sample_subscription_duration_no_account(sample_member):
    return SubscriptionBody(member=sample_member, duration=1)
예제 #9
0
def sample_subscription_empty(sample_member):
    return SubscriptionBody(member=sample_member, )
예제 #10
0
def sample_subscription_duration_account_payment_method(
        sample_member, sample_account1, sample_payment_method):
    return SubscriptionBody(member=sample_member,
                            duration=1,
                            account=sample_account1.id,
                            payment_method=sample_payment_method.id)