def test_12_edit_venue_provider():
    r_edit = req_with_auth().patch(API_URL + '/venueProviders/AE',
                                   json={'venueIdAtOfferProvider': '12345678'})
    assert r_edit.status_code == 200
    r_check = req_with_auth().get(API_URL + '/venueProviders/AE')
    assert r_check.status_code == 200
    assert r_check.json()['venueIdAtOfferProvider'] == '12345678'
示例#2
0
def test_11_modify_offer():
    r_before = req_with_auth().get(API_URL + '/offers/EY')
    assert r_before.status_code == 200
    r_mod = req_with_auth().patch(API_URL + '/offers/EY', json={'price': 1234})
    assert r_mod.status_code == 200
    r_after = req_with_auth().get(API_URL + '/offers/EY')
    assert r_after.status_code == 200
    assert r_after.json()['price'] == 1234
示例#3
0
def test_18_patch_recommendations_should_return_is_clicked_true():
    r = req_with_auth().put(RECOMMENDATION_URL, json={})
    assert r.status_code == 200
    recos = r.json()
    recoId = recos[0]['id']
    r_update = req_with_auth().patch(API_URL + '/recommendations/' + recoId,
                                     json={'isClicked': True})
    assert r_update.status_code == 200
    assert r_update.json()['isClicked']
示例#4
0
def test_12_modify_venue_bad_siret():
    r_mod = req_with_auth().patch(API_URL + '/venues/AE',
                                  json={'siret': '999'})
    assert r_mod.status_code == 400
    assert 'siret' in r_mod.json()
    r_mod = req_with_auth().patch(API_URL + '/venues/AE',
                                  json={'siret': '12345678901234'})
    assert r_mod.status_code == 400
    assert 'siret' in r_mod.json()
示例#5
0
def test_11_modify_venue():
    r_before = req_with_auth().get(API_URL + '/venues/AE')
    assert r_before.status_code == 200
    r_mod = req_with_auth().patch(API_URL + '/venues/AE',
                                  json={'name': 'Ma librairie'})
    print("ERROR", r_mod.json())
    assert r_mod.status_code == 200
    r_after = req_with_auth().get(API_URL + '/venues/AE')
    assert r_after.status_code == 200
    assert r_after.json()['name'] == 'Ma librairie'
def test_10_create_booking():
    booking_json = {
        'offerId': humanize(3),
        'recommendationId': humanize(1)
    }
    r_create = req_with_auth('*****@*****.**').post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 201
    id = r_create.json()['id']
    r_check = req_with_auth().get(API_URL + '/bookings/'+id)
    assert r_check.status_code == 200
    created_booking_json = r_check.json()
    for (key, value) in booking_json.items():
        assert created_booking_json[key] == booking_json[key]
示例#7
0
def test_12_create_offer():
    offer_data = {
        'price': 1222,
        'offererId': humanize(3),
        'venueId': humanize(3),
        'thingId': humanize(1)
    }
    r_create = req_with_auth().post(API_URL + '/offers/', json=offer_data)
    assert r_create.status_code == 201
    id = r_create.json()['id']
    r_check = req_with_auth().get(API_URL + '/offers/' + id)
    assert r_check.status_code == 200
    created_offer_data = r_check.json()
    for (key, value) in offer_data.items():
        assert created_offer_data[key] == offer_data[key]
def test_14_create_booking_should_work_if_user_can_book():
    booking_json = {
        'offerId': humanize(3),
        'recommendationId': humanize(1)
    }
    r_create = req_with_auth('*****@*****.**').post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 201
示例#9
0
def test_save_property_set_value_if_property_and_user_property_exist(app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)
    question = Question()
    question.question_name = 'question_1'
    obj_to_save.append(question)
    BaseObject.check_and_save(*obj_to_save)

    user_property_obj = UserProperty()
    user_property_obj.user_id = user.id
    user_property_obj.question_id = question.id
    user_property_obj.value = float(12)
    BaseObject.check_and_save(user_property_obj)

    data = dict()
    data['question_1'] = "0.5"

    # When
    property_request = req_with_auth(email='*****@*****.**', password='******') \
        .post(API_URL + '/property', json=data)

    # Then
    assert property_request.status_code == 200

    user_property_obj = UserProperty.query. \
        filter_by(user_id=user.id). \
        filter_by(question_id=question.id). \
        first()

    assert user_property_obj is not None
    assert user_property_obj.value == 0.5
