def post(self): try: ids = request.get_json()['articleIds'] except Exception: ids = None if ids is None or not ids: return {'message': 'No articleIds have been provided.'}, 422 pipeline = [{ '$group': { '_id': '$article_id', 'rating': { '$sum': 1 } } }, { '$project': { '_id': 0, 'articleId': '$_id', 'rating': 1, } }, { '$sort': { 'articleId': 1 } }] rating = Rating.objects(article_id__in=ids).aggregate(pipeline) return list(rating), 200
def test_create_rating(self): user_id = self.token_subject article_id = 1 Rating(user_id=user_id, article_id=article_id).save() self.assertIsNotNone( Rating.objects.get(user_id=user_id, article_id=article_id))
def test_create_rating(self): user_id = '854c9a9b-4a4a-410f-867c-9985c17878d8' article_id = 1 rating = Rating(user_id=user_id, article_id=article_id) self.assertEqual(str(rating.user_id), user_id) self.assertEqual(rating.article_id, article_id)
def test_get_user_article_rating(self): with patch('src.middleware.get_jwk.get_jwk') as get_jwk: get_jwk.return_value = json.dumps(self.jwk) token = 'Bearer {}'.format(self.token) article_id = 1 user_id = self.token_subject other_user_id = '83998496-2638-436e-9dc0-c04b5de5a2ce' Rating(user_id=user_id, article_id=article_id).save() Rating(user_id=other_user_id, article_id=article_id).save() request = self.app.get('/ratings/{}/user'.format(article_id), headers={'Authorization': token}) self.assertEqual(json.dumps({'rating': 1}), json.dumps(request.json)) self.assertEqual(200, request.status_code)
def test_get_rating(self): article_id = 1 user_id = self.token_subject Rating(user_id=user_id, article_id=article_id).save() request = self.app.get('/ratings/{}'.format(article_id)) self.assertEqual(json.dumps({'rating': 1}), json.dumps(request.json)) self.assertEqual(200, request.status_code)
def test_get_article_ratings_by_ids(self): with patch('src.middleware.get_jwk.get_jwk') as get_jwk: get_jwk.return_value = json.dumps(self.jwk) user_id = self.token_subject other_user_id = '83998496-2638-436e-9dc0-c04b5de5a2ce' Rating(user_id=user_id, article_id=1).save() Rating(user_id=other_user_id, article_id=1).save() Rating(user_id=user_id, article_id=2).save() Rating(user_id=other_user_id, article_id=3).save() Rating(user_id=other_user_id, article_id=4).save() payload = json.dumps({'articleIds': [1, 2]}) request = self.app.post( '/ratings/users', headers=self.headers, data=payload) self.assertDictEqual( {'rating': 2, 'articleId': 1}, request.json[0]) self.assertDictEqual( {'rating': 1, 'articleId': 2}, request.json[1]) self.assertEqual(200, request.status_code)
def post(self): user_id = g.current_user_id try: article_id = request.get_json()['articleId'] except Exception: article_id = None try: RatingSchema().load({'articleId': article_id}) except ValidationError as e: return e.messages, 422 count = Rating.objects(user_id=user_id, article_id=article_id).count() if count == 50: return { 'message': 'You have given this article the maximum rating possible' }, 403 Rating(user_id=user_id, article_id=article_id).save() return {'rated': True}, 201
def get(self, id): user_id = g.current_user_id rating = Rating.objects(user_id=user_id, article_id=id).count() return {'rating': int(rating)}, 200
def get(self, id): rating = Rating.objects(article_id=id).count() return {'rating': int(rating)}, 200