@studyportals/campaign-management-api-interface 0.12.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.vscode/launch.json +36 -0
  2. package/.vscode/settings.json +4 -0
  3. package/.vscode/tasks.json +41 -0
  4. package/README.md +2 -0
  5. package/{index.d.ts → index.ts} +21 -1
  6. package/jest.config.single-file.json +20 -0
  7. package/jest.config.unit.json +19 -0
  8. package/package.json +2 -2
  9. package/src/auditor-campaign-management-api.client.ts +54 -0
  10. package/src/campaign-management-api.client.ts +68 -0
  11. package/src/domain/auditor/campaigns/geotargeting.entities.ts +20 -0
  12. package/src/domain/auditor/enums/auditor-entity-type.enum.ts +3 -0
  13. package/src/domain/auditor/enums/{auditor-operation.enum.d.ts → auditor-operation.enum.ts} +2 -2
  14. package/src/domain/auditor/get-auditor.dto.ts +33 -0
  15. package/src/domain/campaign/CampaignsEntitiesConfig.dto.ts +7 -0
  16. package/src/private-campaign-management-api.client.ts +80 -0
  17. package/tests-u/domain/auditor/auditor-campaign-management-api-client.test.ts +99 -0
  18. package/tests-u/domain/auditor/enums/auditor-entity-type-enum.test.ts +22 -0
  19. package/tests-u/domain/auditor/enums/auditor-operation-enum.test.ts +34 -0
  20. package/tests-u/domain/auditor/get-auditor-entity.test.ts +34 -0
  21. package/tests-u/domain/campaign/campaign-management-api-client.test.ts +111 -0
  22. package/tests-u/domain/campaign/private-campaign-management-api-client.test.ts +114 -0
  23. package/tsconfig.json +39 -0
  24. package/index.js +0 -20
  25. package/index.js.map +0 -1
  26. package/src/auditor-campaign-management-api.client.d.ts +0 -12
  27. package/src/auditor-campaign-management-api.client.js +0 -56
  28. package/src/auditor-campaign-management-api.client.js.map +0 -1
  29. package/src/campaign-management-api.client.d.ts +0 -13
  30. package/src/campaign-management-api.client.js +0 -68
  31. package/src/campaign-management-api.client.js.map +0 -1
  32. package/src/domain/auditor/campaigns/geotargeting.entities.d.ts +0 -14
  33. package/src/domain/auditor/campaigns/geotargeting.entities.js +0 -11
  34. package/src/domain/auditor/campaigns/geotargeting.entities.js.map +0 -1
  35. package/src/domain/auditor/enums/auditor-entity-type.enum.d.ts +0 -3
  36. package/src/domain/auditor/enums/auditor-entity-type.enum.js +0 -8
  37. package/src/domain/auditor/enums/auditor-entity-type.enum.js.map +0 -1
  38. package/src/domain/auditor/enums/auditor-operation.enum.js +0 -14
  39. package/src/domain/auditor/enums/auditor-operation.enum.js.map +0 -1
  40. package/src/domain/auditor/get-auditor.dto.d.ts +0 -13
  41. package/src/domain/auditor/get-auditor.dto.js +0 -17
  42. package/src/domain/auditor/get-auditor.dto.js.map +0 -1
  43. package/src/domain/campaign/CampaignsEntitiesConfig.dto.d.ts +0 -7
  44. package/src/domain/campaign/CampaignsEntitiesConfig.dto.js +0 -10
  45. package/src/domain/campaign/CampaignsEntitiesConfig.dto.js.map +0 -1
  46. package/src/private-campaign-management-api.client.d.ts +0 -18
  47. package/src/private-campaign-management-api.client.js +0 -79
  48. package/src/private-campaign-management-api.client.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "type": "node",
