diff --git a/.github/workflows/pytest_unit.yml b/.github/workflows/pytest_unit.yml index 41dc3766..b3f963a1 100644 --- a/.github/workflows/pytest_unit.yml +++ b/.github/workflows/pytest_unit.yml @@ -18,7 +18,7 @@ jobs: with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.*') }} - restore-keys: | + restore-keys: | ${{ runner.os }}-pip- - name: Install dependencies diff --git a/src/elections/urls.py b/src/elections/urls.py index 9ebe0cd9..62d9a2aa 100644 --- a/src/elections/urls.py +++ b/src/elections/urls.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import JSONResponse +from sqlalchemy.exc import IntegrityError import candidates.crud import database @@ -275,15 +276,25 @@ async def update_election( "/{election_name}", description="Deletes an election from the database. Returns whether the election exists after deletion.", response_model=SuccessResponse, - responses={401: {"description": "Need to be logged in as an admin.", "model": DetailModel}}, + responses={ + 401: {"description": "Need to be logged in as an admin.", "model": DetailModel}, + 409: {"description": "Election is still referenced by nominee applications.", "model": DetailModel}, + }, operation_id="delete_election", dependencies=[Depends(perm_election)], ) async def delete_election(db_session: database.DBSession, election_name: str): slugified_name = slugify(election_name) - await elections.crud.delete_election(db_session, slugified_name) - await db_session.commit() + try: + await elections.crud.delete_election(db_session, slugified_name) + await db_session.commit() + except IntegrityError as err: + await db_session.rollback() + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail=f"{election_name} is still referenced by nominee applications.", + ) from err old_election = await elections.crud.get_election(db_session, slugified_name) return JSONResponse({"success": old_election is None}) diff --git a/tests/wip/test_github.py b/tests/wip/test_github.py index 671aefcb..054ca919 100644 --- a/tests/wip/test_github.py +++ b/tests/wip/test_github.py @@ -4,11 +4,13 @@ # NOTE: must export API key to use github api (mostly...) + @pytest.mark.asyncio async def test__list_users(): member_list = await github.internals.list_members() print(member_list) + @pytest.mark.asyncio async def test__get_user_by_name(): user = await github.internals.get_user_by_username("EarthenSky")