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

This commit is contained in:
Disco DeDisco
2026-03-04 13:40:19 -05:00
parent fd59b02c3a
commit a218391ea5
3 changed files with 31 additions and 2 deletions

View File

@@ -5,6 +5,14 @@ from apps.lyric.models import User
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:
model = Item
fields = ["id", "text"]

View File

@@ -24,7 +24,6 @@ class ListDetailAPITest(BaseAPITest):
self.assertEqual(len(response.data["items"]), 2)
class ListItemsAPITest(BaseAPITest):
def test_can_add_item_to_list(self):
list_ = List.objects.create(owner=self.user)
@@ -37,6 +36,28 @@ class ListItemsAPITest(BaseAPITest):
self.assertEqual(Item.objects.count(), 1)
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):
def test_get_returns_only_users_lists(self):
list1 = List.objects.create(owner=self.user)

View File

@@ -16,7 +16,7 @@ class ListDetailAPI(APIView):
class ListItemsAPI(APIView):
def post(self, request, 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():
serializer.save(list=list_)
return Response(serializer.data, status=201)