6
+ "request": "launch",
7
+ "name": "Jest watch current file",
8
+ "program": "${workspaceFolder}/node_modules/jest-cli/bin/jest",
9
+ "args": [
10
+ "${fileBasename}",
11
+ "--verbose",
12
+ "-i",
13
+ "--no-cache",
14
+ "--watchAll"
15
+ ],
16
+ "console": "integratedTerminal",
17
+ "internalConsoleOptions": "neverOpen"
18
+ },
19
+ {
20
+ "name": "TypeScript - All Tests Files",
21
+ "type": "node",
22
+ "request": "launch",
23
+ "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
24
+ "args": [
25
+ "--require",
26
+ "ts-node/register",
27
+ "--colors",
28
+ "${relativeFile}",
29
+ "--no-timeouts",
30
+ "src/*-tests/*.test.ts"
31
+ ],
32
+ "cwd": "${workspaceRoot}",
33
+ "protocol": "inspector"
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "typescript.preferences.importModuleSpecifier": "relative",
3
+ "javascript.preferences.importModuleSpecifier": "relative"
4
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "runCurrentTest",
6
+ "type": "shell",
7
+ "command": "cross-env NODE_ENV=tst npx jest -c jest.config.single-file.json --maxWorkers=1 \"${relativeFile}\"",
8
+ "group": "test",
9
+ "presentation": {
10
+ "echo": true,
11
+ "reveal": "always",
12
+ "focus": true,
13
+ "panel": "dedicated"
14
+ }
15
+ },
16
+ {
17
+ "label": "runCurrentTestWatch",
18
+ "type": "shell",
19
+ "command": "npx jest -c jest.config.unit.json --maxWorkers=1 --watch \"${relativeFile}\"",
20
+ "group": "test",
21
+ "presentation": {
22
+ "echo": true,
23
+ "reveal": "always",
24
+ "focus": true,
25
+ "panel": "dedicated"
26
+ }
27
+ },
28
+ {
29
+ "label": "runCurrentTestClearCache",
30
+ "type": "shell",
31
+ "command": "npx jest -c jest.config.unit.json --maxWorkers=1 --clearCache",
32
+ "group": "test",
33
+ "presentation": {
34
+ "echo": true,
35
+ "reveal": "always",
36
+ "focus": true,
37
+ "panel": "dedicated"
38
+ }
39
+ },
40
+ ]
41
+ }
package/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # Campaign-Management-API-Interface
2
+ This is the front-end client for the CMA (Campaign Management API) and it's interfaces.
@@ -6,4 +6,24 @@ import { GetAuditorDto } from "./src/domain/auditor/get-auditor.dto";
6
6
  import { CampaignsEntitiesConfigDto } from "./src/domain/campaign/CampaignsEntitiesConfig.dto";
7
7
  import { NumberMap, Pricing, ICampaignAuditorData } from "./src/domain/auditor/campaigns/geotargeting.entities";
8
8
  import { PrivateCampaignManagementAPIClient } from "./src/private-campaign-management-api.client";
9
- export { AuditorCampaignManagementAPIClient, CampaignManagementAPIClient, PrivateCampaignManagementAPIClient, AuditorEntityType, AuditorOperation, GetAuditorDto, CampaignsEntitiesConfigDto, NumberMap, Pricing, ICampaignAuditorData };
9
+
10
+ export {
11
+ // Clients
12
+ AuditorCampaignManagementAPIClient,
13
+ CampaignManagementAPIClient,
14
+ PrivateCampaignManagementAPIClient,
15
+
16
+ // Enums
17
+ AuditorEntityType,
18
+ AuditorOperation,
19
+
20
+ // Output Dto
21
+ GetAuditorDto,
22
+
23
+ // Input Dto
24
+ CampaignsEntitiesConfigDto,
25
+
26
+ NumberMap,
27
+ Pricing,
28
+ ICampaignAuditorData
29
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "moduleFileExtensions": [
3
+ "js",
4
+ "json",
5
+ "ts"
6
+ ],
7
+ "rootDir": "",
8
+ "transform": {
9
+ "^.+\\.(t|j)s$": "ts-jest"
10
+ },
11
+ "collectCoverageFrom": [
12
+ "src/**/*.(t|j)s"
13
+ ],
14
+ "coverageDirectory": "../coverage",
15
+ "testEnvironment": "node",
16
+ "testMatch": [
17
+ "<rootDir>/tests-u/**/*\\.(spec|test)\\.ts",
18
+ "<rootDir>/tests-i/**/*\\.(spec|test)\\.ts"
19
+ ]
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "moduleFileExtensions": [
3
+ "js",
4
+ "json",
5
+ "ts"
6
+ ],
7
+ "rootDir": "",
8
+ "transform": {
9
+ "^.+\\.(t|j)s$": "ts-jest"
10
+ },
11
+ "collectCoverageFrom": [
12
+ "src/**/*.(t|j)s"
13
+ ],
14
+ "coverageDirectory": "../coverage",
15
+ "testEnvironment": "node",
16
+ "testMatch": [
17
+ "<rootDir>/tests-u/**/*\\.(spec|test)\\.ts"
18
+ ]
19
+ }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@studyportals/campaign-management-api-interface",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "scripts": {
5
5
  "compile": "rm -fR bin && npx tsc",