示例#10
0
def test_get_property_should_return_value_for_property_if_already_answered(
        app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)
    question = Question()
    question.question_name = 'question_1'
    obj_to_save.append(question)
    BaseObject.check_and_save(*obj_to_save)
    user_property_obj = UserProperty()
    user_property_obj.user_id = user.id
    user_property_obj.question_id = question.id
    user_property_obj.value = float(0.5)
    BaseObject.check_and_save(user_property_obj)

    # When
    property_request = req_with_auth(email='*****@*****.**', password='******') \
        .get(API_URL + '/property')

    # Then
    assert property_request.status_code == 200
    content = property_request.json()
    assert 'question_1' in content
    assert content['question_1'] == 0.5
示例#11
0
def test_17_put_recommendations_should_return_more_recos():
    r = req_with_auth().put(RECOMMENDATION_URL, json={})
    assert r.status_code == 200
    recos = r.json()
    # ensure we still have no duplicates
    ids = list(map(lambda reco: reco['id'], recos))
    assert len(list(filter(lambda v: v > 1, Counter(ids).values()))) == 0
示例#12
0
def test_14_update_offer_available_should_check_bookings():
    with app.app_context():
        import models
        offer = app.model.Offer()
        offer.venueId = 1
        offer.offererId = 1
        offer.thingId = 1
        offer.price = 0
        offer.available = 1
        offer.bookingLimitDatetime = datetime.utcnow() + timedelta(minutes=2)
        app.model.PcObject.check_and_save(offer)

        offerId = offer.id

        booking = app.model.Booking()
        booking.offerId = offerId
        booking.recommendationId = 1
        booking.token = random_token()
        booking.userId = 1
        app.model.PcObject.check_and_save(booking)

    r_update = req_with_auth().patch(API_URL + '/offers/' + humanize(offerId),
                                     json={'available': 0})
    assert r_update.status_code == 400
    assert 'available' in r_update.json()
示例#13
0
def test_get_propositions_should_return_highest_probability_reco_first(app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)

    recommendation_1 = create_recommendation(title='Prends ton vélo')
    recommendation_2 = create_recommendation(title='Prends ta trottinette')
    obj_to_save.append(recommendation_1)
    obj_to_save.append(recommendation_2)

    BaseObject.check_and_save(*obj_to_save)

    # When
    proposition_request = req_with_auth(email='*****@*****.**', password='******') \
        .get(API_URL + '/propositions')

    # Then
    assert proposition_request.status_code == 200
    content = proposition_request.json()
    assert len(content.get('propositions')) == 2
    reco_1_probability = content.get('propositions')[0].get('probability')
    reco_2_probability = content.get('propositions')[1].get('probability')
    assert reco_1_probability >= reco_2_probability
示例#14
0
def test_16_once_marked_as_read_tutos_should_not_come_back():
    r = req_with_auth().put(RECOMMENDATION_URL, json={})
    assert r.status_code == 200
    recos_before = r.json()
    assert recos_before[0]['mediation']['tutoIndex'] == 0
    assert recos_before[1]['mediation']['tutoIndex'] == 1
    r_update = req_with_auth().patch(API_URL + '/recommendations/' + recos_before[0]['id'],
                                     json={'dateRead': datetime.now().strftime('%Y-%m-%dT%H:%M:%S')})
    assert r_update.status_code == 200

    r = req_with_auth().put(RECOMMENDATION_URL, json={})
    assert r.status_code == 200
    recos_after = r.json()
    assert recos_after[0]['mediation']['tutoIndex'] == 1
    assert 'mediation' not in recos_after[1]\
           or recos_after[1]['mediation']['tutoIndex'] is None
