aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorGravatar Matteo Bertucci <[email protected]>2021-02-24 12:08:11 +0100
committerGravatar Matteo Bertucci <[email protected]>2021-02-24 12:08:11 +0100
commit96c659fce17a5aca17fb913cf587765bac90481f (patch)
tree5f0353c7acf5ffde88f955082e20e03efb600514 /backend
parentSupport code unit testing through snekbox (diff)
Hook up unittesting in the submit protocol
Diffstat (limited to 'backend')
-rw-r--r--backend/routes/forms/submit.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/backend/routes/forms/submit.py b/backend/routes/forms/submit.py
index d8e6d35..85a4226 100644
--- a/backend/routes/forms/submit.py
+++ b/backend/routes/forms/submit.py
@@ -18,6 +18,7 @@ from starlette.responses import JSONResponse
from backend.constants import FRONTEND_URL, FormFeatures, HCAPTCHA_API_SECRET
from backend.models import Form, FormResponse
from backend.route import Route
+from backend.routes.forms.unittesting import execute_unittest
from backend.validation import AuthorizationHeaders, ErrorMessage, api
HCAPTCHA_VERIFY_URL = "https://hcaptcha.com/siteverify"
@@ -127,6 +128,19 @@ class SubmitForm(Route):
except ValidationError as e:
return JSONResponse(e.errors(), status_code=422)
+ has_unittests = any("unittests" in question.data for question in form.questions)
+ if has_unittests:
+ unittest_results = await execute_unittest(response_obj, form)
+
+ was_successful = all(test.passed for test in unittest_results)
+ if not was_successful:
+ status_code = 500 if any(test.return_code == 99 for test in unittest_results) else 200
+
+ return JSONResponse({
+ "error": "failed_tests",
+ "test_results": [test._asdict() for test in unittest_results if not test.passed]
+ }, status_code=status_code)
+
await request.state.db.responses.insert_one(
response_obj.dict(by_alias=True)
)