def get(self, request, *args, **kwargs): pk = kwargs["id"] user = User.objects.get(pk=pk) preferences = CategoryPreference.objects.filter( user=user).order_by("ranking") serializer = CategoryPreferenceSerializer(preferences, many=True) return Response(serializer.data)
def test_UserPreferenceListView_POST_valid(self): response = client.post( "/api/users/" + str(self.user.id) + "/preferences/", data={"category_id": self.italian.id}, ) preference = CategoryPreference.objects.get(user=self.user, category=self.italian) serializer = CategoryPreferenceSerializer(preference) self.assertEqual(preference.ranking, 3) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, serializer.data)
def test_UserPreferenceView_DELETE_valid(self): response = client.delete( "/api/users/" + str(self.user.id) + "/preferences/" + str(self.dessert.id) + "/" ) self.preference2.refresh_from_db() serializer = CategoryPreferenceSerializer(self.user.categorypreferences, many=True) self.assertEqual(self.preference2.ranking, 1) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, serializer.data)
def test_UserPreferenceListView_PATCH_valid(self): response = client.patch( "/api/users/" + str(self.user.id) + "/preferences/", data={"oldRanking": 1, "newRanking": 2}, ) self.preference1.refresh_from_db() self.preference2.refresh_from_db() preferences = CategoryPreference.objects.filter(user=self.user).order_by("ranking") serializer = CategoryPreferenceSerializer(preferences, many=True) self.assertEqual(self.preference1.ranking, 2) self.assertEqual(self.preference2.ranking, 1) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, serializer.data)
def test_UserPreferenceView_PATCH_valid(self): response = client.patch( "/api/users/" + str(self.user.id) + "/preferences/" + str(self.dessert.id) + "/", {"name": "Best"}, ) self.preference1.refresh_from_db() serializer = CategoryPreferenceSerializer(self.preference1) self.assertEqual(self.preference1.name, "Best") self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, serializer.data)
def delete(self, request, *args, **kwargs): user = request.user pk = kwargs["id"] if user.id != int(pk): return Response(status=status.HTTP_401_UNAUTHORIZED) preference, user = self.get_preference(kwargs["id"], kwargs["category_id"]) try: preference.reorder_preferences_delete() preference.delete() serializer = CategoryPreferenceSerializer(user.categorypreferences, many=True) return Response(serializer.data) except: return Response(status=status.HTTP_400_BAD_REQUEST)
def patch(self, request, *args, **kwargs): user = request.user pk = kwargs["id"] if user.id != int(pk): return Response(status=status.HTTP_401_UNAUTHORIZED) name = request.data["name"] preference, user = self.get_preference(kwargs["id"], kwargs["category_id"]) try: preference.name = name preference.save() serializer = CategoryPreferenceSerializer(preference) return Response(serializer.data) except: return Response(status=status.HTTP_400_BAD_REQUEST)
def patch(self, request, *args, **kwargs): user = request.user pk = kwargs["id"] if user.id != int(pk): return Response(status=status.HTTP_401_UNAUTHORIZED) user, old_ranking, new_ranking = ( request.user, request.data["oldRanking"], request.data["newRanking"], ) try: moved_preference = CategoryPreference.objects.filter( user=user, ranking=old_ranking)[0] moved_preference.reorder_preferences(new_ranking) preferences = CategoryPreference.objects.filter( user=user).order_by("ranking") serializer = CategoryPreferenceSerializer(preferences, many=True) return Response(serializer.data) except: return Response(status=status.HTTP_400_BAD_REQUEST)
def post(self, request, *args, **kwargs): user = request.user pk = kwargs["id"] if user.id != int(pk): return Response(status=status.HTTP_401_UNAUTHORIZED) category_id = request.data["category_id"] category = Category.objects.get(pk=category_id) if CategoryPreference.objects.filter(user=user, category=category).exists(): return Response({"error": "Already a preference"}, status=status.HTTP_400_BAD_REQUEST) pref_count = user.categorypreferences.all().count() preference = CategoryPreference.objects.create(user=user, category=category, name=category.label, ranking=(pref_count + 1)) serializer = CategoryPreferenceSerializer(preference) return Response(serializer.data)
def test_UserPreferenceListView_GET(self): response = client.get("/api/users/" + str(self.user.id) + "/preferences/") serializer = CategoryPreferenceSerializer(self.user.categorypreferences, many=True) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data, serializer.data)