示例#15
0
def test_14_get_profile_should_return_the_users_profile_without_password_hash():
    r = req_with_auth().get(API_URL + '/users/me')
    assert r.status_code == 200
    user = r.json()
    assert user['email'] == '*****@*****.**'
    assert user['publicName'] == 'Utilisateur test admin'
    assert 'password' not in user
def test_15_create_booking_should_not_work_if_user_can_not_book():
    # with default admin user
    booking_json = {
        'offerId': humanize(3),
        'recommendationId': humanize(1)
    }
    r_create = req_with_auth().post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 400
示例#17
0
def test_13_create_venue():
    venue_data = {
        'name': 'Ma venue',
        'siret': '30255917810045',
        'address': '75 Rue Charles Fourier, 75013 Paris',
        'postalCode': '75200',
        'city': 'Paris',
        'managingOffererId': 'AE',
        'latitude': 48.82387,
        'longitude': 2.35284
    }
    r_create = req_with_auth().post(API_URL + '/venues/', json=venue_data)
    assert r_create.status_code == 201
    id = r_create.json()['id']
    r_check = req_with_auth().get(API_URL + '/venues/' + id)
    assert r_check.status_code == 200
    created_venue_data = r_check.json()
    for (key, value) in venue_data.items():
        assert created_venue_data[key] == venue_data[key]
def test_10_create_mediation():
    with open(
            Path(path.dirname(path.realpath(__file__))) / '..' / 'mock' /
            'thumbs' / 'mediations' / '1', 'rb') as thumb_file:
        data = {
            'eventId': 'AE',
            'offererId': 'AE',
        }
        files = {'thumb': ('1.jpg', thumb_file)}
        r_create = req_with_auth().post(API_URL + '/mediations',
                                        data=data,
                                        files=files)
        assert r_create.status_code == 201
def test_11_create_venue_provider():
    with app.app_context():
        openagenda_provider = app.model.Provider.getByClassName('OpenAgendaEvents')
    vp_data = {'providerId': humanize(openagenda_provider.id),
               'venueId': 'AE',
               'venueIdAtOfferProvider': '49050769'}
    r_create = req_with_auth().post(API_URL + '/venueProviders',
                                    json=vp_data)
    assert r_create.status_code == 201
    create_json = r_create.json()
    assert 'id' in create_json
    vp_id = create_json['id']
    assert create_json['lastSyncDate'] is None
    read_json = create_json
    tries = 0
    while read_json['lastSyncDate'] is None:
        assert tries < 10 
        r_check = req_with_auth().get(API_URL + '/venueProviders/' + vp_id)
        assert r_check.status_code == 200
        read_json = r_check.json()
        tries += 1
        sleep(1)
示例#20
0
def subtest_recos_with_params(params,
                              expected_status=200,
                              expected_mediation_id=None,
                              expected_occasion_type=None,
                              expected_occasion_id=None):
    r = req_with_auth().put(RECOMMENDATION_URL+'?'+params, json={})
    assert r.status_code == expected_status
    if expected_status == 200:
        recos = r.json()
        assert len(recos) <= BLOB_SIZE + (2 if expected_mediation_id is None
                                            else 3)
        assert recos[1]['mediation']['tutoIndex'] is not None
        check_recos(recos)
        return recos
def test_12_create_booking_should_work_before_limit_date():
    with app.app_context():
        import models
        ok_offer = app.model.Offer()
        ok_offer.venueId = 1
        ok_offer.offererId = 1
        ok_offer.thingId = 1
        ok_offer.price = 0
        ok_offer.bookingLimitDatetime = datetime.utcnow() + timedelta(minutes=2)
        app.model.PcObject.check_and_save(ok_offer)

        booking_json = {
            'offerId': humanize(ok_offer.id),
            'recommendationId': humanize(1)
        }

    r_create = req_with_auth('*****@*****.**').post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 201
    id = r_create.json()['id']
    r_check = req_with_auth().get(API_URL + '/bookings/'+id)
    created_booking_json = r_check.json()
    for (key, value) in booking_json.items():
        assert created_booking_json[key] == booking_json[key]
