Exemplo n.º 1
0
def test_suspend_pros_in_given_emails_providers_list():
    # Given
    fraudulent_emails_providers = ["example.com"]
    admin_user = AdminFactory(email="*****@*****.**")
    fraudulent_user = ProFactory(email="*****@*****.**", )
    offerer = OffererFactory()
    UserOffererFactory(user=fraudulent_user, offerer=offerer)

    # When
    suspend_fraudulent_pro_by_email_providers(fraudulent_emails_providers,
                                              admin_user,
                                              dry_run=False)

    # Then
    assert not fraudulent_user.isActive
Exemplo n.º 2
0
    def when_user_is_a_pro(self, app):
        # Given
        pro = ProFactory(email="*****@*****.**",
                         postalCode=None,
                         dateOfBirth=None)
        pro.suspensionReason = None
        repository.save(pro)

        # When
        response = TestClient(app.test_client()).with_session_auth(
            "*****@*****.**").get("/beneficiaries/current")

        # Then
        assert response.status_code == 200
        assert response.json["suspensionReason"] == None
Exemplo n.º 3
0
    def test_returns_a_user_offerer_built_with_user_and_offerer_relative_to_csv_row(
            self):
        # given
        blake = ProFactory(email="*****@*****.**", id=123)
        blakes_company = OffererFactory(siren="362521879",
                                        name="MyBletcheyCompany",
                                        id=234)

        # when
        user_offerer = fill_user_offerer_from(UserOfferer(), blake,
                                              blakes_company)

        # then
        assert user_offerer.user == blake
        assert user_offerer.offerer == blakes_company
Exemplo n.º 4
0
def test_suspend_pro_user_with_many_offerers_and_delete_all_offerers():
    fraudulent_emails_providers = ["example.com"]
    admin_user = AdminFactory(email="*****@*****.**")
    fraudulent_user = ProFactory(email="*****@*****.**", )
    first_offerer = OffererFactory()
    UserOffererFactory(user=fraudulent_user, offerer=first_offerer)
    second_offerer = OffererFactory()
    UserOffererFactory(user=fraudulent_user, offerer=second_offerer)

    suspend_fraudulent_pro_by_email_providers(fraudulent_emails_providers,
                                              admin_user,
                                              dry_run=False)

    assert not fraudulent_user.isActive
    assert Offerer.query.count() == 0
Exemplo n.º 5
0
    def when_the_user_is_authenticated(self, app):
        # Given
        pro = ProFactory()
        venue_label_1 = VenueLabelFactory(label="Maison des illustres")
        venue_label_2 = VenueLabelFactory(label="Monuments historiques")

        # When
        response = TestClient(app.test_client()).with_session_auth(pro.email).get("/venue-labels")

        # then
        assert response.status_code == 200
        assert len(response.json) == 2
        assert response.json == [
            {"id": humanize(venue_label_1.id), "label": venue_label_1.label},
            {"id": humanize(venue_label_2.id), "label": venue_label_2.label},
        ]
Exemplo n.º 6
0
def test_delete_offerer_and_venue():
    # Given
    fraudulent_emails_providers = ["example.com"]
    admin_user = AdminFactory(email="*****@*****.**")
    fraudulent_user = ProFactory(email="*****@*****.**", )
    offerer = OffererFactory()
    UserOffererFactory(user=fraudulent_user, offerer=offerer)
    VenueFactory(managingOfferer=offerer)

    # When
    suspend_fraudulent_pro_by_email_providers(fraudulent_emails_providers,
                                              admin_user,
                                              dry_run=False)

    # Then
    assert Offerer.query.count() == 0
    assert Venue.query.count() == 0
def test_mandatory_accessibility_fields(app):
    # given
    user = ProFactory()

    venue_data = create_valid_venue_data(user)
    venue_data.pop("audioDisabilityCompliant")
    venue_data.pop("mentalDisabilityCompliant")
    venue_data.pop("motorDisabilityCompliant")
    venue_data.pop("visualDisabilityCompliant")

    auth_request = TestClient(app.test_client()).with_session_auth(email=user.email)

    # when
    response = auth_request.post("/venues", json=venue_data)

    # then
    assert response.status_code == 400
    assert response.json["global"] == ["L'accessibilité du lieu doit être définie."]
