Exemple #1
0
 def setup_method(self):
     self.save_venue_bank_informations = SaveVenueBankInformations(
         offerer_repository=OffererSQLRepository(),
         venue_repository=VenueWithBasicInformationSQLRepository(),
         bank_informations_repository=BankInformationsSQLRepository(
         ),
     )
Exemple #2
0
 def setup_method(self):
     self.save_offerer_bank_informations = SaveOffererBankInformations(
         offerer_repository=OffererSQLRepository(),
         bank_informations_repository=BankInformationsSQLRepository())
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,
)
Exemple #4
0
 def setup_method(self):
     self.bank_informations_sql_repository = BankInformationsSQLRepository()
Exemple #5
0
class BankInformationsSQLRepositoryTest:
    def setup_method(self):
        self.bank_informations_sql_repository = BankInformationsSQLRepository()

    @pytest.mark.usefixtures("db_session")
    def test_returns_bank_informations_when_offerer_has_bank_informations(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations = create_bank_information(offerer=offerer)
        repository.save(bank_informations)

        expected_bank_informations = bank_informations_domain_converter.to_domain(
            bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.find_by_offerer(
            offerer_id=offerer.id)

        # then
        assert bank_informations.application_id == expected_bank_informations.application_id
        assert bank_informations.status == expected_bank_informations.status
        assert bank_informations.iban == expected_bank_informations.iban
        assert bank_informations.bic == expected_bank_informations.bic
        assert bank_informations.date_modified == expected_bank_informations.date_modified

    @pytest.mark.usefixtures("db_session")
    def test_returns_none_when_offerer_has_no_bank_informations(self, app):
        # given
        offerer = create_offerer()
        bank_informations = create_bank_information(offerer=offerer)
        repository.save(bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.find_by_offerer(
            offerer_id=0)

        # then
        assert bank_informations is None

    @pytest.mark.usefixtures("db_session")
    def test_returns_bank_informations_when_venue_has_bank_informations(
            self, app):
        # given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        bank_informations = create_bank_information(venue=venue)
        repository.save(bank_informations)

        expected_bank_informations = bank_informations_domain_converter.to_domain(
            bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.find_by_venue(
            venue_id=venue.id)

        # then
        assert bank_informations.application_id == expected_bank_informations.application_id
        assert bank_informations.status == expected_bank_informations.status
        assert bank_informations.iban == expected_bank_informations.iban
        assert bank_informations.bic == expected_bank_informations.bic

    @pytest.mark.usefixtures("db_session")
    def test_returns_none_when_venue_has_no_bank_informations(self, app):
        # given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        bank_informations = create_bank_information(venue=venue)
        repository.save(bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.find_by_venue(
            venue_id=0)

        # then
        assert bank_informations is None

    @pytest.mark.usefixtures("db_session")
    def test_returns_bank_informations_when_there_is_bank_informations_associated_with_this_application_id(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations = create_bank_information(offerer=offerer,
                                                    application_id=2)
        repository.save(bank_informations)

        expected_bank_informations = bank_informations_domain_converter.to_domain(
            bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.get_by_application(
            application_id=2)

        # then
        assert bank_informations.application_id == expected_bank_informations.application_id
        assert bank_informations.date_modified == expected_bank_informations.date_modified
        assert bank_informations.status == expected_bank_informations.status
        assert bank_informations.iban == expected_bank_informations.iban
        assert bank_informations.bic == expected_bank_informations.bic

    @pytest.mark.usefixtures("db_session")
    def test_returns_none_when_there_is_no_bank_informations_associated_with_this_application_id(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations = create_bank_information(offerer=offerer,
                                                    application_id=2)
        repository.save(bank_informations)

        # when
        bank_informations = self.bank_informations_sql_repository.get_by_application(
            application_id=1)

        # then
        assert bank_informations is None

    @pytest.mark.usefixtures("db_session")
    def test_should_create_bank_informations_on_save_when_bank_informations_does_not_exist(
            self, app):
        # given
        offerer = create_offerer()
        repository.save(offerer)
        bank_informations_to_save = BankInformations(
            offerer_id=offerer.id,
            status=BankInformationStatus.ACCEPTED,
            application_id=8,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
        )

        # when
        bank_informations_saved = self.bank_informations_sql_repository.save(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 1

        sql_bank_informations_saved = BankInformationsSQLEntity.query.first()
        assert sql_bank_informations_saved.offererId == offerer.id
        assert sql_bank_informations_saved.venueId is None
        assert sql_bank_informations_saved.iban == bank_informations_to_save.iban
        assert sql_bank_informations_saved.bic == bank_informations_to_save.bic
        assert sql_bank_informations_saved.applicationId == bank_informations_to_save.application_id
        assert sql_bank_informations_saved.status == bank_informations_to_save.status
        assert sql_bank_informations_saved.dateModified is not None

        assert bank_informations_saved.iban == bank_informations_to_save.iban
        assert bank_informations_saved.bic == bank_informations_to_save.bic

    @pytest.mark.usefixtures("db_session")
    def test_should_not_create_bank_informations_on_save_when_no_offerer_associated_in_database(
            self, app):
        # given
        bank_informations_to_save = BankInformations(offerer_id=9,
                                                     status="ACCEPTED",
                                                     application_id=8)

        # when
        with pytest.raises(ApiErrors) as error:
            self.bank_informations_sql_repository.save(
                bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 0
        assert error.value.errors["offererId"] == [
            "Aucun objet ne correspond \u00e0 cet identifiant dans notre base de donn\u00e9es"
        ]

    @pytest.mark.usefixtures("db_session")
    def test_should_not_create_bank_informations_on_save_when_bank_infos_is_already_associated_to_an_offerer_in_database(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations = create_bank_information(offerer=offerer)
        repository.save(bank_informations)
        bank_informations_to_save = BankInformations(offerer_id=offerer.id,
                                                     status="ACCEPTED",
                                                     application_id=8)

        # when
        with pytest.raises(ApiErrors) as error:
            self.bank_informations_sql_repository.save(
                bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 1
        assert error.value.errors['"offererId"'] == [
            "Une entrée avec cet identifiant existe déjà dans notre base de données"
        ]

    @pytest.mark.usefixtures("db_session")
    def test_should_update_bank_informations_when_bank_informations_already_exist_for_offerer(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations_sql = create_bank_information(
            offerer=offerer,
            application_id=9,
            status=BankInformationStatus.DRAFT,
            iban=None,
            bic=None)
        repository.save(bank_informations_sql)

        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            offerer_id=offerer.id,
            date_modified=datetime(2018, 2, 3),
        )

        # when
        bank_informations_saved = self.bank_informations_sql_repository.update_by_offerer_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 1

        sql_bank_informations_saved = BankInformationsSQLEntity.query.first()
        assert sql_bank_informations_saved.offererId == offerer.id
        assert sql_bank_informations_saved.venueId is None
        assert sql_bank_informations_saved.iban == bank_informations_to_save.iban
        assert sql_bank_informations_saved.bic == bank_informations_to_save.bic
        assert sql_bank_informations_saved.applicationId == bank_informations_to_save.application_id
        assert sql_bank_informations_saved.status == bank_informations_to_save.status
        assert sql_bank_informations_saved.dateModified == bank_informations_to_save.date_modified

        assert bank_informations_saved.iban == bank_informations_to_save.iban
        assert bank_informations_saved.bic == bank_informations_to_save.bic

    @pytest.mark.usefixtures("db_session")
    def test_should_not_update_bank_informations_when_bank_informations_do_not_exist_for_offerer(
            self, app):
        # given
        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            offerer_id=1,
        )

        # when
        bank_informations_updated = self.bank_informations_sql_repository.update_by_offerer_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 0
        assert bank_informations_updated is None

    @pytest.mark.usefixtures("db_session")
    def test_should_update_bank_informations_when_bank_informations_already_exist_for_application(
            self, app):
        # given
        offerer = create_offerer()
        bank_informations_sql = create_bank_information(
            offerer=offerer,
            application_id=9,
            status=BankInformationStatus.DRAFT,
            iban=None,
            bic=None)
        repository.save(bank_informations_sql)

        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            offerer_id=offerer.id,
            date_modified=datetime(2018, 2, 3),
        )

        # when
        bank_informations_saved = self.bank_informations_sql_repository.update_by_application_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 1

        sql_bank_informations_saved = BankInformationsSQLEntity.query.first()
        assert sql_bank_informations_saved.offererId == offerer.id
        assert sql_bank_informations_saved.venueId is None
        assert sql_bank_informations_saved.iban == bank_informations_to_save.iban
        assert sql_bank_informations_saved.bic == bank_informations_to_save.bic
        assert sql_bank_informations_saved.applicationId == bank_informations_to_save.application_id
        assert sql_bank_informations_saved.status == bank_informations_to_save.status
        assert sql_bank_informations_saved.dateModified == bank_informations_to_save.date_modified

        assert bank_informations_saved.iban == bank_informations_to_save.iban
        assert bank_informations_saved.bic == bank_informations_to_save.bic

    @pytest.mark.usefixtures("db_session")
    def test_should_not_update_bank_informations_when_bank_informations_do_not_exist_for_this_application(
            self, app):
        # given
        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            offerer_id=1,
        )

        # when
        bank_informations_updated = self.bank_informations_sql_repository.update_by_application_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 0
        assert bank_informations_updated is None

    @pytest.mark.usefixtures("db_session")
    def test_should_update_bank_informations_when_bank_informations_already_exist_for_venue(
            self, app):
        # given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        bank_informations_sql = create_bank_information(
            venue=venue,
            application_id=9,
            status=BankInformationStatus.DRAFT,
            iban=None,
            bic=None)
        repository.save(bank_informations_sql)

        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            venue_id=venue.id,
            date_modified=datetime(2018, 2, 3),
        )

        # when
        bank_informations_saved = self.bank_informations_sql_repository.update_by_venue_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 1

        sql_bank_informations_saved = BankInformationsSQLEntity.query.first()
        assert sql_bank_informations_saved.offererId == None
        assert sql_bank_informations_saved.venueId == venue.id
        assert sql_bank_informations_saved.iban == bank_informations_to_save.iban
        assert sql_bank_informations_saved.bic == bank_informations_to_save.bic
        assert sql_bank_informations_saved.applicationId == bank_informations_to_save.application_id
        assert sql_bank_informations_saved.status == bank_informations_to_save.status
        assert sql_bank_informations_saved.dateModified == bank_informations_to_save.date_modified

        assert bank_informations_saved.iban == bank_informations_to_save.iban
        assert bank_informations_saved.bic == bank_informations_to_save.bic

    @pytest.mark.usefixtures("db_session")
    def test_should_not_update_bank_informations_when_bank_informations_do_not_exist_for_venue(
            self, app):
        # given
        bank_informations_to_save = BankInformations(
            status=BankInformationStatus.ACCEPTED,
            application_id=9,
            iban="FR7630006000011234567890189",
            bic="QSDFGH8Z555",
            venue_id=1,
        )

        # when
        bank_informations_updated = self.bank_informations_sql_repository.update_by_venue_id(
            bank_informations_to_save)

        # then
        assert BankInformationsSQLEntity.query.count() == 0
        assert bank_informations_updated is None