100 percent test coverage achieved, patching a critical api bug in api.serializers and .views
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -5,6 +5,14 @@ from apps.lyric.models import User
|
|||||||
|
|
||||||
|
|
||||||
class ItemSerializer(serializers.ModelSerializer):
|
class ItemSerializer(serializers.ModelSerializer):
|
||||||
|
text = serializers.CharField()
|
||||||
|
|
||||||
|
def validate_text(self, value):
|
||||||
|
list_ = self.context["list"]
|
||||||
|
if list_.item_set.filter(text=value).exists():
|
||||||
|
raise serializers.ValidationError("duplicate")
|
||||||
|
return value
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Item
|
model = Item
|
||||||
fields = ["id", "text"]
|
fields = ["id", "text"]
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ class ListDetailAPITest(BaseAPITest):
|
|||||||
self.assertEqual(len(response.data["items"]), 2)
|
self.assertEqual(len(response.data["items"]), 2)
|
||||||
|
|
||||||
class ListItemsAPITest(BaseAPITest):
|
class ListItemsAPITest(BaseAPITest):
|
||||||
|
|
||||||
def test_can_add_item_to_list(self):
|
def test_can_add_item_to_list(self):
|
||||||
list_ = List.objects.create(owner=self.user)
|
list_ = List.objects.create(owner=self.user)
|
||||||
|
|
||||||
@@ -37,6 +36,28 @@ class ListItemsAPITest(BaseAPITest):
|
|||||||
self.assertEqual(Item.objects.count(), 1)
|
self.assertEqual(Item.objects.count(), 1)
|
||||||
self.assertEqual(Item.objects.first().text, "a new item")
|
self.assertEqual(Item.objects.first().text, "a new item")
|
||||||
|
|
||||||
|
def test_cannot_add_empty_item_to_list(self):
|
||||||
|
list_ = List.objects.create(owner=self.user)
|
||||||
|
|
||||||
|
response = self.client.post(
|
||||||
|
f"/api/lists/{list_.id}/items/",
|
||||||
|
{"text": ""},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 400)
|
||||||
|
self.assertEqual(Item.objects.count(), 0)
|
||||||
|
|
||||||
|
def test_cannot_add_duplicate_item_to_list(self):
|
||||||
|
list_ = List.objects.create(owner=self.user)
|
||||||
|
Item.objects.create(text="list item", list=list_)
|
||||||
|
duplicate_response = self.client.post(
|
||||||
|
f"/api/lists/{list_.id}/items/",
|
||||||
|
{"text": "list item"},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(duplicate_response.status_code, 400)
|
||||||
|
self.assertEqual(Item.objects.count(), 1)
|
||||||
|
|
||||||
class ListsAPITest(BaseAPITest):
|
class ListsAPITest(BaseAPITest):
|
||||||
def test_get_returns_only_users_lists(self):
|
def test_get_returns_only_users_lists(self):
|
||||||
list1 = List.objects.create(owner=self.user)
|
list1 = List.objects.create(owner=self.user)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class ListDetailAPI(APIView):
|
|||||||
class ListItemsAPI(APIView):
|
class ListItemsAPI(APIView):
|
||||||
def post(self, request, list_id):
|
def post(self, request, list_id):
|
||||||
list_ = get_object_or_404(List, id=list_id)
|
list_ = get_object_or_404(List, id=list_id)
|
||||||
serializer = ItemSerializer(data=request.data)
|
serializer = ItemSerializer(data=request.data, context={"list": list_})
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
serializer.save(list=list_)
|
serializer.save(list=list_)
|
||||||
return Response(serializer.data, status=201)
|
return Response(serializer.data, status=201)
|
||||||
|
|||||||
Reference in New Issue
Block a user