def test_stock_provider_libraires_update_one_stock_and_update_matching_offer( self, mock_libraires_api_response, app ): # Given mock_libraires_api_response.return_value = iter([{"ref": "9780199536986", "available": 10, "price": 16}]) offerer = create_offerer() venue = create_venue(offerer) libraires_stocks_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider( venue, libraires_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345" ) product = create_product_with_thing_type(id_at_providers="9780199536986") offer = create_offer_with_thing_product( venue, product=product, id_at_providers="9780199536986@12345678912345" ) stock = create_stock(id_at_providers="9780199536986@12345678912345", offer=offer, quantity=20) repository.save(product, offer, stock) libraires_stocks_provider = LibrairesStocks(venue_provider) # When libraires_stocks_provider.updateObjects() # Then stock = Stock.query.one() assert stock.quantity == 10 assert Offer.query.count() == 1
def test_stock_provider_libraires_create_one_stock_and_one_offer_with_wanted_attributes( self, mock_libraires_api_response, app ): # Given mock_libraires_api_response.return_value = iter([{"ref": "9780199536986", "available": 10, "price": 16.5}]) offerer = create_offerer() venue = create_venue(offerer, siret="77567146400110") libraires_stocks_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider( venue, libraires_stocks_provider, is_active=True, venue_id_at_offer_provider="77567146400110" ) product = create_product_with_thing_type(id_at_providers="9780199536986") repository.save(product, venue_provider) libraires_stocks_provider = LibrairesStocks(venue_provider) # When libraires_stocks_provider.updateObjects() # Then offer = Offer.query.first() stock = Stock.query.first() assert offer.type == product.type assert offer.description == product.description assert offer.venue is not None assert offer.bookingEmail == venue.bookingEmail assert offer.extraData == product.extraData assert stock.price == 16.5 assert stock.quantity == 10 assert stock.bookingLimitDatetime is None
def test_stock_provider_libraires_available_stock_is_sum_of_updated_available_and_bookings( self, mock_libraires_api_response, app ): # Given mock_libraires_api_response.return_value = iter([{"ref": "9780199536986", "available": 5, "price": 0}]) offerer = create_offerer() venue = create_venue(offerer, siret="12345678912345") libraires_stocks_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider( venue, libraires_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345" ) product = create_product_with_thing_type(id_at_providers="9780199536986") offer = create_offer_with_thing_product( venue, product=product, id_at_providers="9780199536986@12345678912345" ) stock = create_stock(id_at_providers="9780199536986@12345678912345", offer=offer, price=0, quantity=20) booking = create_booking(user=create_user(), quantity=1, stock=stock) repository.save(venue_provider, booking) mock_libraires_api_response.return_value = iter([{"ref": "9780199536986", "available": 66, "price": 0}]) libraires_stocks_provider = LibrairesStocks(venue_provider) # When libraires_stocks_provider.updateObjects() # Then stock = Stock.query.one() assert stock.quantity == 67
def test_libraires_stocks_create_2_stocks_and_2_offers_even_if_existing_offer_on_same_product( self, mock_libraires_api_response, app ): # Given mock_libraires_api_response.return_value = iter( [ {"ref": "9780199536986", "available": 5, "price": 16}, {"ref": "1550199555555", "available": 4, "price": 18}, ] ) offerer = create_offerer() venue = create_venue(offerer, siret="12345678912345") libraires_stocks_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider( venue, libraires_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345" ) product_1 = create_product_with_thing_type(id_at_providers="9780199536986") product_2 = create_product_with_thing_type(id_at_providers="1550199555555") offer = create_offer_with_thing_product( venue, product=product_2, id_at_providers="everything_but_libraires" ) repository.save(offer, product_1, product_2, venue_provider) libraires_stocks_local_provider = LibrairesStocks(venue_provider) # When libraires_stocks_local_provider.updateObjects() # Then assert Stock.query.count() == 2 assert Offer.query.filter_by(lastProviderId=libraires_stocks_provider.id).count() == 2 assert libraires_stocks_local_provider.last_processed_isbn == "1550199555555"
def test_should_return_providable_infos_with_correct_data(self, mock_libraires_api_response, app): # Given mock_libraires_api_response.return_value = iter([{"ref": "9780199536986", "available": 1, "price": 6.36}]) offerer = create_offerer() venue = create_venue(offerer, siret="12345678912345") libraires_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider(venue, libraires_provider, last_sync_date=datetime(2020, 2, 4)) product = create_product_with_thing_type(id_at_providers="9780199536986") repository.save(venue_provider, product) libraires_stocks_provider = LibrairesStocks(venue_provider) # When libraires_providable_infos = next(libraires_stocks_provider) # Then assert mock_libraires_api_response.call_args_list == [call("12345678912345", "", datetime(2020, 2, 4))] assert len(libraires_providable_infos) == 2 offer_providable_info = libraires_providable_infos[0] stock_providable_info = libraires_providable_infos[1] assert offer_providable_info.type == Offer assert offer_providable_info.id_at_providers == "9780199536986@12345678912345" assert stock_providable_info.type == Stock assert stock_providable_info.id_at_providers == "9780199536986@12345678912345"
def test_stock_provider_libraires_iterates_over_pagination(self, mock_libraires_api_response, app): # Given mock_libraires_api_response.side_effect = [ iter([{"ref": "9780199536986", "available": 4, "price": 16}]), iter([{"ref": "1550199555555", "available": 5, "price": 14}]), ] offerer = create_offerer() venue = create_venue(offerer, siret="12345678912345") libraires_stocks_provider = activate_provider("LibrairesStocks") venue_provider = create_venue_provider( venue, libraires_stocks_provider, is_active=True, venue_id_at_offer_provider="12345678912345", last_sync_date=datetime(2020, 2, 4), ) product_1 = create_product_with_thing_type(id_at_providers="9780199536986") product_2 = create_product_with_thing_type(id_at_providers="1550199555555") repository.save(product_1, product_2, venue_provider) libraires_stocks_provider = LibrairesStocks(venue_provider) # When libraires_stocks_provider.updateObjects() # Then offers = Offer.query.all() stocks = Stock.query.all() assert len(stocks) == 2 assert len(offers) == 2 assert mock_libraires_api_response.call_args_list == [ call("12345678912345", "", datetime(2020, 2, 4)), call("12345678912345", "9780199536986", datetime(2020, 2, 4)), call("12345678912345", "1550199555555", datetime(2020, 2, 4)), ]