6
6
  "test-u": "jest -c jest.config.unit.json --silent --maxWorkers=1",
7
7
  "test-i": "nyc mocha src tests-i",
8
8
  "prepare-deployment": "npm run test-u && npm run compile && cp package.json bin/package.json && rm -fR bin/tests-u",
9
- "deploy": "npm run prepare-deployment && npm publish bin --access=public",
9
+ "deploy": "npm run prepare-deployment && npm publish --access=public",
10
10
  "deploy-patch": "npm version patch && npm run deploy",
11
11
  "deploy-minor": "npm version minor && npm run deploy",
12
12
  "deploy-major": "npm version major && npm run deploy",
@@ -0,0 +1,54 @@
1
+ import "reflect-metadata";
2
+
3
+ import { SuperAgentRequest } from "superagent";
4
+ import { GetAuditorDto } from "./domain/auditor/get-auditor.dto";
5
+ import { AuditorOperation } from "./domain/auditor/enums/auditor-operation.enum";
6
+ import { injectable } from "inversify";
7
+
8
+ import * as superagent from "superagent";
9
+
10
+ @injectable()
11
+ export class AuditorCampaignManagementAPIClient {
12
+ public constructor(
13
+ private readonly baseUrl: string
14
+ ) { }
15
+
16
+ public async getCampaignAuditorData(campaignID: number, jwt = ""): Promise<GetAuditorDto[]> {
17
+ const result = await this.getRequest(`auditor/campaigns/${campaignID}`, jwt);
18
+ const getAuditorDtos = result.body as GetAuditorDto[];
19
+
20
+ return getAuditorDtos;
21
+ }
22
+
23
+ public async storeCampaignAuditorData(operation: AuditorOperation, campaignID: number, username: string, isUserAction: boolean, data: any, jwt = ""): Promise<GetAuditorDto> {
24
+ const sendData = {
25
+ "operation": operation,
26
+ "entityID": campaignID,
27
+ "username": username,
28
+ "isUserAction": isUserAction,
29
+ "data": data
30
+ };
31
+
32
+ const result = await this.postRequest(`auditor/campaigns`, sendData, jwt);
33
+
34
+ return result.body as GetAuditorDto;
35
+ }
36
+
37
+
38
+ private async getRequest(relative: string = "", jwt = ""): Promise<SuperAgentRequest> {
39
+ return await superagent.get(this.buildBaseUrl(relative))
40
+ .set("Content-Type", "application/json")
41
+ .set("Authorization", jwt);
42
+ }
43
+
44
+ private async postRequest(relative: string = "", data: any, jwt = ""): Promise<SuperAgentRequest> {
45
+ return await superagent.post(this.buildBaseUrl(relative))
46
+ .set("Content-Type", "application/json")
47
+ .set("Authorization", jwt)
48
+ .send(data);
49
+ }
50
+
51
+ private buildBaseUrl(relative: string): string {
52
+ return `${this.baseUrl}/${relative}`;
53
+ }
54
+ }
@@ -0,0 +1,68 @@
1
+ import "reflect-metadata";
2
+
3
+ import { SuperAgentRequest } from "superagent";
4
+ import { injectable } from "inversify";
5
+ import { CampaignsEntitiesConfigDto } from "./domain/campaign/CampaignsEntitiesConfig.dto";
6
+
7
+ import * as superagent from "superagent";
8
+
9
+ @injectable()
10
+ export class CampaignManagementAPIClient {
11
+ public constructor(
12
+ private readonly baseUrl: string
13
+ ) { }
14
+
15
+ public async addCampaignsEntitiesConfigs(campaignID: number, campaignsEntitiesConfigs: CampaignsEntitiesConfigDto[]): Promise<any> {
16
+ const path = `campaigns/add-campaigns-entities-configs`;
17
+ const data = {
18
+ campaignsEntitiesConfigs: campaignsEntitiesConfigs,
19
+ campaignID: campaignID
20
+ };
21
+
22
+ return await this.postRequest(path, data);
23
+ }
24
+
25
+ public async removeCampaignsEntitiesConfigsByID(campaignID: number, campaignsEntitiesConfigsIDs: number[]): Promise<any> {
26
+ const path = `campaigns/remove-campaigns-entities-configs`;
27
+ const data = { campaignsEntitiesConfigsIDs: campaignsEntitiesConfigsIDs, campaignID: campaignID };
28
+
29
+ return await this.postRequest(path, data);
30
+ }
31
+
32
+ public async clearCampaignsEntitiesConfigsByCampaignID(campaignID: number): Promise<any> {
33
+ const path = `campaigns/clear-campaigns-entities-configs`;
34
+ const data = { campaignID: campaignID };
35
+
36
+ return await this.postRequest(path, data);
37
+ }
38
+
39
+ public async setEntitiesBasic(campaignID: number, organisationIDs: number[], studyIDs: number[]): Promise<any> {
40
+ const path = `campaigns/set-entities-basic`;
41
+ const data = {
42
+ organisationIDs: organisationIDs,
43
+ studyIDs: studyIDs,
44
+ campaignID: campaignID
45
+ };
46
+
47
+ return await this.postRequest(path, data);
48
+ }
49
+
50
+ public async setEntitiesPremium(campaignID: number, organisationIDs: number[], studyIDs: number[]): Promise<any> {
51
+ const path = `campaigns/set-entities-premium`;
52
+ const data = {
53
+ organisationIDs: organisationIDs,
54
+ studyIDs: studyIDs,
55
+ campaignID: campaignID
56
+ };
57
+
58
+ return await this.postRequest(path, data);
59
+ }
60
+
61
+ private async postRequest(relative: string = "", data: any): Promise<SuperAgentRequest> {
62
+ return await superagent.post(this.buildBaseUrl(relative)).set("Content-Type", "application/json").send(data);
63
+ }
64
+
65
+ private buildBaseUrl(relative: string): string {
66
+ return `${this.baseUrl}/${relative}`;
67
+ }
68
+ }
@@ -0,0 +1,20 @@
1
+ interface NumberMap { [key: string]: number; }
2
+
3
+ interface ICampaignAuditorData {
4
+ geo: any[];
5
+ pricing: Pricing;
6
+ geo_remainders: NumberMap;
7
+ }
8
+
9
+ class Pricing {
10
+ public constructor(
11
+ public s: NumberMap = {},
12
+ public o: NumberMap = {}
13
+ ) {}
14
+ }
15
+
16
+ export {
17
+ ICampaignAuditorData,
18
+ NumberMap,
19
+ Pricing
20
+ };
@@ -0,0 +1,3 @@
1
+ export enum AuditorEntityType {
2
+ CAMPAIGN = "campaign"
3
+ }
@@ -1,4 +1,4 @@
1
- export declare enum AuditorOperation {
1
+ export enum AuditorOperation {
2
2
  CLEANUP = "cleanup",
3
3
  UPDATE = "update",
4
4
  CREATE = "create",
@@ -6,4 +6,4 @@ export declare enum AuditorOperation {
6
6
  UNLINK = "unlink",
7
7
  DELETE = "delete",
8
8
  ENDOR = "endor"
9
- }
9
+ }
@@ -0,0 +1,33 @@
1
+ import { AuditorEntityType } from "./enums/auditor-entity-type.enum";
2
+ import { AuditorOperation } from "./enums/auditor-operation.enum";
3
+
4
+ export class GetAuditorDto {
5
+ public readonly id: number;
6
+ public readonly auditTime: string
7
+ public readonly operation: AuditorOperation
8
+ public readonly entityID: number
9
+ public readonly entityType: AuditorEntityType
10
+ public readonly username: string
11
+ public readonly isUserAction: boolean
12
+ public readonly data: any
13
+
14
+ public constructor(
15
+ id: number,
16
+ auditTime: string,
17
+ operation: AuditorOperation,
18
+ entityID: number,
19
+ entityType: AuditorEntityType,
20
+ username: string,
21
+ isUserAction: boolean,
22
+ data: any
23
+ ) {
24
+ this.id = id;
25
+ this.auditTime = auditTime;
26
+ this.operation = operation;
27
+ this.entityID = entityID;
28
+ this.entityType = entityType;
29
+ this.username = username;
30
+ this.isUserAction = isUserAction;
31
+ this.data = data;
32
+ }
33
+ }
@@ -0,0 +1,7 @@
1
+ export class CampaignsEntitiesConfigDto {
2
+ public campaign_id: number;
3
+ public sp_id: number;
4
+ public product_id: number;
5
+ public product2_id: number | null = null;
6
+ public type: string;
7
+ }
@@ -0,0 +1,80 @@
1
+ import "reflect-metadata";
2
+
3
+ import { SuperAgentRequest } from "superagent";
4
+ import { injectable } from "inversify";
5
+ import { CampaignsEntitiesConfigDto } from "./domain/campaign/CampaignsEntitiesConfig.dto";
6
+ import { ISuperAgentRequestFactory, SignedRequestSender } from "@studyportals/mb-platform-http-requests";
7
+
8
+ @injectable()
9
+ export class PrivateCampaignManagementAPIClient {
10
+ public constructor(
11
+ private readonly superAgentRequestFactory: ISuperAgentRequestFactory,
12
+ private readonly requestSender: SignedRequestSender,
13
+ private readonly baseUrl: string
14
+ ) { }
15
+
16
+ public async addCampaignsEntitiesConfigs(campaignID: number, campaignsEntitiesConfigs: CampaignsEntitiesConfigDto[]): Promise<any> {
17
+ const path = `private/campaigns/add-campaigns-entities-configs`;
18
+ const data = {
19
+ campaignsEntitiesConfigs: campaignsEntitiesConfigs,
20
+ campaignID: campaignID
21
+ };
22
+
23
+ return await this.postRequest(path, data);
24
+ }
25
+
26
+ public async removeCampaignsEntitiesConfigsByID(campaignID: number, campaignsEntitiesConfigsIDs: number[]): Promise<any> {
27
+ const path = `private/campaigns/remove-campaigns-entities-configs`;
28
+ const data = { campaignsEntitiesConfigsIDs: campaignsEntitiesConfigsIDs, campaignID: campaignID };
29
+
30
+ return await this.postRequest(path, data);
31
+ }
32
+
33
+ public async clearCampaignsEntitiesConfigsByCampaignID(campaignID: number): Promise<any> {
34
+ const path = `private/campaigns/clear-campaigns-entities-configs`;
35
+ const data = { campaignID: campaignID };
36
+
37
+ return await this.postRequest(path, data);
38
+ }
39
+
40
+ public async setEntitiesBasic(campaignID: number, organisationIDs: number[], studyIDs: number[]): Promise<any> {
41
+ const path = `private/campaigns/set-entities-basic`;
42
+ const data = {
43
+ organisationIDs: organisationIDs,
44
+ studyIDs: studyIDs,
45
+ campaignID: campaignID
46
+ };
47
+
48
+ return await this.postRequest(path, data);
49
+ }
50
+
51
+ public async setEntitiesPremium(campaignID: number, organisationIDs: number[], studyIDs: number[]): Promise<any> {
52
+ const path = `private/campaigns/set-entities-premium`;
53
+ const data = {
54
+ organisationIDs: organisationIDs,
55
+ studyIDs: studyIDs,
56
+ campaignID: campaignID
57
+ };
58
+
59
+ return await this.postRequest(path, data);
60
+ }
61
+
62
+ private async postRequest(relative: string = "", data: any): Promise<any> {
63
+ const request = this.createPostRequest(relative);
64
+ return await this.sendRequest(request, data);
65
+ }
66
+
67
+ private createPostRequest(relative: string = ""): SuperAgentRequest {
68
+ const url = this.buildBaseUrl(relative);
69
+ return this.superAgentRequestFactory.post(url);
70
+ }
71
+
72
+ private async sendRequest(request: SuperAgentRequest, payload: any): Promise<any> {
73
+ request.send(payload);
74
+ return await this.requestSender.send(request);
75
+ }
76
+
77
+ private buildBaseUrl(relative: string): string {
78
+ return `${this.baseUrl}/${relative}`;
79
+ }
80
+ }
@@ -0,0 +1,99 @@
1
+ import { suite, test } from "@testdeck/jest";
2
+ import { MockProxy, mock } from "jest-mock-extended";
3
+ import { assert } from "chai";
4
+ import { AuditorCampaignManagementAPIClient } from "../../../src/auditor-campaign-management-api.client";
5
+ import { IRequestSender, ISuperAgentRequestFactory, RequestSender } from "@studyportals/mb-platform-http-requests";
6
+ import { SuperAgentRequest } from "superagent";
7
+ import { AuditorOperation } from "../../../src/domain/auditor/enums/auditor-operation.enum";
8
+ import * as superagent from "superagent";
9
+
10
+
11
+ const superagentMock = require("superagent-mocker")(superagent);
12
+
13
+ @suite
14
+ class AuditorCampaignManagementAPIClientTest {
15
+ private auditorCampaignManagementAPIClient: AuditorCampaignManagementAPIClient;
16
+ private mockedRequestSender: MockProxy<IRequestSender> = mock<IRequestSender>();
17
+ private mockedRequest: MockProxy<SuperAgentRequest> = mock<SuperAgentRequest>();
18
+ private mockedSuperAgentRequestFactory: MockProxy<ISuperAgentRequestFactory> = mock<ISuperAgentRequestFactory>();
19
+ private mockedBaseUrl = "SomeBaseUrl";
20
+
21
+ public before() {
22
+ this.mockedSuperAgentRequestFactory.get.mockReturnValue(this.mockedRequest);
23
+ this.mockedSuperAgentRequestFactory.post.mockReturnValue(this.mockedRequest);
24
+
25
+ this.auditorCampaignManagementAPIClient = new AuditorCampaignManagementAPIClient(this.mockedBaseUrl);
26
+ }
27
+
28
+ @test()
29
+ public async getCampaignAuditorData__CorrectlyCalled() {
30
+ const receivedAuditorData = [
31
+ {
32
+ "id": 17428964,
33
+ "auditTime": "2023-00-00 13:55:09",
34
+ "operation": "update",
35
+ "entityID": 1,
36
+ "entityType": "campaign",
37
+ "username": "Jens Testing",
38
+ "isUserAction": true,
39
+ "data": "{\"geo\":[{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}}],\"pricing\":{\"s\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000},\"o\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000}},\"cpm\":{\"s\":{\"p\":1000,\"b\":2000},\"o\":{\"p\":1000,\"b\":2000}}}"
40
+ },
41
+ {
42
+ "id": 17428967,
43
+ "auditTime": "2023-00-00 14:55:54",
44
+ "operation": "update",
45
+ "entityID": 1,
46
+ "entityType": "campaign",
47
+ "username": "Jens Testing",
48
+ "isUserAction": true,
49
+ "data": "{\"geo\":[{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}}],\"pricing\":{\"s\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000},\"o\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000}},\"cpm\":{\"s\":{\"p\":1000,\"b\":2000},\"o\":{\"p\":1000,\"b\":2000}}}"
50
+ }
51
+ ];
52
+ this.mockedRequestSender.sendAndExtractBody.mockResolvedValue(receivedAuditorData);
53
+
54
+ const campaignID = 1;
55
+ superagentMock.get(`${this.mockedBaseUrl}/auditor/campaigns/${campaignID}`, () => {
56
+ return {
57
+ body: receivedAuditorData
58
+ }
59
+ });
60
+
61
+ const result = await this.auditorCampaignManagementAPIClient.getCampaignAuditorData(campaignID);
62
+
63
+ assert.equal(result[0].id, receivedAuditorData[0].id);
64
+ assert.equal(result[1].id, receivedAuditorData[1].id);
65
+ }
66
+
67
+ @test()
68
+ public async storeCampaignAuditorData__CorrectlyCalled() {
69
+ const sendData = {
70
+ "operation": "update",
71
+ "entityID": 1,
72
+ "username": "SomeName",
73
+ "isUserAction": true,
74
+ "data": {"some":"data"}
75
+ };
76
+
77
+ const id = 17428967;
78
+ const receivedData = {
79
+ "id": id,
80
+ "auditTime": "2023-00-00 14:55:54",
81
+ "operation": "update",
82
+ "entityID": 1,
83
+ "entityType": "campaign",
84
+ "username": "Jens Testing",
85
+ "isUserAction": true,
86
+ "data": "{\"geo\":[{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}},{\"s\":10000,\"o\":10000,\"c\":{\"sp\":1000,\"lp\":2000,\"p\":3000,\"b\":4000}}],\"pricing\":{\"s\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000},\"o\":{\"100\":1000,\"200\":2000,\"300\":3000,\"400\":3000,\"500\":3000}},\"cpm\":{\"s\":{\"p\":1000,\"b\":2000},\"o\":{\"p\":1000,\"b\":2000}}}"
87
+ }
88
+
89
+ superagentMock.post(`${this.mockedBaseUrl}/auditor/campaigns`, () => {
90
+ return {
91
+ body: receivedData
92
+ }
93
+ });
94
+
95
+ const result = await this.auditorCampaignManagementAPIClient.storeCampaignAuditorData(AuditorOperation.UPDATE, sendData.entityID, sendData.username, sendData.isUserAction, sendData.data);
96
+
97
+ assert.equal(result.id, id);
98
+ }
99
+ }
@@ -0,0 +1,22 @@
1
+ import { suite, test } from "@testdeck/jest";
2
+ import { assert } from "chai";
3
+ import { AuditorEntityType } from "../../../../src/domain/auditor/enums/auditor-entity-type.enum";
4
+
5
+ @suite
6
+ class AuditorEntityTypeEnumTest {
7
+ @test()
8
+ public hasEnumValues_ExpectedValues_Successful() {
9
+ const auditorEntityKeys = this.getAllEntityKeys();
10
+
11
+ assert.isTrue(auditorEntityKeys.length === 1);
12
+
13
+ assert.isTrue(AuditorEntityType.CAMPAIGN === "campaign");
14
+ }
15
+
16
+
17
+ private getAllEntityKeys(): string[] {
18
+ return [
19
+ "CAMPAIGN"
20
+ ]
21
+ }
22
+ }
@@ -0,0 +1,34 @@
1
+ import { suite, test } from "@testdeck/jest";
2
+ import { assert } from "chai";
3
+ import { AuditorOperation } from "../../../../src/domain/auditor/enums/auditor-operation.enum";
4
+
5
+ @suite
6
+ class AuditorOperationEnumTest {
7
+ @test()
8
+ public hasEnumValues_ExpectedValues_Successful() {
9
+ const auditorEntityKeys = this.getAllEntityKeys();
10
+
11
+ assert.isTrue(auditorEntityKeys.length === 7);
12
+
13
+ assert.isTrue(AuditorOperation.CLEANUP === "cleanup");
14
+ assert.isTrue(AuditorOperation.UPDATE === "update");
15
+ assert.isTrue(AuditorOperation.CREATE === "create");
16
+ assert.isTrue(AuditorOperation.LINK === "link");
17
+ assert.isTrue(AuditorOperation.UNLINK === "unlink");
18
+ assert.isTrue(AuditorOperation.DELETE === "delete");
19
+ assert.isTrue(AuditorOperation.ENDOR === "endor");
20
+ }
21
+
22
+
23
+ private getAllEntityKeys(): string[] {
24
+ return [
25
+ "CLEANUP",
26
+ "UPDATE",
27
+ "CREATE",
28
+ "LINK",
29
+ "UNLINK",
30
+ "DELETE",
31
+ "ENDOR"
32
+ ]
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ import { UTCDateTime } from "@studyportals/mb-platform-date-time";
2
+ import { suite, test } from "@testdeck/jest";
3
+ import { assert } from "chai";
4
+ import { AuditorEntityType } from "../../../src/domain/auditor/enums/auditor-entity-type.enum";
5
+ import { AuditorOperation } from "../../../src/domain/auditor/enums/auditor-operation.enum";
6
+ import { GetAuditorDto } from "../../../src/domain/auditor/get-auditor.dto";
7
+
8
+ @suite
9
+ class GetAuditorEntityTest {
10
+ @test()
11
+ public hasEnumValues_ExpectedValues_Successful() {
12
+ const id = 1;
13
+ const auditTime = UTCDateTime.now().toString();
14
+ const operation = AuditorOperation.CREATE;
15
+ const entityID = 2;
16
+ const entityType = AuditorEntityType.CAMPAIGN;
17
+ const username = "SomeUser";
18
+ const isUserAction = true;
19
+ const data = {
20
+ "SomeDataKey": "SomeDataValue"
21
+ };
22
+
23
+ const getAuditorEntity = new GetAuditorDto(id, auditTime, operation, entityID, entityType, username, isUserAction, data);
24
+
25
+ assert.equal(getAuditorEntity.id, id);
26
+ assert.equal(getAuditorEntity.auditTime, auditTime);
27
+ assert.equal(getAuditorEntity.operation, operation);
28
+ assert.equal(getAuditorEntity.entityID, entityID);
29
+ assert.equal(getAuditorEntity.entityType, entityType);
30
+ assert.equal(getAuditorEntity.username, username);
31
+ assert.equal(getAuditorEntity.isUserAction, isUserAction);
32
+ assert.equal(getAuditorEntity.data, data);
33
+ }
34
+ }