diff options
author | 2021-02-24 12:08:11 +0100 | |
---|---|---|
committer | 2021-02-24 12:08:11 +0100 | |
commit | 96c659fce17a5aca17fb913cf587765bac90481f (patch) | |
tree | 5f0353c7acf5ffde88f955082e20e03efb600514 | |
parent | Support code unit testing through snekbox (diff) |
Hook up unittesting in the submit protocol
-rw-r--r-- | backend/routes/forms/submit.py | 14 |
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) ) |