Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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