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
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
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
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]
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 == []
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
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