示例#22
0
def subtest_initial_recos():
    r = req_with_auth().put(RECOMMENDATION_URL, json={})
    assert r.status_code == 200
    recos = r.json()
    assert len(recos) == BLOB_SIZE + 2

    assert recos[0]['mediation']['tutoIndex'] == 0
    assert recos[1]['mediation']['tutoIndex'] == 1

    assert len(list(filter(lambda reco: 'mediation' in reco and
                                        reco['mediation']['tutoIndex'] is not None,
                           recos))) == 2


    check_recos(recos)
    return recos
示例#23
0
def test_get_propositions_should_return_empty_array_if_no_reco_in_db(app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)

    BaseObject.check_and_save(*obj_to_save)

    # When
    proposition_request = req_with_auth(email='*****@*****.**', password='******') \
        .get(API_URL + '/propositions')

    # Then
    assert proposition_request.status_code == 200
    content = proposition_request.json()
    assert len(content.get('propositions')) == 0
def test_11_create_booking_should_not_work_past_limit_date():
    with app.app_context():
        import models
        expired_offer = app.model.Offer()
        expired_offer.venueId = 1
        expired_offer.offererId = 1
        expired_offer.thingId = 1
        expired_offer.price = 0
        expired_offer.bookingLimitDatetime = datetime.utcnow() - timedelta(seconds=1)
        app.model.PcObject.check_and_save(expired_offer)

        booking_json = {
            'offerId': humanize(expired_offer.id),
            'recommendationId': humanize(1)
        }

    r_create = req_with_auth('*****@*****.**').post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 400
    assert 'global' in r_create.json()
    assert 'date limite' in r_create.json()['global'][0]
def test_13_create_booking_should_not_work_if_too_many_bookings():
    with app.app_context():
        import models
        too_many_bookings_offer = app.model.Offer()
        too_many_bookings_offer.venueId = 1
        too_many_bookings_offer.offererId = 1
        too_many_bookings_offer.thingId = 1
        too_many_bookings_offer.price = 0
        too_many_bookings_offer.available = 0
        too_many_bookings_offer.bookingLimitDatetime = datetime.utcnow() + timedelta(minutes=2)
        app.model.PcObject.check_and_save(too_many_bookings_offer)

        booking_json = {
            'offerId': humanize(too_many_bookings_offer.id),
            'recommendationId': humanize(1)
        }

    r_create = req_with_auth('*****@*****.**').post(API_URL + '/bookings', json=booking_json)
    assert r_create.status_code == 400
    assert 'global' in r_create.json()
    assert 'quantité disponible' in r_create.json()['global'][0]
示例#26
0
def test_get_property_should_return_false_for_property_is_not_answered_already(
        app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)
    property_obj = Question()
    property_obj.question_name = 'question_1'
    obj_to_save.append(property_obj)
    BaseObject.check_and_save(*obj_to_save)

    # When
    property_request = req_with_auth(email='*****@*****.**', password='******') \
        .get(API_URL + '/property')

    # Then
    assert property_request.status_code == 200
    content = property_request.json()
    assert 'question_1' in content
示例#27
0
def test_get_propositions_should_return_one_reco_if_1_reco_in_db(app):
    # Given
    obj_to_save = []
    user = create_user(email='*****@*****.**',
                       username='******',
                       password='******')
    obj_to_save.append(user)

    recommendation = create_recommendation(title='Prends ton vélo')
    obj_to_save.append(recommendation)

    BaseObject.check_and_save(*obj_to_save)

    # When
    proposition_request = req_with_auth(email='*****@*****.**', password='******') \
        .get(API_URL + '/propositions')

    # Then
    assert proposition_request.status_code == 200
    content = proposition_request.json()
    assert len(content.get('propositions')) == 1
    assert content.get('propositions')[0].get('title') == 'Prends ton vélo'
def test_14_get_venue_providers_by_venue():
    r_list = req_with_auth().get(API_URL + '/venueProviders?venueId=AE')
    assert r_list.status_code == 200
def test_15_get_all_venue_providers():
    r_list = req_with_auth().post(API_URL + '/venueProviders')
    assert r_list.status_code == 400
示例#30
0
def test_10_recommend_offers():
    user = req_with_auth().post(API_URL + '/me')