Exemplo n.º 8
0
    def should_return_first_linked_offerer(self, app):
        # Given
        user = ProFactory(departementCode="93")
        offerer1 = create_offerer(idx=1,
                                  siren="123456788",
                                  postal_code="75016")
        offerer2 = create_offerer(idx=2,
                                  siren="123456789",
                                  postal_code="23000")
        user_offerer1 = create_user_offerer(idx=2, user=user, offerer=offerer1)
        user_offerer2 = create_user_offerer(idx=1, user=user, offerer=offerer2)
        repository.save(user_offerer1, user_offerer2)

        # When
        offerer = _get_user_initial_linked_offerer(user)

        # Then
        assert offerer == offerer2
    def test_ok(self, mock_check_image, mock_get_distant_image, app):
        # Given
        body = {"url": "https://example.com/exampleaaa.jpg"}
        user = ProFactory()
        auth_request = TestClient(
            app.test_client()).with_session_auth(email=user.email)
        mock_get_distant_image.return_value = b"aze"
        mock_check_image.return_value = None

        # When
        response = auth_request.post("/offers/thumbnail-url-validation",
                                     json=body)

        # Then
        assert response.status_code == 200
        assert response.json == {
            "errors": [],
            "image": "data:image/png;base64,YXpl"
        }
def test_should_return_401_when_latitude_out_of_range_and_longitude_wrong_format(app):
    # given
    user = ProFactory()
    venue_data = create_valid_venue_data(user)

    venue_data = {
        **venue_data,
        "latitude": -98.82387,
        "longitude": "112°3534",
    }

    auth_request = TestClient(app.test_client()).with_session_auth(email=user.email)

    # when
    response = auth_request.post("/venues", json=venue_data)

    # then
    assert response.status_code == 400
    assert response.json["latitude"] == ["La latitude doit être comprise entre -90.0 et +90.0"]
    assert response.json["longitude"] == ["Format incorrect"]
    def test_image_size_too_large(self, mock_get_distant_image, app):
        # Given
        body = {"url": "https://example.com/wallpaper.jpg"}
        user = ProFactory()
        auth_request = TestClient(
            app.test_client()).with_session_auth(email=user.email)
        mock_get_distant_image.side_effect = exceptions.FileSizeExceeded(
            max_size=10_000_000)

        # When
        response = auth_request.post("/offers/thumbnail-url-validation",
                                     json=body)

        # Then
        assert response.status_code == 200
        assert response.json == {
            "errors":
            ["Utilisez une image dont le poids est inférieur à 10.0 MB"],
            "image": None
        }
    def test_image_too_small(self, mock_get_distant_image, app):
        # Given
        body = {"url": "https://example.com/icon.jpeg"}
        user = ProFactory()
        auth_request = TestClient(
            app.test_client()).with_session_auth(email=user.email)
        mock_get_distant_image.side_effect = exceptions.ImageTooSmall(
            min_width=400, min_height=400)

        # When
        response = auth_request.post("/offers/thumbnail-url-validation",
                                     json=body)

        # Then
        assert response.status_code == 200
        assert response.json == {
            "errors":
            ["Utilisez une image plus grande (supérieure à 400px par 400px)"],
            "image":
            None,
        }
Exemplo n.º 13
0
    def test_returns_created_user_offerer(self, app):
        # given
        blake = ProFactory(email="*****@*****.**", id=123)
        VirtualVenueTypeFactory()
        blakes_company = OffererFactory(siren="362521879",
                                        name="MyBletcheyCompany",
                                        id=234)
        self.find_user_query.side_effect = [blake]
        self.find_offerer_query.side_effect = [blakes_company]
        self.find_user_offerer_query.side_effect = [None]

        # when
        user_offerer = create_activated_user_offerer(
            self.csv_row,
            find_user=self.find_user_query,
            find_offerer=self.find_offerer_query,
            find_user_offerer=self.find_user_offerer_query,
        )

        # then
        assert user_offerer.userId == 123
        assert user_offerer.offererId == 234
    def test_unaccessible_file(self, mock_get_distant_image, app):
        # Given
        body = {"url": "https://example.com/bla"}
        user = ProFactory()
        auth_request = TestClient(
            app.test_client()).with_session_auth(email=user.email)
        mock_get_distant_image.side_effect = exceptions.FailureToRetrieve()

        # When
        response = auth_request.post("/offers/thumbnail-url-validation",
                                     json=body)

        # Then
        assert response.status_code == 200
        assert response.json == {
            "errors": [
                "Nous n’avons pas pu récupérer cette image; vous pouvez la télécharger "
                'puis l’importer depuis l’onglet "Importer"'
            ],
            "image":
            None,
        }
