diff --git a/README.md b/README.md index f44b130..6226ef8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ A simple Flask REST API for managing a todo list. |--------|------|-------------| | GET | `/health` | Service health check | | GET | `/items` | List all items | +| GET | `/items/:id` | Get a single item by ID | | POST | `/items` | Create an item (`{"name": "..."}`) | | PATCH | `/items/:id` | Update an item (`{"done": true}`) | | DELETE | `/items/:id` | Delete an item | diff --git a/app.py b/app.py index a2d2561..49a6f84 100644 --- a/app.py +++ b/app.py @@ -35,6 +35,15 @@ def create_item(): return jsonify(item), 201 +@app.route("/items/", methods=["GET"]) +def get_item(item_id): + items = _get_items() + item = next((i for i in items if i["id"] == item_id), None) + if item is None: + return jsonify(error="item not found"), 404 + return jsonify(item) + + @app.route("/items/", methods=["PATCH"]) def update_item(item_id): items = _get_items() diff --git a/test_app.py b/test_app.py index d5ae8f6..7b1be41 100644 --- a/test_app.py +++ b/test_app.py @@ -25,6 +25,21 @@ def test_list_items_empty(client): assert resp.get_json()["items"] == [] +def test_get_item(client): + client.post("/items", json={"name": "My Task"}) + resp = client.get("/items/1") + assert resp.status_code == 200 + data = resp.get_json() + assert data["name"] == "My Task" + assert data["id"] == 1 + + +def test_get_item_not_found(client): + resp = client.get("/items/999") + assert resp.status_code == 404 + assert resp.get_json()["error"] == "item not found" + + def test_create_item(client): resp = client.post("/items", json={"name": "Write tests"}) assert resp.status_code == 201