def test_query_recommendation_by_product_id(self): """ Query Recommendations by the product_id """ service.Recommendation(id=0, product_id=PS4, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() service.Recommendation(id=0, product_id=PS4, recommended_product_id=PS5, recommendation_type="up-sell").save() service.Recommendation(id=0, product_id=PS4, recommended_product_id=MONSTER_HUNTER, recommendation_type="cross-sell").save() service.Recommendation(id=0, product_id=PS5, recommended_product_id=MONSTER_HUNTER, recommendation_type="cross-sell").save() resp = self.app.get('/recommendations?product_id=' + str(PS4)) self.assertEqual(resp.status_code, status.HTTP_200_OK) data = json.loads(resp.data) self.assertEqual(len(data), 3) self.assertEqual(data[0]['product_id'], PS4)
def test_query_recommendation_by_product_id_not_found(self): """ Query Recommendations by the product_id that doesn't exist """ service.Recommendation(id=0, product_id=PS4, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() service.Recommendation(id=0, product_id=PS4, recommended_product_id=PS5, recommendation_type="up-sell").save() resp = self.app.get('/recommendations?product_id=' + str(PS5)) self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND)
def test_query_recommendation_by_product_id_bad_request(self): """ Query Recommendations by invalid product_id """ service.Recommendation(id=0, product_id=PS4, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() service.Recommendation(id=0, product_id=PS4, recommended_product_id=PS5, recommendation_type="up-sell").save() resp = self.app.get('/recommendations?product_id=' + 'PS5') self.assertEqual(resp.status_code, 500)
def test_get_recommendation_list(self): """ Get a list of Recommendations """ service.Recommendation(0, product_id=PS4, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() service.Recommendation(0, product_id=PS3, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() resp = self.app.get('/recommendations') self.assertEqual(resp.status_code, status.HTTP_200_OK) data = json.loads(resp.data) self.assertEqual(len(data), 2)
def test_delete_recommendation(self): """Deletes a recommendation""" service.Recommendation(0, 2, 4, "up-sell", 1).save() service.Recommendation(0, 2, 3, "accessory", 2).save() # save the current number of recommendation for later comparison recommendation_count = self.get_recommendation_count() self.assertEqual(recommendation_count, 2) # delete a recommendation resp = self.app.delete('/recommendations/1', content_type='application/json') self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(len(resp.data), 0) new_count = self.get_recommendation_count() self.assertEqual(new_count, recommendation_count - 1)
def test_like_recommendation(self): """ Increase a recommendation """ service.Recommendation(0, 2, 4, "up-sell", 2).save() resp = self.app.put("/recommendations/1/likes", content_type='application/json') data = json.loads(resp.data) self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual(data['likes'], 3)
def test_update_recommendation_with_no_likes_field(self): """ Update a Recommendation with no likes field added""" service.Recommendation(0, 2, 4, "up-sell", 1).save() new_recommendation = { 'id': 0, 'product_id': 2, 'recommended_product_id': 8, 'recommended_type': "up-sell" } data = json.dumps(new_recommendation) resp = self.app.put('/recommendations/1', data=data, content_type='application/json') self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
def test_get_recommendation(self): """ Read a single Recommendation """ service.Recommendation(0, product_id=PS4, recommended_product_id=CONTROLLER, recommendation_type="accessory").save() resp = self.app.get('/recommendations/1') self.assertEqual(resp.status_code, status.HTTP_200_OK) data = json.loads(resp.data) self.assertEqual(data['id'], 1) self.assertEqual(data['product_id'], PS4) self.assertEqual(data['recommended_product_id'], CONTROLLER) self.assertEqual(data['recommendation_type'], "accessory") self.assertEqual(data['likes'], 0)
def test_update_recommendation(self): """ Update a Recommendation """ service.Recommendation(0, 2, 4, "up-sell", 1).save() new_recommendation = { 'id': 0, 'product_id': 2, 'recommended_product_id': 8, 'recommendation_type': "up-sell", 'likes': 1 } data = json.dumps(new_recommendation) resp = self.app.put('/recommendations/1', data=data, content_type='application/json') self.assertEqual(resp.status_code, status.HTTP_200_OK) resp = self.app.get('/recommendations') self.assertEqual(resp.status_code, status.HTTP_200_OK) new_json = json.loads(resp.data) self.assertEqual(new_json[0]['recommended_product_id'], 8)
def test_like_recommendation_not_found(self): """ Increase a recommendation that can't be found""" service.Recommendation(0, 2, 4, "up-sell", 1).save() resp = self.app.put("/recommendations/2/likes", content_type='application/json') self.assertEquals(resp.status_code, status.HTTP_404_NOT_FOUND)