Exemplo n.º 15
0
    def test_when_siret_wrong(self, app):
        # Given
        VenueTypeFactory(label="Librairie")
        VirtualVenueTypeFactory()
        ProFactory(email="*****@*****.**")
        csv_row = OrderedDict([
            ("", "104"),
            ("Company ID", "1099515212"),
            ("Email", "*****@*****.**"),
            ("First Name", "Anthony"),
            ("Last Name", "Champion"),
            ("Phone", "01 02 34 56 78"),
            ("Postal Code", "44016.0"),
            ("City", "NANTES CEDEX 1"),
            ("SIRET", "1"),
            ("SIREN", "636710003"),
            ("Département", "44"),
            ("Name", "Fictive"),
            ("Catégorie", "Librairie"),
            ("Street Address", "45 RUE DU JOYEUX LURON"),
            ("nom_structure", "SARL"),
            ("adresse", "45 RUE DU JOYEUX LURON, 44000"),
            ("code_postal", "44000"),
            ("commune", "NANTES"),
            ("geoloc", "[44.455621, -2.546101]"),
            ("nom_lieu", "Ma librairie"),
            ("siege_social", "45 RUE DU JOYEUX LURON, 44000"),
            ("lieu_deja_inscrit", "0"),
            ("structure_deja_inscrite", "0"),
        ])

        # When
        import_new_offerer_from_csv(csv_row)

        # Then
        assert User.query.count() == 1
        assert Offerer.query.count() == 1
        assert UserOfferer.query.count() == 1
        assert Venue.query.count() == 1
    def test_wrong_format(self, mock_get_distant_image, app):
        # Given
        body = {"url": "https://example.com/meme.gif"}
        user = ProFactory()
        auth_request = TestClient(
            app.test_client()).with_session_auth(email=user.email)
        mock_get_distant_image.side_effect = exceptions.UnacceptedFileType(
            accepted_types=(
                "png",
                "jpg",
                "jpeg",
            ))

        # When
        response = auth_request.post("/offers/thumbnail-url-validation",
                                     json=body)

        # Then
        assert response.status_code == 200
        assert response.json == {
            "errors": ["Utilisez un format png, jpg, jpeg"],
            "image": None
        }
