def test_places_nearby(self): with write() as session: session.add(PlaceCategory(name="test")) session.flush() session.add( Place(name="test", place_category_id=1, google_place_id="test", coordinates=make_point(LOCATION2["lat"], LOCATION2["lng"]))) session.flush() session.add(PlaceActivity(place_id=1, activity_id=1)) self.start() # should return the place res = get("/app/activity/places", dict(lat=LOCATION["lat"], lng=LOCATION["lng"], radius=200), self.token) self.assertEqual(res.status_code, 200) data = res.get_json()["results"] self.assertEqual(len(data), 1) data = data[0] self.assertEqual(data["name"], "test") self.assertEqual(data["id"], 1) # too far res = get("/app/activity/places", dict(lat=LOCATION["lat"], lng=LOCATION["lng"], radius=100), self.token) self.assertEqual(res.status_code, 200) data = res.get_json()["results"] self.assertEqual(len(data), 0)
def test_pagination(self): for i in range(25): post("/app/chat/messages", dict(recipient_user_id=self.user_id_2, data=dict(text="test_{}".format(i))), self.token) res = get('/app/chat/messages', dict(thread_id=1), self.token_2) self.assertEqual(res.status_code, 200) data = res.get_json() messages = data.get("messages") cursor = data.get("cursor") self.assertEqual(len(messages), 20) self.assertIsNotNone(cursor) res = get("/app/chat/messages", dict(thread_id=1, cursor=cursor), self.token_2) data = res.get_json() messages_2 = data.get("messages") cursor = data.get("cursor") self.assertEqual(len(messages_2), 5) self.assertIsNotNone(cursor) messages.extend(messages_2) texts = set(x["text"] for x in messages) self.assertSetEqual(texts, set("test_{}".format(i) for i in range(25))) res = get("/app/chat/messages", dict(thread_id=1, cursor=cursor), self.token_2) data = res.get_json() self.assertFalse(data.get("messages")) self.assertEqual(cursor, data.get("cursor"))
def test_accept_and_get(self): self.start() res = get("/app/meetups", token=self.token_2) self.assertEqual(res.status_code, 200) data = res.get_json()["results"] self.assertEqual(len(data), 1) res = get("/app/meetups", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json()["results"] self.assertEqual(len(data), 1) meetup_data = data[0] self.assertEqual(meetup_data["partner_user_id"], 2) res = get("/app/meetups/1", token=self.token) self.assertEqual(res.status_code, 200) self.assertDictEqual(meetup_data, res.get_json()) res = get("/app/meetups/1/status", token=self.token) data = res.get_json() self.assertFalse(data["cancelled"]) self.assertFalse(data["concluded"]) self.assertFalse(data["arrived"]) self.assertDictEqual(data["location"], LOCATION) res = get("/app/meetups/1/partner/status", token=self.token) data = res.get_json() self.assertFalse(data["cancelled"]) self.assertFalse(data["concluded"]) self.assertFalse(data["arrived"]) self.assertDictEqual(data["location"], LOCATION2)
def test_rate(self): self.start() # try rating without arriving res = post("/app/meetups/1/partner/rating", dict(rating_id=1), self.token) self.assertEqual(res.status_code, 400) self.arrive(1) res = post("/app/meetups/1/partner/rating", dict(rating_id=1), self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) res = get("/app/meetups/1", token=self.token) self.assertTrue(res.get_json()["concluded"]) res = get("/app/meetups/1", token=self.token_2) self.assertFalse(res.get_json()["concluded"]) with read() as session: rating = session.query(MeetupUserRating).first() self.assertIsNotNone(rating) self.assertEqual(rating.user_id, self.user_id_2) self.assertEqual(rating.rating_id, 1) self.assertEqual(rating.meetup_id, 1)
def test_get_config_with_invalid_entry_response(self): # Ensures invalid id means 404 error user_id = '889' response = requests.get(BASE_URL + '/config/' + user_id + '/all') res = response.json() self.assertEqual(response.status_code, 404) self.assertEqual(res['message'], 'Invalid Id')
def test_alone(self): self.start(1, 1) res = get("/app/activity/users", params=dict( lat=LOCATION["lat"], lng=LOCATION["lng"], radius=200, activity_id=1), token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertFalse(data)
def test_send_text(self): res = post("/app/chat/messages", dict(recipient_user_id=self.user_id_2, data=dict(text="test")), self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertDictEqual(data, dict( thread_id=1, text="test", id=1, location=None, place_id=None, sender_user_id=1)) # check created in db with read() as session: thread = session.query(Thread).all() self.assertEqual(len(thread), 1) thread = thread[0] self.assertEqual(thread.creator_user_id, self.user_id) self.assertEqual(thread.recipient_user_id, self.user_id_2) messages = session.query(Message).all() self.assertEqual(len(messages), 1) message = messages[0] self.assertEqual(message.text, "test") self.assertEqual(message.sender_user_id, self.user_id) self.assertIsNone(message.coordinates) self.assertIsNone(message.place_id) # check other user's notifications notifs = get_notifications(self.user_id_2) self.assertEqual(len(notifs), 1) notif_data = notifs[0]["data"]["payload"] self.assertDictEqual(data, notif_data) res = get('/app/chat/messages', dict(thread_id=1), self.token_2) self.assertEqual(res.get_json().get("messages")[0], data)
def test_get_config_response(self): # Ensures valid input means 201 user_id = '1' response = requests.get(BASE_URL + '/config/' + user_id + '/all') res = response.json() self.assertEqual(response.status_code, 200) self.assertEqual(res['message'], f"All configuration associated with user {user_id}")
def test_arrive_for_place(self): self.start(True) self.arrive(1) res = get("/app/meetups/1/status", token=self.token) data = res.get_json() self.assertTrue(data["arrived"]) self.assertDictEqual(data["location"], PLACE_LOCATION)
def test_start_and_get(self): res = self.start() self.assertEqual(res.status_code, 200) res = get("/app/activity", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertTrue(data.get("active")) self.assertEqual(data.get("activity_id"), 1) self.assertDictEqual(data.get("location"), LOCATION)
def test_get_single_config_response(self): # Ensures valid input means 200 user_id = '1' api_name = 'email-microapi' response = requests.get(BASE_URL + '/config/' + user_id + '/' + api_name) res = response.json() self.assertEqual(response.status_code, 200) self.assertEqual(res['message'], f"Config for {api_name}")
def test_stop_and_resume_localization(self): self.start() res = delete("/app/activity/location", token=self.token) self.assertEqual(res.status_code, 200) self.assertFalse(res.get_json().get("active")) res = get("/app/activity", token=self.token) self.assertFalse(res.get_json().get("active")) res = put("/app/activity/location", data=dict(location=LOCATION2), token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertTrue(data.get("active")) self.assertDictEqual(data.get("location"), LOCATION2) data = get("/app/activity", token=self.token).get_json() self.assertTrue(data.get("active")) self.assertDictEqual(data.get("location"), LOCATION2)
def test_skip(self): self.start() # try noshow without arriving res = post("/app/meetups/1/partner/skip", dict(rating_id=1), self.token) self.assertEqual(res.status_code, 400) self.arrive(1) res = post("/app/meetups/1/partner/skip", dict(rating_id=1), self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) res = get("/app/meetups/1", token=self.token) self.assertTrue(res.get_json()["concluded"]) res = get("/app/meetups/1", token=self.token_2) self.assertFalse(res.get_json()["concluded"])
def test_rolback_config_response(self): # Ensures valid input means 200 user_id = '1' api_name = 'email-microapi' response = requests.get(BASE_URL + '/config/rollback/' + user_id + '/' + api_name) res = response.json() self.assertEqual(response.status_code, 200) self.assertEqual(res['message'], "Config rollback Success")
def test_get_single_config_with_invalid_entry_response(self): # Ensures invalid id means 404 error user_id = '889' api_name = 'gad' response = requests.get(BASE_URL + '/config/' + user_id + '/' + api_name) print(response) res = response.json() self.assertEqual(response.status_code, 404) self.assertEqual(res['message'], f'Config for {api_name} not found')
def test_rollback_config_with_invalid_entry_response(self): # Ensures invalid id means 404 error user_id = '889' api_name = 'gad' response = requests.get(BASE_URL + '/config/rollback/' + user_id + '/' + api_name) res = response.json() self.assertEqual(response.status_code, 404) self.assertEqual(res['message'], "No configuration found for {} API".format(api_name))
def test_update_location(self): self.start() res = put("/app/activity/location", data=dict(location=LOCATION2), token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertDictEqual(data.get("location"), LOCATION2) data = get("/app/activity", token=self.token).get_json() self.assertDictEqual(data.get("location"), LOCATION2)
def test_rolback_no_default_config_response(self): # Ensures no default config input means 400 user_id = str(TEST_INSTANCE_NUMBER) api_name = 'email-microapi' response = requests.get(BASE_URL + '/config/rollback/' + user_id + '/' + api_name) res = response.json() self.assertEqual(response.status_code, 400) self.assertEqual(res['message'], "No previous or default config to rollback")
def test_activity_list(self): res = get("/app/activities", token=self.token) self.assertEqual(res.status_code, 200) self.assertListEqual(res.get_json(), [ dict( id=1, name="test", icon_url="https://static.magellan-app.io/activities/test.svg"), dict( id=2, name="test2", icon_url="https://static.magellan-app.io/activities/test2.svg") ])
def test_place_interests(self): with write() as session: session.add(PlaceCategory(name="test")) session.flush() session.add( Place(name="test", google_place_id="test", place_category_id=1)) self.start(1, 1) self.start(2, 1) # notify interest res = post("/app/activity/places/1/interests", dict(), self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) # self should not return results res = get("/app/activity/places/1/interests", dict(), self.token) self.assertEqual(res.status_code, 200) self.assertEqual(len(res.get_json()["results"]), 0) # for other should return 1 result res = get("/app/activity/places/1/interests", dict(), self.token_2) self.assertEqual(res.status_code, 200) results = res.get_json()["results"] self.assertEqual(len(results), 1) # results should be the user status status = get("/app/activity/users/1", dict(), self.token_2).get_json() self.assertDictEqual(results[0], status) # remove interest res = delete("/app/activity/places/1/interests", dict(), self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) # should no longer appear for other res = get("/app/activity/places/1/interests", dict(), self.token_2) self.assertEqual(res.status_code, 200) self.assertEqual(len(res.get_json()["results"]), 0)
def test_arrive(self): self.start() # first test updating location to same location does not trigger arrival res = put("/app/meetups/1/location", dict(location=LOCATION), self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) res = get("/app/meetups/1/status", token=self.token) data = res.get_json() self.assertFalse(data["arrived"]) self.arrive(1) res = get("/app/meetups/1/status", token=self.token) data = res.get_json() self.assertTrue(data["arrived"]) self.assertDictEqual(data["location"], PLACE_LOCATION) res = get("/app/meetups/1/partner/status", token=self.token_2) data = res.get_json() self.assertTrue(data["arrived"]) self.assertDictEqual(data["location"], PLACE_LOCATION) # check notifications notifs_1 = get_notifications(1) self.assertEqual(len(notifs_1), 2) notif_1 = notifs_1[1]["data"] self.assertEqual(notif_1["notification_type"], "SELF_IS_CLOSE") self.assertEqual(notif_1["payload"]["meetup_id"], 1) notifs_2 = get_notifications(2) self.assertEqual(len(notifs_2), 2) notif_2 = notifs_2[1]["data"] self.assertEqual(notif_2["notification_type"], "PARTNER_IS_CLOSE") self.assertEqual(notif_2["payload"]["meetup_id"], 1)
def test_same_activity(self): self.start(1, 1) self.start(2, 1) res = get("/app/activity/users", params=dict( lat=LOCATION["lat"], lng=LOCATION["lng"], radius=200, activity_id=1), token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertEqual(len(data), 1) status = data[0] self.assertDictContainsSubset(dict( user_id=2, location=dict(lat=LOCATION2["lat"], lng=LOCATION2["lng"]), active=True ), status) self.assertGreater(status.get("time_left_s"), 2300) self.assertIsNotNone(status.get("timer_start")) self.assertIsNotNone(status.get("profile_thumbnail_url"))
def test_cancel(self): self.start() res = post("/app/meetups/1/cancel", token=self.token) self.assertEqual(res.status_code, 200) self.assertTrue(res.get_json()["success"]) # check user was notified notifications = get_notifications(2) self.assertEqual(len(notifications), 2) # first is message data = notifications[1]["data"] self.assertEqual(data["notification_type"], "MEETUP_CANCEL") self.assertEqual(data["payload"]["meetup_id"], 1) # check meetup is over res = get("/app/meetups/1", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertTrue(data["cancelled"]) self.assertTrue(data["concluded"])
def test_wrong_activity(self): with write() as session: session.add(PlaceCategory(name="test")) session.flush() session.add( Place(name="test", place_category_id=1, google_place_id="test", coordinates=make_point(LOCATION2["lat"], LOCATION2["lng"]))) session.flush() session.add(PlaceActivity(place_id=1, activity_id=1)) self.start(2) res = get("/app/activity/places", dict(lat=LOCATION["lat"], lng=LOCATION["lng"], radius=200), self.token) self.assertEqual(res.status_code, 200) data = res.get_json()["results"] self.assertEqual(len(data), 0)
def test_block_then_query(self): post("/app/profiles/2/block", token=self.token) res = get("/app/profiles/1", token=self.token_2) self.assertEqual(res.status_code, 403) error_code = res.get_json()["error_code"] self.assertEqual(error_code, "BLOCKED")
def test_inactive(self): res = get("/app/activity", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertFalse(data.get("active"))
def get_search_results(self): res = get("/app/activity/users", params=dict( lat=LOCATION["lat"], lng=LOCATION["lng"], radius=200, activity_id=1), token=self.token) return res.get_json()
def test_get_other_profile(self): res = get("/app/profiles/2", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertEqual(data.get("name"), NAME_2) self.assertEqual(data.get("gender_id"), GENDER_ID_2)
def test_get_after_update(self): data = dict(name=NAME, status=STATUS, interests=INTERESTS, age=AGE, gender_id=GENDER_ID, filters=dict(gender_filter=[1])) res = put("/app/profiles", data=data, token=self.token).get_json() res2 = get("/app/profiles", token=self.token).get_json() self.assertDictEqual(res, res2)
def test_interests(self): res = get("/app/interests", token=self.token) self.assertEqual(res.status_code, 200) data = res.get_json() self.assertEqual(len(data), 2)