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'
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
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']
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()
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]
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
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
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
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
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()
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
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
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
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)
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]
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
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]
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
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
def test_10_recommend_offers(): user = req_with_auth().post(API_URL + '/me')