Esempio n. 1
0
 def setup_method(self):
     self.save_offerer_bank_informations = SaveOffererBankInformations(
         offerer_repository=OffererSQLRepository(),
         bank_informations_repository=BankInformationsSQLRepository())
Esempio n. 2
0
    class UpdateBankInformationsByOffererIdTest:
        def setup_method(self):
            self.save_offerer_bank_informations = SaveOffererBankInformations(
                offerer_repository=OffererSQLRepository(),
                bank_informations_repository=BankInformationsSQLRepository())

        @pytest.mark.usefixtures("db_session")
        def test_when_receive_new_closed_application_should_override_previous_one(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            bank_information = create_bank_information(
                application_id=79,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                date_modified=datetime(2018, 1, 1),
            )
            repository.save(offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8)

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == "SOGEFRPP"
            assert bank_information.iban == "FR7630007000111234567890144"
            assert bank_information.applicationId == 8

        @pytest.mark.usefixtures("db_session")
        def test_when_receive_new_application_with_draft_state_should_update_previously_rejected_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            bank_information = create_bank_information(
                application_id=79,
                bic=None,
                iban=None,
                offerer=offerer,
                date_modified=datetime(2018, 1, 1),
                status=BankInformationStatus.REJECTED,
            )
            repository.save(offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="initiated")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == None
            assert bank_information.iban == None
            assert bank_information.status == BankInformationStatus.DRAFT

        @pytest.mark.usefixtures("db_session")
        def test_when_receive_new_application_with_lower_status_should_reject(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            bank_information = create_bank_information(
                application_id=79,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                date_modified=datetime(2018, 1, 1),
                status=BankInformationStatus.ACCEPTED,
            )
            repository.save(offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="initiated")

            # When
            with pytest.raises(CannotRegisterBankInformation) as error:
                self.save_offerer_bank_informations.execute(
                    application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == "QSDFGH8Z555"
            assert bank_information.iban == "NL36INGB2682297498"
            assert bank_information.status == BankInformationStatus.ACCEPTED
            assert bank_information.applicationId == 79
            assert error.value.args == (
                "Received application details state does not allow to change bank information",
            )

        @pytest.mark.usefixtures("db_session")
        def test_when_receive_older_application_should_reject(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            bank_information = create_bank_information(
                application_id=79,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                date_modified=datetime(2020, 2, 2),
            )
            repository.save(offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8)

            # When
            with pytest.raises(CannotRegisterBankInformation) as error:
                self.save_offerer_bank_informations.execute(
                    application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == "QSDFGH8Z555"
            assert bank_information.iban == "NL36INGB2682297498"
            assert bank_information.status == BankInformationStatus.ACCEPTED
            assert bank_information.applicationId == 79
            assert error.value.args == (
                "Received application details are older than saved one", )
Esempio n. 3
0
    class UpdateBankInformationsByApplicationIdTest:
        def setup_method(self):
            self.save_offerer_bank_informations = SaveOffererBankInformations(
                offerer_repository=OffererSQLRepository(),
                bank_informations_repository=BankInformationsSQLRepository())

        @pytest.mark.usefixtures("db_session")
        def test_when_rib_and_offerer_change_everything_should_be_updated(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            new_offerer = create_offerer(siren="793875019")
            bank_information = create_bank_information(
                application_id=8,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                date_modified=datetime(2018, 1, 1),
            )
            repository.save(offerer, new_offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875019",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8)

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == "SOGEFRPP"
            assert bank_information.iban == "FR7630007000111234567890144"
            assert bank_information.offererId == new_offerer.id

        @pytest.mark.usefixtures("db_session")
        def test_when_status_change_rib_should_be_correctly_updated(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            bank_information = create_bank_information(
                application_id=8,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                status=BankInformationStatus.ACCEPTED,
                date_modified=datetime(2018, 1, 1),
            )
            repository.save(offerer, bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                idx=8,
                state="initiated")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == None
            assert bank_information.iban == None
            assert bank_information.status == BankInformationStatus.DRAFT

        @pytest.mark.usefixtures("db_session")
        def test_when_overriding_another_bank_information_should_raise(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            other_offerer = create_offerer(siren="793875019")
            bank_information = create_bank_information(
                application_id=8,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=offerer,
                date_modified=datetime(2018, 1, 1),
            )
            other_bank_information = create_bank_information(
                application_id=79,
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                offerer=other_offerer,
                date_modified=datetime(2018, 1, 1),
            )
            repository.save(offerer, other_offerer, bank_information,
                            other_bank_information)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875019",
                bic="QSDFGH8Z555",
                iban="NL36INGB2682297498",
                idx=8)

            # When
            with pytest.raises(ApiErrors) as errors:
                self.save_offerer_bank_informations.execute(
                    application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 2
            assert errors.value.errors['"offererId"'] == [
                "Une entrée avec cet identifiant existe déjà dans notre base de données"
            ]
Esempio n. 4
0
    class SaveNewBankInformationsTest:
        def setup_method(self):
            self.save_offerer_bank_informations = SaveOffererBankInformations(
                offerer_repository=OffererSQLRepository(),
                bank_informations_repository=BankInformationsSQLRepository())

        @pytest.mark.usefixtures("db_session")
        def test_when_dms_state_is_refused_should_create_the_correct_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="refused")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic is None
            assert bank_information.iban is None
            assert bank_information.status == BankInformationStatus.REJECTED

        @pytest.mark.usefixtures("db_session")
        def test_when_dms_state_is_without_continuation_should_create_the_correct_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="without_continuation",
            )

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic is None
            assert bank_information.iban is None
            assert bank_information.status == BankInformationStatus.REJECTED

        @pytest.mark.usefixtures("db_session")
        def test_when_dms_state_is_closed_should_create_the_correct_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="closed")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic == "SOGEFRPP"
            assert bank_information.iban == "FR7630007000111234567890144"
            assert bank_information.status == BankInformationStatus.ACCEPTED

        @pytest.mark.usefixtures("db_session")
        def test_when_dms_state_is_received_should_create_the_correct_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="received")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic is None
            assert bank_information.iban is None
            assert bank_information.status == BankInformationStatus.DRAFT

        @pytest.mark.usefixtures("db_session")
        def test_when_dms_state_is_initiated_should_create_the_correct_bank_information(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="initiated")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 1
            bank_information = BankInformation.query.one()
            assert bank_information.bic is None
            assert bank_information.iban is None
            assert bank_information.status == BankInformationStatus.DRAFT

        @pytest.mark.usefixtures("db_session")
        def test_when_no_offerer_is_found_and_state_is_closed_should_not_create_bank_information_and_raise(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="closed")

            # When
            with pytest.raises(CannotRegisterBankInformation) as error:
                self.save_offerer_bank_informations.execute(
                    application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 0
            assert error.value.args == ("Offerer not found", )

        @pytest.mark.usefixtures("db_session")
        def test_when_no_offerer_is_found_and_state_is_not_closed_should_not_create_bank_information_and_not_raise(
                self, mock_application_details, app):
            # Given
            application_id = "8"
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state="initiated")

            # When
            self.save_offerer_bank_informations.execute(
                application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 0

        @pytest.mark.usefixtures("db_session")
        def test_when_state_is_unknown(self, mock_application_details, app):
            # Given
            application_id = "8"
            offerer = create_offerer(siren="793875030")
            repository.save(offerer)
            unknown_status = "unknown_status"
            mock_application_details.return_value = offerer_demarche_simplifiee_application_detail_response(
                siren="793875030",
                bic="SOGEFRPP",
                iban="FR7630007000111234567890144",
                idx=8,
                state=unknown_status)

            # When
            with pytest.raises(CannotRegisterBankInformation) as error:
                self.save_offerer_bank_informations.execute(
                    application_id=application_id)

            # Then
            bank_information_count = BankInformation.query.count()
            assert bank_information_count == 0
            assert error.value.args == (
                f"Unknown Demarches Simplifiées state {unknown_status}", )
from pcapi.infrastructure.repository.bank_informations.bank_informations_sql_repository import (
    BankInformationsSQLRepository, )
from pcapi.infrastructure.repository.offerer.offerer_sql_repository import OffererSQLRepository
from pcapi.infrastructure.repository.venue.venue_with_basic_information.venue_with_basic_information_sql_repository import (
    VenueWithBasicInformationSQLRepository, )
from pcapi.use_cases.save_offerer_bank_informations import SaveOffererBankInformations
from pcapi.use_cases.save_venue_bank_informations import SaveVenueBankInformations

# Repositories
bank_informations_repository = BankInformationsSQLRepository()
offerer_repository = OffererSQLRepository()
venue_identifier_repository = VenueWithBasicInformationSQLRepository()

# Usecases
save_offerer_bank_informations = SaveOffererBankInformations(
    offerer_repository=offerer_repository,
    bank_informations_repository=bank_informations_repository)

save_venue_bank_informations = SaveVenueBankInformations(
    offerer_repository=offerer_repository,
    venue_repository=venue_identifier_repository,
    bank_informations_repository=bank_informations_repository,
)