Esempio n. 1
0
    def test_should_return_one_offer_id_when_offers_are_expired_exactly_since_one_day(
            self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer1 = create_offer_with_event_product(is_active=True, venue=venue)
        offer2 = create_offer_with_event_product(is_active=True, venue=venue)
        in_range_stock = create_stock_from_offer(
            offer=offer1,
            booking_limit_datetime=datetime(2019, 12, 31, 10, 0, 0))
        out_of_range_stock = create_stock_from_offer(
            offer=offer2,
            booking_limit_datetime=datetime(2019, 12, 30, 9, 59, 59))
        repository.save(in_range_stock, out_of_range_stock)

        # When
        results = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=2,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        assert len(results) == 1
        assert offer1 in results
        assert offer2 not in results
Esempio n. 2
0
def batch_deleting_expired_offers_in_algolia(client: Redis,
                                             process_all_expired: bool = False
                                             ) -> None:
    page = 0
    has_still_offers = True
    one_day_before_now = datetime.utcnow() - timedelta(days=1)
    two_days_before_now = datetime.utcnow() - timedelta(days=2)
    arbitrary_oldest_date = datetime(2000, 1, 1)
    from_date = two_days_before_now if not process_all_expired else arbitrary_oldest_date

    while has_still_offers:
        expired_offer_ids_as_tuple = offer_queries.get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=settings.ALGOLIA_DELETING_OFFERS_CHUNK_SIZE,
            page=page,
            from_date=from_date,
            to_date=one_day_before_now,
        )
        expired_offer_ids_as_int = from_tuple_to_int(
            offer_ids=expired_offer_ids_as_tuple)

        if len(expired_offer_ids_as_int) > 0:
            logger.info(
                "[ALGOLIA] processing deletion of expired offers from page %s...",
                page)
            delete_expired_offers(client=client,
                                  offer_ids=expired_offer_ids_as_int)
            logger.info("[ALGOLIA] expired offers from page %s processed!",
                        page)
        else:
            has_still_offers = False
            logger.info("[ALGOLIA] deleting expired offers finished!")
        page += 1
Esempio n. 3
0
    def test_should_not_return_offer_ids_when_active_and_booking_limit_datetime_is_not_expired(
            self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer1 = create_offer_with_event_product(is_active=True, venue=venue)
        offer2 = create_offer_with_event_product(is_active=True, venue=venue)
        offer3 = create_offer_with_thing_product(is_active=True, venue=venue)
        offer4 = create_offer_with_thing_product(is_active=True, venue=venue)
        stock1 = create_stock_from_offer(offer=offer1,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 2, 0, 0, 0))
        stock2 = create_stock_from_offer(offer=offer2,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 2, 0, 0, 0))
        stock3 = create_stock_from_offer(offer=offer3,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 2, 0, 0, 0))
        stock4 = create_stock_from_offer(offer=offer4,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 2, 0, 0, 0))
        repository.save(stock1, stock2, stock3, stock4)

        # When
        results = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=4,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        assert len(results) == 0
Esempio n. 4
0
    def should_ignore_soft_deleted_stocks(self, app):
        offer = offers_factories.OfferFactory()
        offers_factories.StockFactory(
            offer=offer,
            bookingLimitDatetime=datetime(2019, 12, 31),  # within range
        )
        offers_factories.StockFactory(
            offer=offer,
            bookingLimitDatetime=datetime(2020, 1, 31),  # in the future
            isSoftDeleted=True,
        )

        expired_offer_ids = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=1,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        expired_offer_ids = from_tuple_to_int(expired_offer_ids)
        assert expired_offer_ids == [offer.id]
Esempio n. 5
0
    def should_not_get_offer_with_valid_stocks(self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer = create_offer_with_event_product(is_active=True, venue=venue)
        expired_stock = create_stock_from_offer(
            offer=offer, booking_limit_datetime=datetime(2019, 12, 31))
        valid_stock = create_stock_from_offer(offer=offer,
                                              booking_limit_datetime=datetime(
                                                  2020, 1, 30))
        repository.save(expired_stock, valid_stock)

        # When
        results = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=2,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        assert results == []
Esempio n. 6
0
    def test_should_return_one_offer_id_from_first_page_when_active_and_beginning_datetime_is_null(
            self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer1 = create_offer_with_event_product(is_active=True, venue=venue)
        offer2 = create_offer_with_event_product(is_active=True, venue=venue)
        offer3 = create_offer_with_thing_product(is_active=True, venue=venue)
        offer4 = create_offer_with_thing_product(is_active=True, venue=venue)
        stock1 = create_stock_from_offer(offer=offer1,
                                         booking_limit_datetime=datetime(
                                             2019, 12, 31, 0, 0, 0))
        stock2 = create_stock_from_offer(offer=offer2,
                                         booking_limit_datetime=datetime(
                                             2019, 12, 30, 0, 0, 0))
        stock3 = create_stock_from_offer(offer=offer3,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 2, 0, 0, 0),
                                         beginning_datetime=None)
        stock4 = create_stock_from_offer(offer=offer4,
                                         booking_limit_datetime=datetime(
                                             2020, 1, 3, 0, 0, 0),
                                         beginning_datetime=None)
        repository.save(stock1, stock2, stock3, stock4)

        # When
        results = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=1,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        assert len(results) == 1
        assert (offer1.id, ) in results
        assert (offer2.id, ) not in results
        assert (offer3.id, ) not in results
        assert (offer4.id, ) not in results
Esempio n. 7
0
    def test_should_return_no_offer_ids_when_offers_are_expired_since_more_than_two_days(
            self, app):
        # Given
        offerer = create_offerer()
        venue = create_venue(offerer=offerer)
        offer1 = create_offer_with_event_product(is_active=True, venue=venue)
        offer2 = create_offer_with_event_product(is_active=True, venue=venue)
        out_of_range_stock1 = create_stock_from_offer(
            offer=offer1,
            booking_limit_datetime=datetime(2019, 12, 30, 9, 59, 0))
        out_of_range_stock2 = create_stock_from_offer(
            offer=offer2,
            booking_limit_datetime=datetime(2019, 12, 29, 0, 0, 0))
        repository.save(out_of_range_stock1, out_of_range_stock2)

        # When
        results = get_paginated_offer_ids_given_booking_limit_datetime_interval(
            limit=2,
            page=0,
            from_date=datetime(2019, 12, 30, 10, 0, 0),
            to_date=datetime(2019, 12, 31, 10, 0, 0))

        # Then
        assert len(results) == 0