diff --git a/src/controllers/DonationController.ts b/src/controllers/DonationController.ts
index 9c2696d..9401694 100644
--- a/src/controllers/DonationController.ts
+++ b/src/controllers/DonationController.ts
@@ -78,7 +78,7 @@ export class DonationController {
async postDistance(@Body({ validate: true }) createDonation: CreateDistanceDonation) {
let donation = await createDonation.toEntity();
donation = await this.distanceDonationRepository.save(donation);
- return (await this.donationRepository.findOne({ id: donation.id }, { relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] })).toResponse();
+ return (await this.distanceDonationRepository.findOne({ id: donation.id }, { relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] })).toResponse();
}
@Put('/fixed/:id')
@@ -124,7 +124,7 @@ export class DonationController {
}
await this.distanceDonationRepository.save(await donation.update(oldDonation));
- return (await this.donationRepository.findOne({ id: donation.id }, { relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] })).toResponse();
+ return (await this.distanceDonationRepository.findOne({ id: donation.id }, { relations: ['runner', 'donor', 'runner.scans', 'runner.scans.track'] })).toResponse();
}
@Delete('/:id')
diff --git a/src/controllers/ScanController.ts b/src/controllers/ScanController.ts
index 0de844c..b223689 100644
--- a/src/controllers/ScanController.ts
+++ b/src/controllers/ScanController.ts
@@ -36,7 +36,7 @@ export class ScanController {
@OpenAPI({ description: 'Lists all scans (normal or track) from all runners.
This includes the scan\'s runner\'s distance ran.' })
async getAll() {
let responseScans: ResponseScan[] = new Array();
- const scans = await this.scanRepository.find({ relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] });
+ const scans = await this.scanRepository.find({ relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] });
scans.forEach(scan => {
responseScans.push(scan.toResponse());
});
@@ -51,7 +51,7 @@ export class ScanController {
@OnUndefined(ScanNotFoundError)
@OpenAPI({ description: 'Lists all information about the scan whose id got provided. This includes the scan\'s runner\'s distance ran.' })
async getOne(@Param('id') id: number) {
- let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })
+ let scan = await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] })
if (!scan) { throw new ScanNotFoundError(); }
return scan.toResponse();
}
@@ -64,7 +64,7 @@ export class ScanController {
async post(@Body({ validate: true }) createScan: CreateScan) {
let scan = await createScan.toEntity();
scan = await this.scanRepository.save(scan);
- return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse();
+ return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] })).toResponse();
}
@Post("/trackscans")
@@ -75,7 +75,7 @@ export class ScanController {
async postTrackScans(@Body({ validate: true }) createScan: CreateTrackScan) {
let scan = await createScan.toEntity();
scan = await this.trackScanRepository.save(scan);
- return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse();
+ return (await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] })).toResponse();
}
@Put('/:id')
@@ -97,7 +97,7 @@ export class ScanController {
}
await this.scanRepository.save(await scan.update(oldScan));
- return (await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse();
+ return (await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] })).toResponse();
}
@Put('/trackscans/:id')
@@ -120,7 +120,7 @@ export class ScanController {
}
await this.trackScanRepository.save(await scan.update(oldScan));
- return (await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] })).toResponse();
+ return (await this.scanRepository.findOne({ id: id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] })).toResponse();
}
@Delete('/:id')
@@ -132,7 +132,7 @@ export class ScanController {
async remove(@Param("id") id: number, @QueryParam("force") force: boolean) {
let scan = await this.scanRepository.findOne({ id: id });
if (!scan) { return null; }
- const responseScan = await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.scans.track', 'card', 'station'] });
+ const responseScan = await this.scanRepository.findOne({ id: scan.id }, { relations: ['runner', 'track', 'runner.scans', 'runner.group', 'runner.scans.track', 'card', 'station'] });
await this.scanRepository.delete(scan);
return responseScan.toResponse();
diff --git a/src/models/entities/UserGroup.ts b/src/models/entities/UserGroup.ts
index cd7b06c..fad8039 100644
--- a/src/models/entities/UserGroup.ts
+++ b/src/models/entities/UserGroup.ts
@@ -4,7 +4,6 @@ import {
IsString
} from "class-validator";
import { ChildEntity, Column } from "typeorm";
-import { ResponsePrincipal } from '../responses/ResponsePrincipal';
import { ResponseUserGroup } from '../responses/ResponseUserGroup';
import { Principal } from './Principal';
@@ -34,7 +33,7 @@ export class UserGroup extends Principal {
/**
* Turns this entity into it's response class.
*/
- public toResponse(): ResponsePrincipal {
+ public toResponse(): ResponseUserGroup {
return new ResponseUserGroup(this);
}
}
\ No newline at end of file
diff --git a/src/models/enums/ResponseObjectType.ts b/src/models/enums/ResponseObjectType.ts
new file mode 100644
index 0000000..e0622be
--- /dev/null
+++ b/src/models/enums/ResponseObjectType.ts
@@ -0,0 +1,34 @@
+/**
+ * This enum contains all object types/entities a response can contain.
+ */
+export enum ResponseObjectType {
+ AUTH = 'AUTH',
+ DISTANCEDONATION = 'DISTANCEDONATION',
+ DONATION = 'DONATION',
+ DONOR = 'DONOR',
+ EMPTY = 'EMPTY',
+ GROUPCONTACT = 'GROUPCONTACT',
+ LOGOUT = 'LOGOUT',
+ PARTICIPANT = 'PARTICIPANT',
+ PERMISSION = 'PERMISSION',
+ PRINCIPAL = 'PRINCIPAL',
+ RUNNER = 'RUNNER',
+ RUNNERCARD = 'RUNNERCARD',
+ RUNNERGROUP = 'RUNNERGROUP',
+ RUNNERORGANIZATION = 'RUNNERORGANIZATION',
+ RUNNERTEAM = 'RUNNERTEAM',
+ SCAN = 'SCAN',
+ SCANSTATION = 'SCANSTATION',
+ SELFSERVICEDONATION = 'SELFSERVICEDONATION',
+ SELFSERVICERUNNER = 'SELFSERVICRUNNER',
+ STATS = 'STATS',
+ STATSCLIENT = 'STATSCLIENT',
+ STATSORGANIZATION = 'STATSORGANIZATION',
+ STATSRUNNER = 'STATSRUNNER',
+ STATSTEAM = 'STATSTEAM',
+ TRACK = 'TRACK',
+ TRACKSCAN = 'TRACKSCAN',
+ USER = 'USER',
+ USERGROUP = 'USERGROUP',
+ USERPERMISSIONS = 'USERPERMISSIONS',
+}
\ No newline at end of file
diff --git a/src/models/responses/IResponse.ts b/src/models/responses/IResponse.ts
new file mode 100644
index 0000000..c3917dd
--- /dev/null
+++ b/src/models/responses/IResponse.ts
@@ -0,0 +1,13 @@
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+
+/**
+ * Defines the repsonse interface.
+ * This forces all response classes to implement the interfaces properties.
+*/
+export interface IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType;
+}
diff --git a/src/models/responses/ResponseAuth.ts b/src/models/responses/ResponseAuth.ts
index 6948253..7c042ac 100644
--- a/src/models/responses/ResponseAuth.ts
+++ b/src/models/responses/ResponseAuth.ts
@@ -1,9 +1,18 @@
import { IsInt, IsString } from 'class-validator';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the repsonse auth.
*/
-export class ResponseAuth {
+export class ResponseAuth implements IResponse {
+
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.AUTH;
+
/**
* The access_token - JWT shortterm access token.
*/
diff --git a/src/models/responses/ResponseDistanceDonation.ts b/src/models/responses/ResponseDistanceDonation.ts
index 388ece0..65fea13 100644
--- a/src/models/responses/ResponseDistanceDonation.ts
+++ b/src/models/responses/ResponseDistanceDonation.ts
@@ -1,12 +1,19 @@
import { IsInt, IsObject, IsPositive } from 'class-validator';
import { DistanceDonation } from '../entities/DistanceDonation';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseDonation } from './ResponseDonation';
import { ResponseRunner } from './ResponseRunner';
/**
* Defines the distance donation response.
*/
-export class ResponseDistanceDonation extends ResponseDonation {
+export class ResponseDistanceDonation extends ResponseDonation implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.DISTANCEDONATION;
/**
* The donation's associated runner.
@@ -29,7 +36,7 @@ export class ResponseDistanceDonation extends ResponseDonation {
*/
public constructor(donation: DistanceDonation) {
super(donation);
- this.runner = donation.runner.toResponse();
+ if (donation.runner) { this.runner = donation.runner.toResponse(); }
this.amountPerDistance = donation.amountPerDistance;
}
}
diff --git a/src/models/responses/ResponseDonation.ts b/src/models/responses/ResponseDonation.ts
index c2789e3..e29f11f 100644
--- a/src/models/responses/ResponseDonation.ts
+++ b/src/models/responses/ResponseDonation.ts
@@ -1,11 +1,20 @@
import { IsInt, IsNotEmpty, IsPositive } from "class-validator";
import { Donation } from '../entities/Donation';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseDonor } from './ResponseDonor';
/**
* Defines the donation response.
*/
-export class ResponseDonation {
+export class ResponseDonation implements IResponse {
+
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.DONATION;
+
/**
* The donation's id.
*/
diff --git a/src/models/responses/ResponseDonor.ts b/src/models/responses/ResponseDonor.ts
index 5f659f9..2b1e3fc 100644
--- a/src/models/responses/ResponseDonor.ts
+++ b/src/models/responses/ResponseDonor.ts
@@ -2,12 +2,19 @@ import {
IsBoolean, IsInt
} from "class-validator";
import { Donor } from '../entities/Donor';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseParticipant } from './ResponseParticipant';
/**
* Defines the donor response.
*/
-export class ResponseDonor extends ResponseParticipant {
+export class ResponseDonor extends ResponseParticipant implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.DONOR;
/**
* Does this donor need a receipt?
diff --git a/src/models/responses/ResponseEmpty.ts b/src/models/responses/ResponseEmpty.ts
index 57b0543..d6e2018 100644
--- a/src/models/responses/ResponseEmpty.ts
+++ b/src/models/responses/ResponseEmpty.ts
@@ -1,9 +1,17 @@
import { IsString } from 'class-validator';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines a empty response object.
*/
-export class ResponseEmpty {
+export class ResponseEmpty implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.EMPTY;
+
@IsString()
response: string = "nothing here"
}
diff --git a/src/models/responses/ResponseGroupContact.ts b/src/models/responses/ResponseGroupContact.ts
index 291dde5..e3fee94 100644
--- a/src/models/responses/ResponseGroupContact.ts
+++ b/src/models/responses/ResponseGroupContact.ts
@@ -1,12 +1,20 @@
import { IsInt, IsObject, IsString } from "class-validator";
import { Address } from '../entities/Address';
import { GroupContact } from '../entities/GroupContact';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunnerGroup } from './ResponseRunnerGroup';
/**
* Defines the group contact response.
*/
-export class ResponseGroupContact {
+export class ResponseGroupContact implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.GROUPCONTACT;
+
/**
* The contact's id.
*/
@@ -69,8 +77,10 @@ export class ResponseGroupContact {
this.email = contact.email;
this.address = contact.address;
this.groups = new Array();
- for (let group of contact.groups) {
- this.groups.push(group.toResponse());
+ if (contact.groups) {
+ for (let group of contact.groups) {
+ this.groups.push(group.toResponse());
+ }
}
}
}
diff --git a/src/models/responses/ResponseLogout.ts b/src/models/responses/ResponseLogout.ts
index fdb8d49..8cd8ce9 100644
--- a/src/models/responses/ResponseLogout.ts
+++ b/src/models/responses/ResponseLogout.ts
@@ -1,9 +1,17 @@
import { IsString } from 'class-validator';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the logout response.
*/
-export class Logout {
+export class Logout implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.LOGOUT;
+
/**
* The logout's timestamp.
*/
diff --git a/src/models/responses/ResponseParticipant.ts b/src/models/responses/ResponseParticipant.ts
index 93a6918..b5ca124 100644
--- a/src/models/responses/ResponseParticipant.ts
+++ b/src/models/responses/ResponseParticipant.ts
@@ -1,11 +1,19 @@
import { IsInt, IsObject, IsOptional, IsString } from "class-validator";
import { Address } from '../entities/Address';
import { Participant } from '../entities/Participant';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the participant response.
*/
-export abstract class ResponseParticipant {
+export abstract class ResponseParticipant implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.PARTICIPANT;
+
/**
* The participant's id.
*/
diff --git a/src/models/responses/ResponsePermission.ts b/src/models/responses/ResponsePermission.ts
index a6b0bc1..5eb500d 100644
--- a/src/models/responses/ResponsePermission.ts
+++ b/src/models/responses/ResponsePermission.ts
@@ -7,12 +7,20 @@ import {
import { Permission } from '../entities/Permission';
import { PermissionAction } from '../enums/PermissionAction';
import { PermissionTarget } from '../enums/PermissionTargets';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponsePrincipal } from './ResponsePrincipal';
/**
* Defines the permission response.
*/
-export class ResponsePermission {
+export class ResponsePermission implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.PERMISSION;
+
/**
* The permission's id.
*/
diff --git a/src/models/responses/ResponsePrincipal.ts b/src/models/responses/ResponsePrincipal.ts
index afd4dd1..8ad4414 100644
--- a/src/models/responses/ResponsePrincipal.ts
+++ b/src/models/responses/ResponsePrincipal.ts
@@ -2,11 +2,19 @@ import {
IsInt
} from "class-validator";
import { Principal } from '../entities/Principal';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the principal response.
*/
-export abstract class ResponsePrincipal {
+export abstract class ResponsePrincipal implements IResponse {
+
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.PRINCIPAL;
/**
* The principal's id.
diff --git a/src/models/responses/ResponseRunner.ts b/src/models/responses/ResponseRunner.ts
index 0d2fb67..8ed39e1 100644
--- a/src/models/responses/ResponseRunner.ts
+++ b/src/models/responses/ResponseRunner.ts
@@ -3,13 +3,20 @@ import {
IsObject
} from "class-validator";
import { Runner } from '../entities/Runner';
-import { RunnerGroup } from '../entities/RunnerGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseParticipant } from './ResponseParticipant';
+import { ResponseRunnerGroup } from './ResponseRunnerGroup';
/**
* Defines the runner response.
*/
-export class ResponseRunner extends ResponseParticipant {
+export class ResponseRunner extends ResponseParticipant implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.RUNNER;
/**
* The runner's currently ran distance in meters.
@@ -21,7 +28,7 @@ export class ResponseRunner extends ResponseParticipant {
* The runner's group.
*/
@IsObject()
- group: RunnerGroup;
+ group: ResponseRunnerGroup;
/**
* Creates a ResponseRunner object from a runner.
@@ -31,6 +38,6 @@ export class ResponseRunner extends ResponseParticipant {
super(runner);
if (!runner.scans) { this.distance = 0 }
else { this.distance = runner.validScans.reduce((sum, current) => sum + current.distance, 0); }
- this.group = runner.group;
+ if (runner.group) { this.group = runner.group.toResponse(); }
}
}
diff --git a/src/models/responses/ResponseRunnerCard.ts b/src/models/responses/ResponseRunnerCard.ts
index f895a9c..84309be 100644
--- a/src/models/responses/ResponseRunnerCard.ts
+++ b/src/models/responses/ResponseRunnerCard.ts
@@ -1,11 +1,19 @@
import { IsBoolean, IsEAN, IsInt, IsNotEmpty, IsObject, IsString } from "class-validator";
import { RunnerCard } from '../entities/RunnerCard';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunner } from './ResponseRunner';
/**
* Defines the runner card response.
*/
-export class ResponseRunnerCard {
+export class ResponseRunnerCard implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.RUNNERCARD;
+
/**
* The card's id.
*/
diff --git a/src/models/responses/ResponseRunnerGroup.ts b/src/models/responses/ResponseRunnerGroup.ts
index 7be35a6..b841218 100644
--- a/src/models/responses/ResponseRunnerGroup.ts
+++ b/src/models/responses/ResponseRunnerGroup.ts
@@ -1,11 +1,19 @@
import { IsInt, IsNotEmpty, IsObject, IsOptional, IsString } from "class-validator";
-import { GroupContact } from '../entities/GroupContact';
import { RunnerGroup } from '../entities/RunnerGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
+import { ResponseGroupContact } from './ResponseGroupContact';
/**
* Defines the runnerGroup response.
*/
-export abstract class ResponseRunnerGroup {
+export abstract class ResponseRunnerGroup implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.RUNNERGROUP;
+
/**
* The runnerGroup's id.
*/
@@ -26,7 +34,7 @@ export abstract class ResponseRunnerGroup {
*/
@IsObject()
@IsOptional()
- contact?: GroupContact;
+ contact?: ResponseGroupContact;
/**
* Creates a ResponseRunnerGroup object from a runnerGroup.
@@ -35,6 +43,6 @@ export abstract class ResponseRunnerGroup {
public constructor(group: RunnerGroup) {
this.id = group.id;
this.name = group.name;
- this.contact = group.contact;
+ if (group.contact) { this.contact = group.contact.toResponse(); };
}
}
diff --git a/src/models/responses/ResponseRunnerOrganization.ts b/src/models/responses/ResponseRunnerOrganization.ts
index dcafb53..3a78dfc 100644
--- a/src/models/responses/ResponseRunnerOrganization.ts
+++ b/src/models/responses/ResponseRunnerOrganization.ts
@@ -11,13 +11,20 @@ import {
} from "class-validator";
import { Address } from '../entities/Address';
import { RunnerOrganization } from '../entities/RunnerOrganization';
-import { RunnerTeam } from '../entities/RunnerTeam';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunnerGroup } from './ResponseRunnerGroup';
+import { ResponseRunnerTeam } from './ResponseRunnerTeam';
/**
* Defines the runnerOrganization response.
*/
-export class ResponseRunnerOrganization extends ResponseRunnerGroup {
+export class ResponseRunnerOrganization extends ResponseRunnerGroup implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.RUNNERORGANIZATION;
/**
* The runnerOrganization's address.
@@ -30,7 +37,7 @@ export class ResponseRunnerOrganization extends ResponseRunnerGroup {
* The runnerOrganization associated teams.
*/
@IsArray()
- teams: RunnerTeam[];
+ teams: ResponseRunnerTeam[];
/**
* The organization's registration key.
@@ -55,7 +62,13 @@ export class ResponseRunnerOrganization extends ResponseRunnerGroup {
public constructor(org: RunnerOrganization) {
super(org);
this.address = org.address;
- this.teams = org.teams;
+ this.teams = new Array();
+ if (org.teams) {
+ for (let team of org.teams) {
+ this.teams.push(team.toResponse());
+ }
+ }
+
if (!org.key) { this.registrationEnabled = false; }
else { this.registrationKey = Buffer.from(org.key).toString('base64'); }
}
diff --git a/src/models/responses/ResponseRunnerTeam.ts b/src/models/responses/ResponseRunnerTeam.ts
index 50566cf..0434789 100644
--- a/src/models/responses/ResponseRunnerTeam.ts
+++ b/src/models/responses/ResponseRunnerTeam.ts
@@ -1,12 +1,19 @@
import { IsNotEmpty, IsObject } from "class-validator";
import { RunnerTeam } from '../entities/RunnerTeam';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunnerGroup } from './ResponseRunnerGroup';
import { ResponseRunnerOrganization } from './ResponseRunnerOrganization';
/**
* Defines the runnerTeam response.
*/
-export class ResponseRunnerTeam extends ResponseRunnerGroup {
+export class ResponseRunnerTeam extends ResponseRunnerGroup implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.RUNNERTEAM;
/**
* The runnerTeam's parent group (organization).
@@ -21,6 +28,6 @@ export class ResponseRunnerTeam extends ResponseRunnerGroup {
*/
public constructor(team: RunnerTeam) {
super(team);
- this.parentGroup = team.parentGroup.toResponse();
+ if (team.parentGroup) { this.parentGroup = team.parentGroup.toResponse(); }
}
}
diff --git a/src/models/responses/ResponseScan.ts b/src/models/responses/ResponseScan.ts
index e666442..864b455 100644
--- a/src/models/responses/ResponseScan.ts
+++ b/src/models/responses/ResponseScan.ts
@@ -1,11 +1,19 @@
import { IsBoolean, IsInt, IsNotEmpty, IsPositive } from "class-validator";
import { Scan } from '../entities/Scan';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunner } from './ResponseRunner';
/**
* Defines the scan response.
*/
-export class ResponseScan {
+export class ResponseScan implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.SCAN;
+
/**
* The scans's id.
*/
@@ -39,7 +47,7 @@ export class ResponseScan {
*/
public constructor(scan: Scan) {
this.id = scan.id;
- this.runner = scan.runner.toResponse();
+ if (scan.runner) { this.runner = scan.runner.toResponse(); }
this.distance = scan.distance;
this.valid = scan.valid;
}
diff --git a/src/models/responses/ResponseScanStation.ts b/src/models/responses/ResponseScanStation.ts
index 7d7dc48..459d132 100644
--- a/src/models/responses/ResponseScanStation.ts
+++ b/src/models/responses/ResponseScanStation.ts
@@ -11,12 +11,20 @@ import {
IsString
} from "class-validator";
import { ScanStation } from '../entities/ScanStation';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseTrack } from './ResponseTrack';
/**
* Defines the statsClient response.
*/
-export class ResponseScanStation {
+export class ResponseScanStation implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.SCANSTATION;
+
/**
* The client's id.
*/
@@ -64,7 +72,7 @@ export class ResponseScanStation {
this.description = station.description;
this.prefix = station.prefix;
this.key = "Only visible on creation.";
- this.track = station.track;
+ if (station.track) { this.track = station.track.toResponse(); }
this.enabled = station.enabled;
}
}
diff --git a/src/models/responses/ResponseSelfServiceDonation.ts b/src/models/responses/ResponseSelfServiceDonation.ts
index 4f10f3c..beb8fdc 100644
--- a/src/models/responses/ResponseSelfServiceDonation.ts
+++ b/src/models/responses/ResponseSelfServiceDonation.ts
@@ -1,11 +1,19 @@
import { IsInt, IsNotEmpty, IsPositive } from 'class-validator';
import { DistanceDonation } from '../entities/DistanceDonation';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the runner selfservice donation response.
* Why? B/C runner's are not allowed to view all information available to admin users.
*/
-export class ResponseSelfServiceDonation {
+export class ResponseSelfServiceDonation implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.SELFSERVICEDONATION;
+
/**
* The donation's donor.
*/
diff --git a/src/models/responses/ResponseSelfServiceRunner.ts b/src/models/responses/ResponseSelfServiceRunner.ts
index fa9a1f1..00fe9b9 100644
--- a/src/models/responses/ResponseSelfServiceRunner.ts
+++ b/src/models/responses/ResponseSelfServiceRunner.ts
@@ -3,6 +3,8 @@ import { DistanceDonation } from '../entities/DistanceDonation';
import { Runner } from '../entities/Runner';
import { RunnerGroup } from '../entities/RunnerGroup';
import { RunnerTeam } from '../entities/RunnerTeam';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseParticipant } from './ResponseParticipant';
import { ResponseSelfServiceDonation } from './ResponseSelfServiceDonation';
@@ -10,7 +12,12 @@ import { ResponseSelfServiceDonation } from './ResponseSelfServiceDonation';
* Defines the runner selfservice response.
* Why? B/C runner's are not allowed to view all information available to admin users.
*/
-export class ResponseSelfServiceRunner extends ResponseParticipant {
+export class ResponseSelfServiceRunner extends ResponseParticipant implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.SELFSERVICERUNNER;
/**
* The runner's currently ran distance in meters.
diff --git a/src/models/responses/ResponseStats.ts b/src/models/responses/ResponseStats.ts
index d184089..f3d36a3 100644
--- a/src/models/responses/ResponseStats.ts
+++ b/src/models/responses/ResponseStats.ts
@@ -7,12 +7,20 @@ import { RunnerOrganization } from '../entities/RunnerOrganization';
import { RunnerTeam } from '../entities/RunnerTeam';
import { Scan } from '../entities/Scan';
import { User } from '../entities/User';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the stats response.
* The stats response calculates some basic stats for a dashboard or public display.
*/
-export class ResponseStats {
+export class ResponseStats implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.STATS;
+
/**
* The amount of runners registered in the system.
*/
diff --git a/src/models/responses/ResponseStatsClient.ts b/src/models/responses/ResponseStatsClient.ts
index 4028e2a..7f10352 100644
--- a/src/models/responses/ResponseStatsClient.ts
+++ b/src/models/responses/ResponseStatsClient.ts
@@ -8,11 +8,19 @@ import {
IsString
} from "class-validator";
import { StatsClient } from '../entities/StatsClient';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the statsClient response.
*/
-export class ResponseStatsClient {
+export class ResponseStatsClient implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.STATSCLIENT;
+
/**
* The client's id.
*/
diff --git a/src/models/responses/ResponseStatsOrganization.ts b/src/models/responses/ResponseStatsOrganization.ts
index 592435a..5339b55 100644
--- a/src/models/responses/ResponseStatsOrganization.ts
+++ b/src/models/responses/ResponseStatsOrganization.ts
@@ -4,12 +4,20 @@ import {
IsString
} from "class-validator";
import { RunnerOrganization } from '../entities/RunnerOrganization';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the org stats response.
* This differs from the normal org responce.
*/
-export class ResponseStatsOrgnisation {
+export class ResponseStatsOrgnisation implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.STATSORGANIZATION;
+
/**
* The orgs's id.
*/
diff --git a/src/models/responses/ResponseStatsRunner.ts b/src/models/responses/ResponseStatsRunner.ts
index 8b55983..3aac437 100644
--- a/src/models/responses/ResponseStatsRunner.ts
+++ b/src/models/responses/ResponseStatsRunner.ts
@@ -4,13 +4,21 @@ import {
IsString
} from "class-validator";
import { Runner } from '../entities/Runner';
-import { RunnerGroup } from '../entities/RunnerGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
+import { ResponseRunnerGroup } from './ResponseRunnerGroup';
/**
* Defines the runner stats response.
* This differs from the normal runner responce.
*/
-export class ResponseStatsRunner {
+export class ResponseStatsRunner implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.STATSRUNNER;
+
/**
* The runner's id.
*/
@@ -51,7 +59,7 @@ export class ResponseStatsRunner {
* The runner's group.
*/
@IsObject()
- group: RunnerGroup;
+ group: ResponseRunnerGroup;
/**
* Creates a new runner stats response from a runner
@@ -64,6 +72,6 @@ export class ResponseStatsRunner {
this.lastname = runner.lastname;
this.distance = runner.distance;
this.donationAmount = runner.distanceDonationAmount;
- this.group = runner.group;
+ this.group = runner.group.toResponse();
}
}
diff --git a/src/models/responses/ResponseStatsTeam.ts b/src/models/responses/ResponseStatsTeam.ts
index 362971a..82e4eb9 100644
--- a/src/models/responses/ResponseStatsTeam.ts
+++ b/src/models/responses/ResponseStatsTeam.ts
@@ -3,14 +3,22 @@ import {
IsObject,
IsString
} from "class-validator";
-import { RunnerGroup } from '../entities/RunnerGroup';
import { RunnerTeam } from '../entities/RunnerTeam';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
+import { ResponseRunnerGroup } from './ResponseRunnerGroup';
/**
* Defines the team stats response.
* This differs from the normal team responce.
*/
-export class ResponseStatsTeam {
+export class ResponseStatsTeam implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.STATSTEAM;
+
/**
* The team's id.
*/
@@ -39,7 +47,7 @@ export class ResponseStatsTeam {
* The teams's parent group.
*/
@IsObject()
- parent: RunnerGroup;
+ parent: ResponseRunnerGroup;
/**
* Creates a new team stats response from a team
@@ -48,7 +56,7 @@ export class ResponseStatsTeam {
public constructor(team: RunnerTeam) {
this.name = team.name;
this.id = team.id;
- this.parent = team.parentGroup;
+ this.parent = team.parentGroup.toResponse();
this.distance = team.distance;
this.donationAmount = team.distanceDonationAmount;
}
diff --git a/src/models/responses/ResponseTrack.ts b/src/models/responses/ResponseTrack.ts
index 27ef813..a4bdea0 100644
--- a/src/models/responses/ResponseTrack.ts
+++ b/src/models/responses/ResponseTrack.ts
@@ -1,11 +1,19 @@
import { IsInt, IsOptional, IsString } from "class-validator";
import { TrackLapTimeCantBeNegativeError } from '../../errors/TrackErrors';
import { Track } from '../entities/Track';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
/**
* Defines the track response.
*/
-export class ResponseTrack {
+export class ResponseTrack implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.TRACK;
+
/**
* The track's id.
*/
diff --git a/src/models/responses/ResponseTrackScan.ts b/src/models/responses/ResponseTrackScan.ts
index d52b4f7..ffd9ceb 100644
--- a/src/models/responses/ResponseTrackScan.ts
+++ b/src/models/responses/ResponseTrackScan.ts
@@ -1,5 +1,7 @@
import { IsDateString, IsNotEmpty } from "class-validator";
import { TrackScan } from '../entities/TrackScan';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponseRunnerCard } from './ResponseRunnerCard';
import { ResponseScan } from './ResponseScan';
import { ResponseScanStation } from './ResponseScanStation';
@@ -8,10 +10,16 @@ import { ResponseTrack } from './ResponseTrack';
/**
* Defines the trackScan response.
*/
-export class ResponseTrackScan extends ResponseScan {
+export class ResponseTrackScan extends ResponseScan implements IResponse {
/**
- * The scan's associated track.
- */
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.TRACKSCAN;
+
+ /**
+ * The scan's associated track.
+ */
@IsNotEmpty()
track: ResponseTrack;
@@ -41,8 +49,8 @@ export class ResponseTrackScan extends ResponseScan {
public constructor(scan: TrackScan) {
super(scan);
this.track = new ResponseTrack(scan.track);
- this.card = scan.card.toResponse();
- this.station = scan.station.toResponse();
+ if (scan.card) { scan.card.toResponse(); }
+ if (scan.station) { scan.station.toResponse(); }
this.timestamp = scan.timestamp;
this.distance = scan.distance;
}
diff --git a/src/models/responses/ResponseUser.ts b/src/models/responses/ResponseUser.ts
index 884622c..1b55e45 100644
--- a/src/models/responses/ResponseUser.ts
+++ b/src/models/responses/ResponseUser.ts
@@ -6,13 +6,21 @@ import {
IsString
} from "class-validator";
import { User } from '../entities/User';
-import { UserGroup } from '../entities/UserGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponsePrincipal } from './ResponsePrincipal';
+import { ResponseUserGroup } from './ResponseUserGroup';
/**
* Defines the user response.
*/
-export class ResponseUser extends ResponsePrincipal {
+export class ResponseUser extends ResponsePrincipal implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.USER;
+
/**
* The user's first name.
*/
@@ -66,7 +74,7 @@ export class ResponseUser extends ResponsePrincipal {
*/
@IsArray()
@IsOptional()
- groups: UserGroup[];
+ groups: ResponseUserGroup[];
/**
* The user's permissions.
@@ -90,10 +98,13 @@ export class ResponseUser extends ResponsePrincipal {
this.username = user.username;
this.enabled = user.enabled;
this.profilePic = user.profilePic;
- this.groups = user.groups;
+ this.groups = new Array();
this.permissions = user.allPermissions;
- if (this.groups) {
- this.groups.forEach(function (g) { delete g.permissions });
+ if (user.groups) {
+ for (let group of user.groups) {
+ delete group.permissions;
+ this.groups.push(group.toResponse());
+ }
}
}
}
diff --git a/src/models/responses/ResponseUserGroup.ts b/src/models/responses/ResponseUserGroup.ts
index e0276f9..e6f00bb 100644
--- a/src/models/responses/ResponseUserGroup.ts
+++ b/src/models/responses/ResponseUserGroup.ts
@@ -1,12 +1,20 @@
import { IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator";
-import { Permission } from '../entities/Permission';
import { UserGroup } from '../entities/UserGroup';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
+import { ResponsePermission } from './ResponsePermission';
import { ResponsePrincipal } from './ResponsePrincipal';
/**
* Defines the userGroup response.
*/
-export class ResponseUserGroup extends ResponsePrincipal {
+export class ResponseUserGroup extends ResponsePrincipal implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.USERGROUP;
+
/**
* The userGroup's name.
*/
@@ -26,7 +34,7 @@ export class ResponseUserGroup extends ResponsePrincipal {
*/
@IsArray()
@IsOptional()
- permissions: Permission[];
+ permissions: ResponsePermission[];
/**
* Creates a ResponseUserGroup object from a userGroup.
@@ -36,6 +44,10 @@ export class ResponseUserGroup extends ResponsePrincipal {
super(group);
this.name = group.name;
this.description = group.description;
- this.permissions = group.permissions;
+ if (group.permissions) {
+ for (let permission of group.permissions) {
+ this.permissions.push(permission.toResponse());
+ }
+ }
}
}
diff --git a/src/models/responses/ResponseUserPermissions.ts b/src/models/responses/ResponseUserPermissions.ts
index d5a8a7b..524398d 100644
--- a/src/models/responses/ResponseUserPermissions.ts
+++ b/src/models/responses/ResponseUserPermissions.ts
@@ -5,12 +5,20 @@ import {
IsOptional
} from "class-validator";
import { User } from '../entities/User';
+import { ResponseObjectType } from '../enums/ResponseObjectType';
+import { IResponse } from './IResponse';
import { ResponsePermission } from './ResponsePermission';
/**
* Defines the user permission response (get /api/users/:id/permissions).
*/
-export class ResponseUserPermissions {
+export class ResponseUserPermissions implements IResponse {
+ /**
+ * The responseType.
+ * This contains the type of class/entity this response contains.
+ */
+ responseType: ResponseObjectType = ResponseObjectType.USERPERMISSIONS;
+
/**
* The permissions directly granted to the user.
*/
diff --git a/src/tests/cards/cards_add.spec.ts b/src/tests/cards/cards_add.spec.ts
index 244ba12..10ee9d4 100644
--- a/src/tests/cards/cards_add.spec.ts
+++ b/src/tests/cards/cards_add.spec.ts
@@ -34,7 +34,8 @@ describe('POST /api/cards successfully (without runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": null,
- "enabled": true
+ "enabled": true,
+ "responseType": "RUNNERCARD"
});
});
it('creating a disabled card should return 200', async () => {
@@ -47,7 +48,8 @@ describe('POST /api/cards successfully (without runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": null,
- "enabled": false
+ "enabled": false,
+ "responseType": "RUNNERCARD"
});
});
it('creating a enabled card should return 200', async () => {
@@ -60,7 +62,8 @@ describe('POST /api/cards successfully (without runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": null,
- "enabled": true
+ "enabled": true,
+ "responseType": "RUNNERCARD"
});
});
});
@@ -97,7 +100,8 @@ describe('POST /api/cards successfully (with runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": added_runner,
- "enabled": true
+ "enabled": true,
+ "responseType": "RUNNERCARD"
});
});
it('creating a card with runner (no optional params) should return 200', async () => {
@@ -110,7 +114,8 @@ describe('POST /api/cards successfully (with runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": added_runner,
- "enabled": true
+ "enabled": true,
+ "responseType": "RUNNERCARD"
});
});
it('creating a enabled card with runner should return 200', async () => {
@@ -124,7 +129,8 @@ describe('POST /api/cards successfully (with runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": added_runner,
- "enabled": true
+ "enabled": true,
+ "responseType": "RUNNERCARD"
});
});
it('creating a disabled card with runner should return 200', async () => {
@@ -138,7 +144,8 @@ describe('POST /api/cards successfully (with runner)', () => {
delete res.data.code;
expect(res.data).toEqual({
"runner": added_runner,
- "enabled": false
+ "enabled": false,
+ "responseType": "RUNNERCARD"
});
});
});
\ No newline at end of file
diff --git a/src/tests/cards/cards_update.spec.ts b/src/tests/cards/cards_update.spec.ts
index 804428c..6ec1506 100644
--- a/src/tests/cards/cards_update.spec.ts
+++ b/src/tests/cards/cards_update.spec.ts
@@ -96,7 +96,8 @@ describe('adding + updating card.runner successfully', () => {
"id": added_card.id,
"runner": added_runner,
"enabled": true,
- "code": added_card.code
+ "code": added_card.code,
+ "responseType": "RUNNERCARD"
});
});
it('valid runner update (change runner) should return 200', async () => {
@@ -110,7 +111,8 @@ describe('adding + updating card.runner successfully', () => {
"id": added_card.id,
"runner": added_runner2,
"enabled": true,
- "code": added_card.code
+ "code": added_card.code,
+ "responseType": "RUNNERCARD"
});
});
});
@@ -142,7 +144,8 @@ describe('adding + updating other values successfully', () => {
"id": added_card.id,
"runner": null,
"enabled": false,
- "code": added_card.code
+ "code": added_card.code,
+ "responseType": "RUNNERCARD"
});
});
it('valid enable update should return 200', async () => {
@@ -156,7 +159,8 @@ describe('adding + updating other values successfully', () => {
"id": added_card.id,
"runner": null,
"enabled": true,
- "code": added_card.code
+ "code": added_card.code,
+ "responseType": "RUNNERCARD"
});
});
});
diff --git a/src/tests/contacts/contact_add.spec.ts b/src/tests/contacts/contact_add.spec.ts
index 7508e05..f9fd25e 100644
--- a/src/tests/contacts/contact_add.spec.ts
+++ b/src/tests/contacts/contact_add.spec.ts
@@ -136,6 +136,7 @@ describe('POST /api/contacts working (with group)', () => {
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
+ delete res.data.groups[0].teams;
expect(res.data).toEqual({
"firstname": "first",
"middlename": null,
@@ -149,7 +150,8 @@ describe('POST /api/contacts working (with group)', () => {
"city": null,
"country": null
},
- "groups": [added_org]
+ "groups": [added_org],
+ "responseType": "GROUPCONTACT"
});
});
it('creating a new contact with a valid team should return 200', async () => {
@@ -174,7 +176,8 @@ describe('POST /api/contacts working (with group)', () => {
"city": null,
"country": null
},
- "groups": [added_team]
+ "groups": [added_team],
+ "responseType": "GROUPCONTACT"
});
});
it('creating a new contact with a valid org and team should return 200', async () => {
@@ -187,6 +190,7 @@ describe('POST /api/contacts working (with group)', () => {
expect(res.headers['content-type']).toContain("application/json");
added_contact = res.data
delete res.data.id;
+ delete res.data.groups[0].teams;
expect(res.data).toEqual({
"firstname": "first",
"middlename": null,
@@ -200,7 +204,8 @@ describe('POST /api/contacts working (with group)', () => {
"city": null,
"country": null
},
- "groups": [added_org, added_team]
+ "groups": [added_org, added_team],
+ "responseType": "GROUPCONTACT"
});
});
it('checking if the added team\'s contact is the new contact should return 200', async () => {
diff --git a/src/tests/contacts/contact_update.spec.ts b/src/tests/contacts/contact_update.spec.ts
index 52fe57c..15e4b72 100644
--- a/src/tests/contacts/contact_update.spec.ts
+++ b/src/tests/contacts/contact_update.spec.ts
@@ -86,7 +86,8 @@ describe('Update contact group after adding (should work)', () => {
}, axios_config);
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
- added_contact = res.data
+ added_contact = res.data;
+ delete res.data.groups[0].teams;
expect(res.data).toEqual({
"id": res.data.id,
"firstname": "first",
@@ -101,7 +102,8 @@ describe('Update contact group after adding (should work)', () => {
"city": null,
"country": null
},
- "groups": [added_org]
+ "groups": [added_org],
+ "responseType": "GROUPCONTACT"
});
});
it('valid group update to single team should return 200', async () => {
@@ -127,7 +129,8 @@ describe('Update contact group after adding (should work)', () => {
"city": null,
"country": null
},
- "groups": [added_team]
+ "groups": [added_team],
+ "responseType": "GROUPCONTACT"
});
});
it('valid group update to org and team should return 200', async () => {
@@ -139,6 +142,7 @@ describe('Update contact group after adding (should work)', () => {
}, axios_config);
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
+ delete res.data.groups[0].teams;
expect(res.data).toEqual({
"id": res.data.id,
"firstname": "first",
@@ -153,7 +157,8 @@ describe('Update contact group after adding (should work)', () => {
"city": null,
"country": null
},
- "groups": [added_org, added_team]
+ "groups": [added_org, added_team],
+ "responseType": "GROUPCONTACT"
});
});
it('valid group update to none should return 200', async () => {
@@ -179,7 +184,8 @@ describe('Update contact group after adding (should work)', () => {
"city": null,
"country": null
},
- "groups": []
+ "groups": [],
+ "responseType": "GROUPCONTACT"
});
});
});
@@ -206,6 +212,7 @@ describe('Update contact group invalid after adding (should fail)', () => {
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
added_contact = res.data
+ delete res.data.groups[0].teams;
expect(res.data).toEqual({
"id": res.data.id,
"firstname": "first",
@@ -220,7 +227,8 @@ describe('Update contact group invalid after adding (should fail)', () => {
"city": null,
"country": null
},
- "groups": [added_org]
+ "groups": [added_org],
+ "responseType": "GROUPCONTACT"
});
});
it('invalid group update to single team should return 404', async () => {
diff --git a/src/tests/donations/donations_add.spec.ts b/src/tests/donations/donations_add.spec.ts
index e463c13..daad122 100644
--- a/src/tests/donations/donations_add.spec.ts
+++ b/src/tests/donations/donations_add.spec.ts
@@ -179,7 +179,8 @@ describe('POST /api/donations/fixed successfully', () => {
expect(res.headers['content-type']).toContain("application/json");
expect(res.data).toEqual({
"donor": added_donor,
- "amount": 1000
+ "amount": 1000,
+ "responseType": "DONATION"
});
});
});
@@ -230,7 +231,8 @@ describe('POST /api/donations/distance successfully', () => {
"donor": added_donor,
"amountPerDistance": 100,
"runner": added_runner,
- "amount": 0
+ "amount": 0,
+ "responseType": "DISTANCEDONATION"
})
});
});
\ No newline at end of file
diff --git a/src/tests/donations/donations_update.spec.ts b/src/tests/donations/donations_update.spec.ts
index 51bb46f..5768ab9 100644
--- a/src/tests/donations/donations_update.spec.ts
+++ b/src/tests/donations/donations_update.spec.ts
@@ -323,7 +323,6 @@ describe('adding + updating distance donation valid', () => {
"amountPerDistance": 69,
"donor": added_donor.id
}, axios_config);
- delete res.data.runner.group;
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
expect(res.data.runner).toEqual(added_runner2);
diff --git a/src/tests/runnerOrgs/org_add.spec.ts b/src/tests/runnerOrgs/org_add.spec.ts
index 30eb5f8..d40ef2a 100644
--- a/src/tests/runnerOrgs/org_add.spec.ts
+++ b/src/tests/runnerOrgs/org_add.spec.ts
@@ -55,7 +55,6 @@ describe('adding + getting from all orgs', () => {
delete added_org.id
expect(added_org).toEqual({
"name": "test123",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -64,7 +63,8 @@ describe('adding + getting from all orgs', () => {
"postalcode": null,
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
})
});
});
@@ -89,7 +89,6 @@ describe('adding + getting explicitly', () => {
delete added_org2.id
expect(added_org2).toEqual({
"name": "test123",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -98,7 +97,8 @@ describe('adding + getting explicitly', () => {
"postalcode": null,
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
})
});
});
\ No newline at end of file
diff --git a/src/tests/runnerOrgs/org_delete.spec.ts b/src/tests/runnerOrgs/org_delete.spec.ts
index dd190fb..114777e 100644
--- a/src/tests/runnerOrgs/org_delete.spec.ts
+++ b/src/tests/runnerOrgs/org_delete.spec.ts
@@ -43,7 +43,6 @@ describe('adding + deletion (successfull)', () => {
delete added_org2.id
expect(added_org2).toEqual({
"name": "test123",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -52,7 +51,8 @@ describe('adding + deletion (successfull)', () => {
"postalcode": null,
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('check if org really was deleted', async () => {
@@ -127,7 +127,6 @@ describe('adding + deletion with teams still existing (with force)', () => {
delete added_org2.teams;
expect(added_org2).toEqual({
"name": "test123",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -136,6 +135,7 @@ describe('adding + deletion with teams still existing (with force)', () => {
"postalcode": null,
},
"registrationEnabled": false,
+ "responseType": "RUNNERORGANIZATION"
});
});
it('check if org really was deleted', async () => {
diff --git a/src/tests/runnerOrgs/org_update.spec.ts b/src/tests/runnerOrgs/org_update.spec.ts
index 6e33766..ddc2ea2 100644
--- a/src/tests/runnerOrgs/org_update.spec.ts
+++ b/src/tests/runnerOrgs/org_update.spec.ts
@@ -41,7 +41,6 @@ describe('adding + updating name', () => {
delete added_org2.id
expect(added_org2).toEqual({
"name": "testlelele",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -50,7 +49,8 @@ describe('adding + updating name', () => {
"postalcode": null,
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
})
});
});
@@ -109,7 +109,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test1",
"address2": null,
@@ -118,7 +117,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "90174"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('updateing address\'s first line should return 200', async () => {
@@ -139,7 +139,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test2",
"address2": null,
@@ -148,7 +147,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "90174"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('updateing address\'s second line should return 200', async () => {
@@ -169,7 +169,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test2",
"address2": "Test3",
@@ -178,7 +177,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "90174"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('updateing address\'s city should return 200', async () => {
@@ -199,7 +199,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test2",
"address2": "Test3",
@@ -208,7 +207,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "90174"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('updateing address\'s country should return 200', async () => {
@@ -229,7 +229,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test2",
"address2": "Test3",
@@ -238,7 +237,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "90174"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('updateing address\'s postal code should return 200', async () => {
@@ -259,7 +259,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": "Test2",
"address2": "Test3",
@@ -268,7 +267,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": "91065"
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
it('removing org\'s address should return 200', async () => {
@@ -282,7 +282,6 @@ describe('adding + updateing address valid)', () => {
expect(res.data).toEqual({
"id": added_org_id,
"name": "testlelele",
- "contact": null,
"address": {
"address1": null,
"address2": null,
@@ -291,7 +290,8 @@ describe('adding + updateing address valid)', () => {
"postalcode": null
},
"registrationEnabled": false,
- "teams": []
+ "teams": [],
+ "responseType": "RUNNERORGANIZATION"
});
});
});
diff --git a/src/tests/runnerTeams/team_delete.spec.ts b/src/tests/runnerTeams/team_delete.spec.ts
index b379d76..0cf5046 100644
--- a/src/tests/runnerTeams/team_delete.spec.ts
+++ b/src/tests/runnerTeams/team_delete.spec.ts
@@ -48,7 +48,7 @@ describe('adding org', () => {
delete deleted_team.parentGroup;
expect(deleted_team).toEqual({
"name": "test123",
- "contact": null
+ "responseType": "RUNNERTEAM"
});
});
it('check if team really was deleted', async () => {
diff --git a/src/tests/runnerTeams/team_update.spec.ts b/src/tests/runnerTeams/team_update.spec.ts
index be1b1be..c8480ab 100644
--- a/src/tests/runnerTeams/team_update.spec.ts
+++ b/src/tests/runnerTeams/team_update.spec.ts
@@ -127,6 +127,7 @@ describe('add+update parent org (valid)', () => {
delete added_org2.registrationEnabled;
delete res4.data.parentGroup.key;
delete res4.data.parentGroup.registrationEnabled;
+ delete res4.data.parentGroup.teams;
expect(res4.data.parentGroup).toEqual(added_org2)
});
});
\ No newline at end of file
diff --git a/src/tests/runners/runner_get.spec.ts b/src/tests/runners/runner_get.spec.ts
index 1b71abd..b80afc2 100644
--- a/src/tests/runners/runner_get.spec.ts
+++ b/src/tests/runners/runner_get.spec.ts
@@ -129,7 +129,7 @@ describe('GET /api/teams/:id/runners after adding', () => {
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json")
});
- it('check if scans was added via the orgs/runners endpoint.', async () => {
+ it('check if runner was added via the teams/runners endpoint.', async () => {
const res = await axios.get(base + '/api/teams/' + added_team.id + "/runners", axios_config);
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
diff --git a/src/tests/runners/runner_update.spec.ts b/src/tests/runners/runner_update.spec.ts
index 8f8b5cf..8ae2aa3 100644
--- a/src/tests/runners/runner_update.spec.ts
+++ b/src/tests/runners/runner_update.spec.ts
@@ -49,6 +49,7 @@ describe('Update runner name after adding', () => {
delete res3.data.group.key;
delete res3.data.group.registrationEnabled;
delete runnercopy.group.registrationEnabled;
+ delete res3.data.group.teams;
expect(res3.data).toEqual(runnercopy);
});
});
@@ -94,6 +95,7 @@ describe('Update runner group after adding', () => {
expect(res3.headers['content-type']).toContain("application/json")
delete res3.data.group.key;
delete res3.data.group.registrationEnabled;
+ delete res3.data.group.teams;
expect(res3.data.group).toEqual(added_org_2);
});
});
diff --git a/src/tests/scans/scans_add.spec.ts b/src/tests/scans/scans_add.spec.ts
index 8a28e26..167856d 100644
--- a/src/tests/scans/scans_add.spec.ts
+++ b/src/tests/scans/scans_add.spec.ts
@@ -98,10 +98,12 @@ describe('POST /api/scans successfully', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": true
+ "valid": true,
+ "responseType": "SCAN"
});
});
it('creating a valid scan should return 200', async () => {
@@ -114,10 +116,12 @@ describe('POST /api/scans successfully', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": true
+ "valid": true,
+ "responseType": "SCAN"
});
});
it('creating a invalid scan should return 200', async () => {
@@ -130,10 +134,12 @@ describe('POST /api/scans successfully', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": false
+ "valid": false,
+ "responseType": "SCAN"
});
});
});
@@ -192,10 +198,12 @@ describe('POST /api/scans successfully via scan station', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": true
+ "valid": true,
+ "responseType": "SCAN",
});
});
it('creating a valid scan should return 200', async () => {
@@ -211,10 +219,12 @@ describe('POST /api/scans successfully via scan station', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": true
+ "valid": true,
+ "responseType": "SCAN"
});
});
it('creating a invalid scan should return 200', async () => {
@@ -230,10 +240,12 @@ describe('POST /api/scans successfully via scan station', () => {
expect(res.headers['content-type']).toContain("application/json");
delete res.data.id;
delete res.data.runner.distance;
+ delete res.data.runner.group;
expect(res.data).toEqual({
"runner": added_runner,
"distance": 200,
- "valid": false
+ "valid": false,
+ "responseType": "SCAN",
});
});
});
diff --git a/src/tests/scans/scans_get.spec.ts b/src/tests/scans/scans_get.spec.ts
index e6a08a9..d2203af 100644
--- a/src/tests/scans/scans_get.spec.ts
+++ b/src/tests/scans/scans_get.spec.ts
@@ -72,6 +72,7 @@ describe('adding + getting scans', () => {
expect(res.status).toEqual(200);
expect(res.headers['content-type']).toContain("application/json");
added_scan.runner.distance = 0;
+ delete added_scan.runner.group;
expect(res.data).toContainEqual(added_scan);
});
});
\ No newline at end of file
diff --git a/src/tests/scans/scans_update.spec.ts b/src/tests/scans/scans_update.spec.ts
index b261ee8..e711a39 100644
--- a/src/tests/scans/scans_update.spec.ts
+++ b/src/tests/scans/scans_update.spec.ts
@@ -123,12 +123,13 @@ describe('adding + updating successfilly', () => {
expect(res2.status).toEqual(200);
expect(res2.headers['content-type']).toContain("application/json")
delete res2.data.runner.distance;
+ delete res2.data.runner.group;
expect(res2.data).toEqual({
"id": added_scan.id,
"runner": added_runner,
"distance": 100,
- "valid": true
-
+ "valid": true,
+ "responseType": "SCAN"
});
});
it('valid valid update should return 200', async () => {
@@ -141,11 +142,13 @@ describe('adding + updating successfilly', () => {
expect(res2.status).toEqual(200);
expect(res2.headers['content-type']).toContain("application/json");
delete res2.data.runner.distance;
+ delete res2.data.runner.group;
expect(res2.data).toEqual({
"id": added_scan.id,
"runner": added_runner,
"distance": 100,
- "valid": false
+ "valid": false,
+ "responseType": "SCAN"
});
});
it('creating a new runner with only needed params should return 200', async () => {
@@ -169,11 +172,13 @@ describe('adding + updating successfilly', () => {
expect(res2.status).toEqual(200);
expect(res2.headers['content-type']).toContain("application/json");
delete res2.data.runner.distance;
+ delete res2.data.runner.group;
expect(res2.data).toEqual({
"id": added_scan.id,
"runner": added_runner2,
"distance": added_scan.distance,
- "valid": added_scan.valid
+ "valid": added_scan.valid,
+ "responseType": "SCAN"
});
});
});
diff --git a/src/tests/scanstations/scanstations_add.spec.ts b/src/tests/scanstations/scanstations_add.spec.ts
index e4c3570..04ae0d2 100644
--- a/src/tests/scanstations/scanstations_add.spec.ts
+++ b/src/tests/scanstations/scanstations_add.spec.ts
@@ -56,7 +56,8 @@ describe('POST /api/stations successfully', () => {
expect(res.data).toEqual({
"track": added_track,
"description": null,
- "enabled": true
+ "enabled": true,
+ "responseType": "SCANSTATION"
});
});
it('creating a station with all parameters (optional set to true/empty) should return 200', async () => {
@@ -73,7 +74,8 @@ describe('POST /api/stations successfully', () => {
expect(res.data).toEqual({
"track": added_track,
"description": null,
- "enabled": true
+ "enabled": true,
+ "responseType": "SCANSTATION"
});
});
it('creating a disabled station with all parameters (optional set to true/empty) should return 200', async () => {
@@ -90,7 +92,8 @@ describe('POST /api/stations successfully', () => {
expect(res.data).toEqual({
"track": added_track,
"description": null,
- "enabled": false
+ "enabled": false,
+ "responseType": "SCANSTATION"
});
});
it('creating a station with all parameters (optional set) should return 200', async () => {
@@ -107,7 +110,8 @@ describe('POST /api/stations successfully', () => {
expect(res.data).toEqual({
"track": added_track,
"description": "test station for testing",
- "enabled": true
+ "enabled": true,
+ "responseType": "SCANSTATION"
});
});
});
diff --git a/src/tests/tracks/track_add.spec.ts b/src/tests/tracks/track_add.spec.ts
index 7f39f8d..b45bb45 100644
--- a/src/tests/tracks/track_add.spec.ts
+++ b/src/tests/tracks/track_add.spec.ts
@@ -54,7 +54,8 @@ describe('POST /api/tracks successfully', () => {
expect(res.data).toEqual({
"name": "testtrack",
"distance": 200,
- "minimumLapTime": null
+ "minimumLapTime": null,
+ "responseType": "TRACK"
})
});
it('creating a track with all parameters (optional set to null) should return 200', async () => {
@@ -69,7 +70,8 @@ describe('POST /api/tracks successfully', () => {
expect(res.data).toEqual({
"name": "testtrack",
"distance": 200,
- "minimumLapTime": null
+ "minimumLapTime": null,
+ "responseType": "TRACK"
})
});
it('creating a track with all parameters should return 200', async () => {
@@ -84,7 +86,8 @@ describe('POST /api/tracks successfully', () => {
expect(res.data).toEqual({
"name": "testtrack",
"distance": 200,
- "minimumLapTime": 123
+ "minimumLapTime": 123,
+ "responseType": "TRACK"
})
});
});
diff --git a/src/tests/tracks/track_delete.spec.ts b/src/tests/tracks/track_delete.spec.ts
index cb7ae89..04a1d99 100644
--- a/src/tests/tracks/track_delete.spec.ts
+++ b/src/tests/tracks/track_delete.spec.ts
@@ -35,7 +35,8 @@ describe('DETELE track', () => {
expect(res2.data).toEqual({
"name": "testtrack",
"distance": 200,
- "minimumLapTime": null
+ "minimumLapTime": null,
+ "responseType": "TRACK"
});
});
it('check if track really was deleted', async () => {