def test_search_with_several_partial_keywords_returns_things_and_events_with_name_containing_keywords( self, app): # Given thing_ok = create_product_with_thing_type( thing_name='Rencontre de michel') thing_product = create_product_with_thing_type( thing_name='Rencontre avec jean-luc') event_product = create_product_with_event_type( event_name='Rencontre avec jean-mimi chelou') offerer = create_offerer() venue = create_venue(offerer) thing_ok_offer = create_offer_with_thing_product(venue, thing_ok) thing_ko_offer = create_offer_with_thing_product(venue, thing_product) event_ko_offer = create_offer_with_event_product(venue, event_product) event_ko_occurrence = create_event_occurrence(event_ko_offer) event_ko_stock = create_stock_from_event_occurrence( event_ko_occurrence) thing_ok_stock = create_stock_from_offer(thing_ok_offer) thing_ko_stock = create_stock_from_offer(thing_ko_offer) PcObject.save(event_ko_stock, thing_ok_stock, thing_ko_stock) # When offers = get_offers_for_recommendations_search( keywords_string='renc michel') # Then assert thing_ok_offer in offers assert thing_ko_offer not in offers assert event_ko_offer not in offers
def test_search_return_offers_by_types_with_some_but_not_all_beginning_datetime_passed_and_no_booking_limit_datetime( self, app): # Given three_hours_ago = datetime.utcnow() - timedelta(hours=3) in_three_hours = datetime.utcnow() + timedelta(hours=3) in_four_hours = datetime.utcnow() + timedelta(hours=4) type_label = EventType.MUSEES_PATRIMOINE offerer = create_offerer() venue = create_venue(offerer) offer = create_offer_with_event_product(venue, event_type=type_label) outdated_event_occurrence = create_event_occurrence( offer, beginning_datetime=three_hours_ago, end_datetime=datetime.utcnow()) future_event_occurrence = create_event_occurrence( offer, beginning_datetime=in_three_hours, end_datetime=in_four_hours) future_stock = create_stock_from_event_occurrence( future_event_occurrence, booking_limit_date=None) outdated_stock = create_stock_from_event_occurrence( outdated_event_occurrence, booking_limit_date=None) PcObject.save(future_stock, outdated_stock) # When search_result_offers = get_offers_for_recommendations_search( type_values=[str(type_label)], ) # Then assert offer in search_result_offers
def test_search_by_datetime_only_returns_recommendations_starting_during_time_interval( self, app): # Duplicate # Given offerer = create_offerer() venue = create_venue(offerer) ok_stock = _create_event_stock_and_offer_for_date( venue, datetime(2018, 1, 6, 12, 30)) ko_stock_before = _create_event_stock_and_offer_for_date( venue, datetime(2018, 1, 1, 12, 30)) ko_stock_after = _create_event_stock_and_offer_for_date( venue, datetime(2018, 1, 10, 12, 30)) ok_stock_with_thing = create_stock_with_thing_offer(offerer, venue) PcObject.save(ok_stock, ko_stock_before, ko_stock_after) # When search_result_offers = get_offers_for_recommendations_search( days_intervals=[[ datetime(2018, 1, 6, 12, 0), datetime(2018, 1, 6, 13, 0) ]], ) # Then assert ok_stock.resolvedOffer in search_result_offers assert ok_stock_with_thing.resolvedOffer in search_result_offers assert ko_stock_before.resolvedOffer not in search_result_offers assert ko_stock_after.resolvedOffer not in search_result_offers
def create_recommendations_for_search(user, **kwargs): offers = get_offers_for_recommendations_search(**kwargs) search = get_search(kwargs) recommendations = [] for offer in offers: recommendation = _create_recommendation(user, offer) recommendation.search = search recommendations.append(recommendation) PcObject.save(*recommendations) return recommendations
def test_search_with_accents_matches_offer_without_accents_2(self, app): # Given thing_ok = create_product_with_thing_type(thing_name='Déjà') offerer = create_offerer() venue = create_venue(offerer) thing_ok_offer = create_offer_with_thing_product(venue, thing_ok) thing_ok_stock = create_stock_from_offer(thing_ok_offer) PcObject.save(thing_ok_stock) # When offers = get_offers_for_recommendations_search(keywords_string='deja') # assert thing_ok_offer in offers
def test_search_does_not_return_offers_by_types_with_booking_limit_date_over( self, app): # Given three_hours_ago = datetime.utcnow() - timedelta(hours=3) type_label = ThingType.JEUX_VIDEO offerer = create_offerer() venue = create_venue(offerer) offer = create_offer_with_thing_product(venue, thing_type=type_label) outdated_stock = create_stock_from_offer( offer, booking_limit_datetime=three_hours_ago) PcObject.save(outdated_stock) # When search_result_offers = get_offers_for_recommendations_search( type_values=[str(type_label)], ) # Then assert not search_result_offers
def test_get_offers_for_recommendations_search_only_return_available_offers( app): # Given in_one_hour = datetime.utcnow() + timedelta(hours=1) in_two_hours = datetime.utcnow() + timedelta(hours=2) offerer = create_offerer() venue = create_venue(offerer) thing_product = create_product_with_thing_type( thing_name='Lire un livre de Jazz') offer_available = create_offer_with_thing_product(venue, thing_product) offer_not_available = create_offer_with_event_product( venue, event_name='Training in Modern Jazz') event_occurrence = create_event_occurrence(offer_not_available, beginning_datetime=in_one_hour, end_datetime=in_two_hours) stock_with_no_available = create_stock_from_event_occurrence( event_occurrence, available=0) stock_with_one_available = create_stock_from_event_occurrence( event_occurrence, available=1, price=0) user = create_user() booking = create_booking(user, stock_with_one_available, quantity=1, venue=venue) stock_available = create_stock(price=12, available=5, offer=offer_available) PcObject.save(stock_with_no_available, stock_available, booking) # When offers = get_offers_for_recommendations_search(keywords_string='Jazz') # Then assert len(offers) == 1 assert offer_available in offers
def test_search_by_one_thing_type_returns_only_offers_on_things_of_that_type( self, app): # Given type_label_ok = ThingType.JEUX_VIDEO type_label_ko = ThingType.LIVRE_EDITION thing_ok1 = create_product_with_thing_type(thing_type=type_label_ok) thing_ok2 = create_product_with_thing_type(thing_type=type_label_ok) thing_ko = create_product_with_thing_type(thing_type=type_label_ko) event_ko = create_product_with_event_type(event_type=EventType.CINEMA) offerer = create_offerer() venue = create_venue(offerer) ok_offer_1 = create_offer_with_thing_product(venue, thing_ok1) ok_offer_2 = create_offer_with_thing_product(venue, thing_ok2) ko_offer = create_offer_with_thing_product(venue, thing_ko) ko_event_offer = create_offer_with_event_product(venue, event_ko) ko_event_occurrence = create_event_occurrence(ko_event_offer) ok_stock1 = create_stock_from_offer(ok_offer_1) ok_stock2 = create_stock_from_offer(ok_offer_2) ko_stock1 = create_stock_from_offer(ko_offer) ko_stock2 = create_stock_from_event_occurrence(ko_event_occurrence) PcObject.save(ok_stock1, ok_stock2, ko_stock1, ko_stock2) # When offers = get_offers_for_recommendations_search( type_values=[str(type_label_ok)], ) # Then assert len(offers) == 2 assert ok_offer_1 in offers assert ok_offer_2 in offers
def test_search_by_one_event_type_returns_only_offers_on_events_of_that_type( self, app): # Given type_label = EventType.CONFERENCE_DEBAT_DEDICACE other_type_label = EventType.MUSIQUE conference_event1 = create_product_with_event_type( 'Rencontre avec Franck Lepage', event_type=type_label) conference_event2 = create_product_with_event_type( 'Conférence ouverte', event_type=type_label) concert_event = create_product_with_event_type( 'Concert de Gael Faye', event_type=other_type_label) offerer = create_offerer( siren='507633576', address='1 BD POISSONNIERE', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue = create_venue(offerer, name='LE GRAND REX PARIS', address="1 BD POISSONNIERE", postal_code='75002', city="Paris", departement_code='75', is_virtual=False, longitude="2.4002701", latitude="48.8363788", siret="50763357600016") conference_offer1 = create_offer_with_event_product( venue, conference_event1) conference_offer2 = create_offer_with_event_product( venue, conference_event2) concert_offer = create_offer_with_event_product(venue, concert_event) conference_event_occurrence1 = create_event_occurrence( conference_offer1) conference_event_occurrence2 = create_event_occurrence( conference_offer2) concert_event_occurrence = create_event_occurrence(concert_offer) conference_stock1 = create_stock_from_event_occurrence( conference_event_occurrence1) conference_stock2 = create_stock_from_event_occurrence( conference_event_occurrence2) concert_stock = create_stock_from_event_occurrence( concert_event_occurrence) PcObject.save(conference_stock1, conference_stock2, concert_stock) # When offers = get_offers_for_recommendations_search( type_values=[str(type_label)], ) # Then assert conference_offer1 in offers assert conference_offer2 in offers assert concert_offer not in offers
def test_get_offers_for_recommendations_search_with_all_distances_should_returns_all_offers( app): # Given offerer75 = create_offerer( siren='507633576', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue13 = create_venue(offerer75, name='Friche La Belle de Mai', city="Marseille", departement_code='13', is_virtual=False, longitude="5.3764073", latitude="43.303906", siret="50763357600013") venue75 = create_venue(offerer75, name='LE GRAND REX PARIS', address="1 BD POISSONNIERE", postal_code='75002', city="Paris", departement_code='75', is_virtual=False, longitude="2.4002701", latitude="48.8363788", siret="50763357600075") venue78 = create_venue(offerer75, name='CAC Georges Brassens', city="Mantes-la-jolie", departement_code='78', is_virtual=False, longitude="2.713513", latitude="48.985968", siret="50763357600078") venue92 = create_venue(offerer75, name='2G – Théâtre de Gennevilliers', city="Gennevilliers", departement_code='92', is_virtual=False, longitude="2.2985554", latitude="48.9143444", siret="50763357600092") venue77 = create_venue(offerer75, name='Centre Culturel Municipal Jacques Prévert', city="Villeparisis", departement_code='77', is_virtual=False, longitude="2.614391", latitude="48.942623", siret="50763357600077") venue91 = create_venue(offerer75, name='Théâtre de Longjumeau', city="Longjumeau", departement_code='91', is_virtual=False, longitude="2.2881266", latitude="48.6922895", siret="50763357600091") venue93 = create_venue(offerer75, name='La Salle', city="Aulnay Sous Bois", departement_code='93', is_virtual=False, longitude="2.3458074", latitude="48.9247067", siret="50763357600093") venue94 = create_venue(offerer75, name='Centre Culturel Municipal Jacques Prévert', city="Cachan", departement_code='91', is_virtual=False, longitude="2.3231582", latitude="48.7914281", siret="50763357600094") venue95 = create_venue(offerer75, name='EMB', city="Sannois", departement_code='95', is_virtual=False, longitude="2.2683263", latitude="48.976826", siret="50763357600095") venue973 = create_venue(offerer75, name='Théâtre de Macouria', city="Cayenne", departement_code='973', is_virtual=False, longitude="-52.423277", latitude="4.9780178", siret="50763357600973") concert_event = create_product_with_event_type('Concert de Gael Faye') concert_offer13 = create_offer_with_event_product(venue13, concert_event) concert_offer75 = create_offer_with_event_product(venue75, concert_event) concert_offer77 = create_offer_with_event_product(venue77, concert_event) concert_offer78 = create_offer_with_event_product(venue78, concert_event) concert_offer91 = create_offer_with_event_product(venue91, concert_event) concert_offer92 = create_offer_with_event_product(venue92, concert_event) concert_offer93 = create_offer_with_event_product(venue93, concert_event) concert_offer94 = create_offer_with_event_product(venue94, concert_event) concert_offer95 = create_offer_with_event_product(venue95, concert_event) concert_offer973 = create_offer_with_event_product(venue973, concert_event) concert_event_occurrence13 = create_event_occurrence(concert_offer13) concert_stock13 = create_stock_from_event_occurrence( concert_event_occurrence13) concert_event_occurrence91 = create_event_occurrence(concert_offer91) concert_stock91 = create_stock_from_event_occurrence( concert_event_occurrence91) concert_event_occurrence93 = create_event_occurrence(concert_offer93) concert_stock93 = create_stock_from_event_occurrence( concert_event_occurrence93) concert_event_occurrence94 = create_event_occurrence(concert_offer94) concert_stock94 = create_stock_from_event_occurrence( concert_event_occurrence94) concert_event_occurrence95 = create_event_occurrence(concert_offer95) concert_stock95 = create_stock_from_event_occurrence( concert_event_occurrence95) concert_event_occurrence973 = create_event_occurrence(concert_offer973) concert_stock973 = create_stock_from_event_occurrence( concert_event_occurrence973) PcObject.save(concert_stock13, concert_stock95, concert_stock91, concert_stock93, concert_stock94, concert_stock973) # When # User in Mantes-la-jolie offers = get_offers_for_recommendations_search(max_distance=20000, longitude=2.713513, latitude=48.985968) # Then assert concert_offer13 in offers assert concert_offer91 in offers assert concert_offer93 in offers assert concert_offer94 in offers assert concert_offer95 in offers assert concert_offer973 in offers
def test_get_offers_for_recommendations_search_with_all_distance_and_keywords( app): # Given offerer75 = create_offerer( siren='507633576', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue45 = create_venue(offerer75, name='Salle Albert Camus', city="Orléans", departement_code='45', is_virtual=False, longitude="1.9201176", latitude="47.9063667", siret="50763357600045") venue75 = create_venue(offerer75, name='LE GRAND REX PARIS', address="1 BD POISSONNIERE", postal_code='75002', city="Paris", departement_code='75', is_virtual=False, longitude="2.4002701", latitude="48.8363788", siret="50763357600075") venue78 = create_venue(offerer75, name='CAC Georges Brassens', city="Mantes-la-jolie", departement_code='78', is_virtual=False, longitude="2.713513", latitude="48.985968", siret="50763357600078") venue91 = create_venue(offerer75, name='Théâtre de Orsay', city="Orsay", departement_code='91', is_virtual=False, longitude="2.1911928", latitude="48.7034926", siret="50763357600091") concert_event = create_product_with_event_type('Concert de Gael Faye') concert_event2 = create_product_with_event_type('Kiwi') concert_offer45 = create_offer_with_event_product(venue45, concert_event) kiwi_concert_offer75 = create_offer_with_event_product( venue75, concert_event2) concert_offer78 = create_offer_with_event_product(venue78, concert_event) concert_offer91 = create_offer_with_event_product(venue91, concert_event) concert_event_occurrence45 = create_event_occurrence(concert_offer45) concert_stock45 = create_stock_from_event_occurrence( concert_event_occurrence45) kiwi_concert_event_occurrence75 = create_event_occurrence( kiwi_concert_offer75) kiwi_concert_stock75 = create_stock_from_event_occurrence( kiwi_concert_event_occurrence75) concert_event_occurrence78 = create_event_occurrence(concert_offer78) concert_stock78 = create_stock_from_event_occurrence( concert_event_occurrence78) concert_event_occurrence91 = create_event_occurrence(concert_offer91) concert_stock91 = create_stock_from_event_occurrence( concert_event_occurrence91) PcObject.save(concert_stock45, kiwi_concert_stock75, concert_stock78, concert_offer91) # When # User in Paris offers = get_offers_for_recommendations_search(max_distance=20000, longitude=2.4002701, latitude=48.8363788, keywords_string='Kiwi') # Then assert concert_offer45 not in offers assert kiwi_concert_offer75 in offers assert concert_offer78 not in offers assert concert_offer91 not in offers
def test_get_offers_for_recommendations_search_with_distance_returns_offers_in_virtuals_venues_no_matter_wich_distance_with_user_in_Paris( app): # Given offerer75 = create_offerer( siren='507633576', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue45 = create_venue(offerer75, name='Salle Albert Camus', city="Orléans", departement_code='45', is_virtual=True, longitude="1.9201176", latitude="47.9063667", siret=None) venue13 = create_venue(offerer75, name='Friche La Belle de Mai', city="Marseille", departement_code='13', is_virtual=True, longitude="5.3764073", latitude="43.303906", siret=None) venue973 = create_venue(offerer75, name='Théâtre de Macouria', city="Cayenne", departement_code='973', is_virtual=True, longitude="-52.423277", latitude="4.9780178", siret=None) concert_event = create_product_with_event_type('Concert de Gael Faye') concert_offer13 = create_offer_with_event_product(venue13, concert_event) concert_offer45 = create_offer_with_event_product(venue45, concert_event) concert_offer973 = create_offer_with_event_product(venue973, concert_event) concert_event_occurrence13 = create_event_occurrence(concert_offer13) concert_stock13 = create_stock_from_event_occurrence( concert_event_occurrence13) concert_event_occurrence45 = create_event_occurrence(concert_offer45) concert_stock45 = create_stock_from_event_occurrence( concert_event_occurrence45) concert_event_occurrence973 = create_event_occurrence(concert_offer973) concert_stock973 = create_stock_from_event_occurrence( concert_event_occurrence973) PcObject.save(concert_stock13, concert_stock45, concert_stock973) # When # User in Paris offers = get_offers_for_recommendations_search(max_distance=1, longitude=2.4002701, latitude=48.8363788) # Then assert concert_offer45 not in offers assert concert_offer13 not in offers assert concert_offer973 not in offers
def test_get_offers_for_recommendations_search_with_distance_less_than_20kms_returns_one_offer_in_venue_with_coordonnates_that_match_with_user_in_Paris( app): # Given offerer75 = create_offerer( siren='507633576', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue75 = create_venue(offerer75, name='LE GRAND REX PARIS', address="1 BD POISSONNIERE", postal_code='75002', city="Paris", departement_code='75', is_virtual=False, longitude="2.4002701", latitude="48.8363788", siret="50763357600075") venue77 = create_venue(offerer75, name='Centre Culturel Municipal Jacques Prévert', city="Villeparisis", departement_code='77', is_virtual=False, longitude="2.614391", latitude="48.942623", siret="50763357600077") venue78 = create_venue(offerer75, name='CAC Georges Brassens', city="Mantes-la-jolie", departement_code='78', is_virtual=False, longitude="2.713513", latitude="48.985968", siret="50763357600078") venue91 = create_venue(offerer75, name='Théâtre de Orsay', city="Orsay", departement_code='91', is_virtual=False, longitude="2.1911928", latitude="48.7034926", siret="50763357600091") venue92 = create_venue(offerer75, name='2G – Théâtre de Gennevilliers', city="Gennevilliers", departement_code='92', is_virtual=False, longitude="2.2985554", latitude="48.9143444", siret="50763357600092") venue93 = create_venue(offerer75, name='La Salle', city="Aulnay Sous Bois", departement_code='93', is_virtual=False, longitude="2.3458074", latitude="48.9247067", siret="50763357600093") venue95 = create_venue(offerer75, name='EMB', city="Sannois", departement_code='95', is_virtual=False, longitude="2.2683263", latitude="48.976826", siret="50763357600095") venue94 = create_venue(offerer75, name='Centre Culturel Municipal Jacques Prévert', city="Cachan", departement_code='91', is_virtual=False, longitude="2.3231582", latitude="48.7914281", siret="50763357600094") concert_event = create_product_with_event_type('Concert de Gael Faye') concert_offer75 = create_offer_with_event_product(venue75, concert_event) concert_offer77 = create_offer_with_event_product(venue77, concert_event) concert_offer78 = create_offer_with_event_product(venue78, concert_event) concert_offer91 = create_offer_with_event_product(venue91, concert_event) concert_offer92 = create_offer_with_event_product(venue92, concert_event) concert_offer93 = create_offer_with_event_product(venue93, concert_event) concert_offer94 = create_offer_with_event_product(venue94, concert_event) concert_offer95 = create_offer_with_event_product(venue95, concert_event) concert_event_occurrence75 = create_event_occurrence(concert_offer75) concert_stock75 = create_stock_from_event_occurrence( concert_event_occurrence75) concert_event_occurrence77 = create_event_occurrence(concert_offer77) concert_stock77 = create_stock_from_event_occurrence( concert_event_occurrence77) concert_event_occurrence78 = create_event_occurrence(concert_offer78) concert_stock78 = create_stock_from_event_occurrence( concert_event_occurrence78) concert_event_occurrence91 = create_event_occurrence(concert_offer91) concert_stock91 = create_stock_from_event_occurrence( concert_event_occurrence91) concert_event_occurrence92 = create_event_occurrence(concert_offer92) concert_stock92 = create_stock_from_event_occurrence( concert_event_occurrence92) concert_event_occurrence93 = create_event_occurrence(concert_offer93) concert_stock93 = create_stock_from_event_occurrence( concert_event_occurrence93) concert_event_occurrence94 = create_event_occurrence(concert_offer94) concert_stock94 = create_stock_from_event_occurrence( concert_event_occurrence94) concert_event_occurrence95 = create_event_occurrence(concert_offer95) concert_stock95 = create_stock_from_event_occurrence( concert_event_occurrence95) PcObject.save(concert_stock75, concert_stock77, concert_stock78, concert_stock91, concert_stock92, concert_stock93, concert_stock94, concert_stock95) # When # User in Paris offers = get_offers_for_recommendations_search(max_distance=20, longitude=2.4002701, latitude=48.8363788) # Then assert concert_offer75 in offers assert concert_offer77 in offers assert concert_offer78 not in offers assert concert_offer91 not in offers assert concert_offer92 in offers assert concert_offer93 in offers assert concert_offer94 in offers assert concert_offer95 in offers
def test_get_offers_for_recommendations_search_with_distance_less_than_1km_returns_one_offer_in_venue_with_coordonnates_that_match( app): # Given offerer75 = create_offerer( siren='507633576', city='Paris', postal_code='75002', name='LE GRAND REX PARIS', validation_token=None, ) venue75 = create_venue(offerer75, name='LE GRAND REX PARIS', address="1 BD POISSONNIERE", postal_code='75002', city="Paris", departement_code='75', is_virtual=False, longitude="2.4002701", latitude="48.8363788", siret="50763357600075") venue77 = create_venue(offerer75, name='Centre Culturel Municipal Jacques Prévert', city="Villeparisis", departement_code='77', is_virtual=False, longitude="2.614391", latitude="48.942623", siret="50763357600077") venue78 = create_venue(offerer75, name='CAC Georges Brassens', city="Mantes-la-jolie", departement_code='78', is_virtual=False, longitude="2.713513", latitude="48.985968", siret="50763357600078") venue92 = create_venue(offerer75, name='2G – Théâtre de Gennevilliers', city="Gennevilliers", departement_code='92', is_virtual=False, longitude="2.2985554", latitude="48.9143444", siret="50763357600092") concert_event = create_product_with_event_type('Concert de Gael Faye') concert_offer75 = create_offer_with_event_product(venue75, concert_event) concert_offer78 = create_offer_with_event_product(venue78, concert_event) concert_offer77 = create_offer_with_event_product(venue77, concert_event) concert_offer92 = create_offer_with_event_product(venue92, concert_event) concert_event_occurrence75 = create_event_occurrence(concert_offer75) concert_stock75 = create_stock_from_event_occurrence( concert_event_occurrence75) concert_event_occurrence77 = create_event_occurrence(concert_offer77) concert_stock77 = create_stock_from_event_occurrence( concert_event_occurrence77) concert_event_occurrence78 = create_event_occurrence(concert_offer78) concert_stock78 = create_stock_from_event_occurrence( concert_event_occurrence78) concert_event_occurrence92 = create_event_occurrence(concert_offer92) concert_stock92 = create_stock_from_event_occurrence( concert_event_occurrence92) PcObject.save(concert_stock75, concert_stock77, concert_stock78, concert_stock92) # When # User in Mantes-la-jolie offers = get_offers_for_recommendations_search(max_distance=1, longitude=2.713513, latitude=48.985968) # Then assert concert_offer75 not in offers assert concert_offer77 not in offers assert concert_offer78 in offers assert concert_offer92 not in offers