from datetime import datetime from fastapi import FastAPI from fastapi.testclient import TestClient from app.api.v1.plugin_callbacks import router def _build_client() -> TestClient: app = FastAPI() app.include_router(router, prefix="/api/v1") return TestClient(app) def test_plugin_callback_rejects_invalid_token(): client = _build_client() response = client.post( "/api/v1/plugin-callbacks/task-result", json={ "execution_id": "exec-invalid-token", "software_id": "creo", "status": "success", "result": {"ok": True}, "finished_at": datetime.now().isoformat(), "token": "wrong-token", }, ) assert response.status_code == 403 assert response.json()["detail"] == "Invalid callback token" def test_plugin_callback_accepts_valid_token_and_dedupes(): client = _build_client() payload = { "execution_id": "exec-valid-token", "software_id": "creo", "status": "success", "result": {"ok": True}, "finished_at": datetime.now().isoformat(), "token": "creo-callback-token", } first = client.post("/api/v1/plugin-callbacks/task-result", json=payload) second = client.post("/api/v1/plugin-callbacks/task-result", json=payload) assert first.status_code == 200 assert first.json()["accepted"] is True assert second.status_code == 200 assert second.json()["accepted"] is False