def test_list_movies(self): movie = models.Movie(title='Song of Water and Mud', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) movie.save() movie = models.Movie(title='Song of Ice and Fire', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) movie.save() response = self.client.get('/movies/') self.assertEqual(response.json()['movies'], [ { 'title': 'Song of Ice and Fire', 'year': '2020', 'runtime': '136 min', 'genre': 'Fantasy', 'external_api_response': {} }, { 'title': 'Song of Water and Mud', 'year': '2020', 'runtime': '136 min', 'genre': 'Fantasy', 'external_api_response': {} }, ])
def test_list(self): first_movie = models.Movie(title='Song of Water and Mud', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) first_movie.save() second_movie = models.Movie(title='Song of Ice and Fire', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) second_movie.save() comment = models.Comment(movie=first_movie, text_body='It is my first comment.') comment.save() comment = models.Comment(movie=first_movie, text_body='It is my second comment.') comment.save() comment = models.Comment(movie=second_movie, text_body='It is my third comment.') comment.save() response = self.client.get('/comments/') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.json()['comments']), 3) response = self.client.get('/comments/?movie_pk={}'.format(second_movie.pk)) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.json()['comments']), 1)
def post(cls, request): serializer = serializers.CreateMovieSerializer(data=request.data) if not serializer.is_valid(): return response.Response(status=400) title = serializer.validated_data['title'] body = cls.get_omdb_api_body(title) body = {key.lower(): value for key, value in body.items()} try: movie = models.Movie.objects.get(title=body['title']) status = 200 except models.Movie.DoesNotExist: movie = models.Movie(title=body['title'], year=body['year'], runtime=body['runtime'], genre=body['genre'], external_api_response=body) movie.save() status = 201 return response.Response(status=status, data={ 'movie': movie.to_json(), 'external_api_response': body, })
def test_delete(self): movie = models.Movie(title='Song of Water and Mud', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) movie.save() response = self.client.delete('/movies/{}/'.format(movie.pk)) self.assertEqual(response.status_code, 204)
def test_top(self): first_movie = models.Movie(title='Song of Water and Mud 1', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) first_movie.save() comment = models.Comment(movie=first_movie, text_body='1') comment.save() comment = models.Comment(movie=first_movie, text_body='1') comment.save() second_movie = models.Movie(title='Song of Water and Mud 2', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) second_movie.save() comment = models.Comment(movie=second_movie, text_body='1') comment.save() third_movie = models.Movie(title='Song of Water and Mud 3', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) third_movie.save() comment = models.Comment(movie=third_movie, text_body='1') comment.save() fourth_movie = models.Movie(title='Song of Water and Mud 4', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) fourth_movie.save() now = django.utils.timezone.now() day_ago = now - timedelta(days=1) start = day_ago.timestamp() end = now.timestamp() response = self.client.get('/top/?start={}&end={}'.format(start, end)) self.assertEqual(response.status_code, 200) self.assertListEqual(response.json(), [{'movie_id': first_movie.pk, 'rank': 1, 'total_comments': 2}, {'movie_id': second_movie.pk, 'rank': 2, 'total_comments': 1}, {'movie_id': third_movie.pk, 'rank': 2, 'total_comments': 1}])
def test_create(self): movie = models.Movie(title='Song of Water and Mud', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) movie.save() response = self.client.post('/comments/', data={'movie': movie.pk, 'text_body': 'My first comment ever.'}, content_type='application/json') self.assertEqual(response.status_code, 200)
def test_update(self): movie = models.Movie(title='Song of Water and Mud', year='2020', runtime='136 min', genre='Fantasy', external_api_response={}) movie.save() response = self.client.put('/movies/{}/'.format(movie.pk), data={'title': 'Song of Ice and Mud', 'year': '2021', 'runtime': '133 min', 'genre': 'Science Fiction'}, content_type='application/json') self.assertEqual(response.status_code, 200) movie = models.Movie.objects.get(pk=movie.pk) self.assertEqual(movie.to_json(), {'title': 'Song of Ice and Mud', 'year': '2021', 'runtime': '133 min', 'genre': 'Science Fiction', 'external_api_response': {}})