From 1ad47cb20bb206cc181b6b135d3fa40a974c6d45 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 20 May 2025 16:28:58 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=BA=20Validate=20files=20in=20PinDTO?= =?UTF-8?q?=20+=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/dto/pin.py | 19 ++++++++++++++++--- tests/test_pins.py | 15 +++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/dto/pin.py b/app/dto/pin.py index 0afd24f..ba129d6 100644 --- a/app/dto/pin.py +++ b/app/dto/pin.py @@ -1,11 +1,24 @@ -from pydantic import BaseModel +from pydantic import BaseModel, Field, field_validator +from typing import List +from bson import ObjectId +import bson class PinDTO(BaseModel): title: str description: str location: list - files: list - user_id: str + files: List[str] = Field(default_factory=list) + user_id: str = None + + @field_validator('files') + @classmethod + def validate_files(cls, files): + for file_id in files: + try: + ObjectId(file_id) + except bson.errors.InvalidId: + raise ValueError(f"Invalid image ID format: {file_id}") + return files class PinShareDTO(BaseModel): friend_id: str \ No newline at end of file diff --git a/tests/test_pins.py b/tests/test_pins.py index 2d8d5ca..2d9c94a 100644 --- a/tests/test_pins.py +++ b/tests/test_pins.py @@ -41,6 +41,21 @@ def test_add_pin(token, user_id): pin_id = create_test_pin(token, user_id, image_id) assert pin_id is not None +def test_add_pin_invalid_files_format(token, user_id): + response = client.post( + "/pin/add", + json={ + "title": "Test Pin", + "description": "Test Description", + "location": [0,0], + "files": ["abc"], + "user_id": user_id + }, + headers={"Authorization": f"Bearer {token}"} + ) + assert response.status_code == 422 + assert "Invalid image ID format" in response.json()["detail"][0]["msg"] + def test_list_pins(token): response = client.get("/pins", headers={"Authorization": f"Bearer {token}"}) assert response.status_code == 200