def test_fnac_stock_provider_update_one_stock_and_update_matching_offer(self, mock_fnac_api_response, app): # Given mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 10, "price": 16}]) offerer = create_offerer() venue = create_venue(offerer) fnac_stocks_provider = activate_provider("FnacStocks") venue_provider = create_venue_provider( venue, fnac_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) fnac_stocks = FnacStocks(venue_provider) # When fnac_stocks.updateObjects() # Then stock = Stock.query.one() assert stock.quantity == 10 assert Offer.query.count() == 1
def test_fnac_stock_provider_create_one_stock_and_one_offer_with_wanted_attributes( self, mock_fnac_api_response, app ): # Given mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 10, "price": 16.5}]) offerer = create_offerer() venue = create_venue(offerer, siret="77567146400110") fnac_stocks_provider = activate_provider("FnacStocks") venue_provider = create_venue_provider( venue, fnac_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) fnac_stocks = FnacStocks(venue_provider) # When fnac_stocks.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_fnac_stocks_create_2_stocks_and_2_offers_even_if_existing_offer_on_same_product( self, mock_fnac_api_response, app ): # Given mock_fnac_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") fnac_stocks_provider = activate_provider("FnacStocks") venue_provider = create_venue_provider( venue, fnac_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_fnac_id") repository.save(offer, product_1, product_2, venue_provider) fnac_stocks = FnacStocks(venue_provider) # When fnac_stocks.updateObjects() # Then assert Stock.query.count() == 2 assert Offer.query.filter_by(lastProviderId=fnac_stocks_provider.id).count() == 2 assert fnac_stocks.last_processed_isbn == "1550199555555"
def test_fnac_stock_provider_available_stock_is_sum_of_updated_available_and_bookings( self, mock_fnac_api_response, app ): # Given mock_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 5, "price": 0}]) offerer = create_offerer() venue = create_venue(offerer, siret="12345678912345") fnac_stocks_provider = activate_provider("FnacStocks") venue_provider = create_venue_provider( venue, fnac_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_fnac_api_response.return_value = iter([{"ref": "9780199536986", "available": 66, "price": 0}]) fnac_stocks = FnacStocks(venue_provider) # When fnac_stocks.updateObjects() # Then stock = Stock.query.one() assert stock.quantity == 67
def test_fnac_stock_provider_iterates_over_pagination( self, mock_fnac_api_response, app): # Given mock_fnac_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") fnac_stocks_provider = activate_provider("FnacStocks") venue_provider = create_venue_provider( venue, fnac_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) fnac_stocks = FnacStocks(venue_provider) # When fnac_stocks.updateObjects() # Then offers = Offer.query.all() stocks = Stock.query.all() assert len(stocks) == 2 assert len(offers) == 2 assert mock_fnac_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)), ]