diff --git a/src/controllers/RunnerOrganizationController.ts b/src/controllers/RunnerOrganizationController.ts index de19d49..5cf4183 100644 --- a/src/controllers/RunnerOrganizationController.ts +++ b/src/controllers/RunnerOrganizationController.ts @@ -1,4 +1,4 @@ -import { Authorized, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers'; +import { Authorized, BadRequestError, Body, Delete, Get, JsonController, OnUndefined, Param, Post, Put, QueryParam } from 'routing-controllers'; import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi'; import { getConnectionManager, Repository } from 'typeorm'; import { RunnerOrganizationHasRunnersError, RunnerOrganizationHasTeamsError, RunnerOrganizationIdsNotMatchingError, RunnerOrganizationNotFoundError } from '../errors/RunnerOrganizationErrors'; @@ -114,6 +114,10 @@ export class RunnerOrganizationController { @OnUndefined(204) @OpenAPI({ description: 'Delete the organsisation whose id you provided.
If the organization still has runners and/or teams associated this will fail.
To delete the organization with all associated runners and teams set the force QueryParam to true (cascading deletion might take a while).
This won\'t delete the associated contact.
If no organization with this id exists it will just return 204(no content).' }) async remove(@Param("id") id: number, @QueryParam("force") force: boolean) { + if (id == 1) { + throw new BadRequestError("You can't delete the citizen runner org."); + } + let organization = await this.runnerOrganizationRepository.findOne({ id: id }); if (!organization) { return null; } let runnerOrganization = await this.runnerOrganizationRepository.findOne(organization, { relations: ['contact', 'runners', 'teams'] }); diff --git a/src/tests/runnerOrgs/org_delete.spec.ts b/src/tests/runnerOrgs/org_delete.spec.ts index 92cbfce..293b5a6 100644 --- a/src/tests/runnerOrgs/org_delete.spec.ts +++ b/src/tests/runnerOrgs/org_delete.spec.ts @@ -22,6 +22,12 @@ describe('deletion (non-existant)', () => { expect(res2.status).toEqual(204); }); }); +describe('deletion of citizen sould fail', () => { + it('delete', async () => { + const res3 = await axios.delete(base + '/api/organizations/1', axios_config); + expect(res3.status).toEqual(400); + }); +}); // --------------- describe('adding + deletion (successfull)', () => { let added_org_id diff --git a/test.sqlite-journal b/test.sqlite-journal new file mode 100644 index 0000000..b494b93 Binary files /dev/null and b/test.sqlite-journal differ