Exemplo n.º 17
0
def save_bookings_recap_sandbox():
    yesterday = datetime.utcnow() - timedelta(days=1)
    today = datetime.utcnow()

    beneficiary1 = BeneficiaryGrant18Factory(publicName="Riri Duck",
                                             firstName="Riri",
                                             lastName="Duck",
                                             email="*****@*****.**")

    beneficiary2 = BeneficiaryGrant18Factory(
        publicName="Fifi Brindacier",
        firstName="Fifi",
        lastName="Brindacier",
        email="*****@*****.**",
    )
    beneficiary3 = BeneficiaryGrant18Factory(
        publicName="LouLou Duck",
        firstName="Loulou",
        lastName="Duck",
        email="*****@*****.**",
    )

    pro = ProFactory(
        publicName="Balthazar Picsou",
        firstName="Balthazar",
        lastName="Picsou",
        email="*****@*****.**",
    )
    offerer = OffererFactory(siren="645389012")
    UserOffererFactory(user=pro, offerer=offerer)
    venue1 = VenueFactory(managingOfferer=offerer,
                          name="Cinéma Le Monde Perdu",
                          siret="64538901265877")
    venue2 = VenueFactory(managingOfferer=offerer,
                          name="Librairie Atlantis",
                          siret="64538901201379")
    venue3 = VenueFactory(managingOfferer=offerer,
                          name="Théatre Mordor",
                          siret="64538954601379")
    venue4_virtual = VenueFactory(managingOfferer=offerer,
                                  name="Un lieu virtuel",
                                  siret=None,
                                  isVirtual=True)

    product1_venue1 = EventProductFactory(
        name="Jurassic Park", subcategoryId=subcategories.SEANCE_CINE.id)
    offer1_venue1 = EventOfferFactory(product=product1_venue1,
                                      venue=venue1,
                                      isDuo=True)
    stock_1_offer1_venue1 = EventStockFactory(offer=offer1_venue1,
                                              beginningDatetime=yesterday,
                                              quantity=None,
                                              price=12.99)

    product2_venue1 = EventProductFactory(
        name="Matrix", subcategoryId=subcategories.SEANCE_CINE.id)

    offer2_venue1 = EventOfferFactory(product=product2_venue1,
                                      venue=venue1,
                                      isDuo=False)
    stock_2_offer2_venue1 = EventStockFactory(offer=offer2_venue1,
                                              beginningDatetime=today,
                                              quantity=None,
                                              price=0)

    product1_venue2 = ThingProductFactory(
        name="Fondation",
        subcategoryId=subcategories.LIVRE_PAPIER.id,
        extraData={"isbn": "9788804119135"})
    offer1_venue2 = ThingOfferFactory(product=product1_venue2, venue=venue2)
    stock_1_offer1_venue2 = ThingStockFactory(offer=offer1_venue2,
                                              quantity=42,
                                              price=9.99)

    product2_venue2 = ThingProductFactory(
        name="Martine à la playa",
        subcategoryId=subcategories.LIVRE_PAPIER.id,
        extraData={"isbn": "9787605639121"},
    )
    offer2_venue2 = ThingOfferFactory(product=product2_venue2, venue=venue2)
    stock_1_offer2_venue2 = ThingStockFactory(offer=offer2_venue2,
                                              quantity=12,
                                              price=49.99)

    product1_venue3 = EventProductFactory(
        name="Danse des haricots",
        subcategoryId=subcategories.SPECTACLE_REPRESENTATION.id)
    offer1_venue3 = EventOfferFactory(product=product1_venue3, venue=venue3)
    stock_1_offer1_venue3 = EventStockFactory(offer=offer1_venue3,
                                              quantity=44,
                                              price=18.50)

    product1_venue4 = ThingProductFactory(
        name="Le livre des haricots",
        subcategoryId=subcategories.LIVRE_PAPIER.id)
    offer1_venue4 = ThingOfferFactory(product=product1_venue4,
                                      venue=venue4_virtual)
    stock_1_offer1_venue4 = ThingStockFactory(offer=offer1_venue4,
                                              quantity=70,
                                              price=10.99)

    IndividualBookingFactory(
        individualBooking__user=beneficiary1,
        stock=stock_1_offer1_venue1,
        dateCreated=datetime(2020, 3, 18, 14, 56, 12, 0),
        isUsed=True,
        dateUsed=datetime(2020, 3, 22, 17, 00, 10, 0),
        quantity=2,
    )

    IndividualBookingFactory(
        individualBooking__user=beneficiary1,
        stock=stock_2_offer2_venue1,
        dateCreated=datetime(2020, 4, 22, 9, 17, 12, 0),
    )

    IndividualBookingFactory(
        individualBooking__user=beneficiary2,
        stock=stock_1_offer1_venue1,
        dateCreated=datetime(2020, 3, 18, 12, 18, 12, 0),
        isUsed=True,
        dateUsed=datetime(2020, 5, 2),
        quantity=2,
    )

    booking2_beneficiary2 = IndividualBookingFactory(
        individualBooking__user=beneficiary2,
        stock=stock_1_offer1_venue2,
        dateCreated=datetime(2020, 4, 12, 14, 31, 12, 0),
        isCancelled=False,
    )

    booking1_beneficiary3 = IndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_2_offer2_venue1,
        dateCreated=datetime(2020, 1, 4, 19, 31, 12, 0),
        isCancelled=False,
        isUsed=True,
        dateUsed=datetime(2020, 1, 4, 23, 00, 10, 0),
        quantity=2,
    )

    booking2_beneficiary3 = IndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_1_offer1_venue2,
        dateCreated=datetime(2020, 3, 21, 22, 9, 12, 0),
        isCancelled=False,
    )

    booking3_beneficiary1 = UsedIndividualBookingFactory(
        individualBooking__user=beneficiary1,
        stock=stock_1_offer1_venue3,
        dateCreated=datetime(2020, 4, 12, 14, 31, 12, 0),
    )

    payment_booking3_beneficiary1 = PaymentFactory(
        booking=booking3_beneficiary1)
    PaymentStatusFactory(payment=payment_booking3_beneficiary1,
                         status=TransactionStatus.PENDING)

    booking3_beneficiary2 = UsedIndividualBookingFactory(
        individualBooking__user=beneficiary2,
        stock=stock_1_offer1_venue3,
        dateCreated=datetime(2020, 4, 12, 19, 31, 12, 0),
        dateUsed=datetime(2020, 4, 22, 17, 00, 10, 0),
    )

    PaymentFactory(booking=booking3_beneficiary2)
    PaymentStatusFactory(payment=payment_booking3_beneficiary1,
                         status=TransactionStatus.SENT)

    booking3_beneficiary3 = UsedIndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_1_offer1_venue3,
        dateCreated=datetime(2020, 4, 12, 22, 9, 12, 0),
    )

    payment_booking3_beneficiary3 = PaymentFactory(
        booking=booking3_beneficiary3)
    PaymentStatusFactory(payment=payment_booking3_beneficiary3,
                         status=TransactionStatus.ERROR)

    UsedIndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_1_offer1_venue2,
        dateCreated=datetime(2020, 3, 21, 22, 9, 12, 0),
    )

    booking5_beneficiary3 = IndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_1_offer1_venue4,
        dateCreated=datetime(2020, 3, 21, 22, 9, 12, 0),
        isCancelled=False,
    )

    booking6_beneficiary3 = UsedIndividualBookingFactory(
        individualBooking__user=beneficiary3,
        stock=stock_1_offer2_venue2,
        dateCreated=datetime(2020, 3, 21, 22, 9, 12, 0),
        dateUsed=datetime(2020, 4, 22, 21, 9, 12, 0),
    )

    payment_booking6_beneficiary3 = PaymentFactory(
        booking=booking6_beneficiary3)
    PaymentStatusFactory(payment=payment_booking6_beneficiary3,
                         status=TransactionStatus.SENT)

    booking7_beneficiary2 = UsedIndividualBookingFactory(
        individualBooking__user=beneficiary2,
        stock=stock_1_offer2_venue2,
        dateCreated=datetime(2020, 4, 21, 22, 6, 12, 0),
        dateUsed=datetime(2020, 4, 22, 22, 9, 12, 0),
    )

    payment_booking7_beneficiary2 = PaymentFactory(
        booking=booking7_beneficiary2)
    PaymentStatusFactory(payment=payment_booking7_beneficiary2,
                         status=TransactionStatus.RETRY)

    UsedIndividualBookingFactory(
        individualBooking__user=beneficiary1,
        stock=stock_1_offer2_venue2,
        dateCreated=datetime(2020, 2, 21, 22, 6, 12, 0),
        dateUsed=datetime(2020, 4, 22, 23, 9, 12, 0),
    )

    payment_booking8_beneficiary1 = PaymentFactory(
        booking=booking7_beneficiary2)
    PaymentStatusFactory(payment=payment_booking8_beneficiary1,
                         status=TransactionStatus.PENDING)

    bookings_to_cancel = [
        booking2_beneficiary2,
        booking1_beneficiary3,
        booking2_beneficiary3,
        booking3_beneficiary2,
        booking5_beneficiary3,
    ]

    for booking in bookings_to_cancel:
        try:
            booking.cancel_booking()
        except (BookingIsAlreadyUsed, BookingIsAlreadyCancelled) as e:
            logger.info(str(e), extra={"booking": booking.id})
    repository.save(*bookings_to_cancel)