From c7860b76e123e01a09f2b3c44008e1652257d7f6 Mon Sep 17 00:00:00 2001 From: rajdip-b Date: Sat, 3 Aug 2024 12:45:41 +0530 Subject: [PATCH] chore: Fixed api client tests and rearranged controllers --- packages/api-client/package-lock.json | 4 +- packages/api-client/package.json | 2 +- .../{environment => }/environment.ts | 8 +- .../src/controllers/{event => }/event.ts | 9 +- .../src/controllers/{secret => }/secret.ts | 12 ++- packages/api-client/tests/environment.spec.ts | 18 ++-- packages/api-client/tests/event.spec.ts | 10 +- packages/api-client/tests/secret.spec.ts | 97 +++++++++++++++---- packages/api-client/tsconfig.json | 2 +- 9 files changed, 110 insertions(+), 52 deletions(-) rename packages/api-client/src/controllers/{environment => }/environment.ts (92%) rename packages/api-client/src/controllers/{event => }/event.ts (68%) rename packages/api-client/src/controllers/{secret => }/secret.ts (94%) diff --git a/packages/api-client/package-lock.json b/packages/api-client/package-lock.json index 8f8b3168..46bcb324 100644 --- a/packages/api-client/package-lock.json +++ b/packages/api-client/package-lock.json @@ -1,11 +1,11 @@ { - "name": "api-client", + "name": "@keyshade/api-client", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "api-client", + "name": "@keyshade/api-client", "version": "1.0.0" } } diff --git a/packages/api-client/package.json b/packages/api-client/package.json index cc2e290a..19bc6929 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -9,7 +9,7 @@ "watch": "tsc -w", "start": "node dist/index.js", "dev": "npx tsc && node dist/index.js", - "test": "cross-env BACKEND_URL=http://localhost:4200 jest", + "test": "cross-env BACKEND_URL=http://localhost:4200 jest --runInBand", "lint": "eslint \"{src,tests}/**/*.ts\" --fix", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"" }, diff --git a/packages/api-client/src/controllers/environment/environment.ts b/packages/api-client/src/controllers/environment.ts similarity index 92% rename from packages/api-client/src/controllers/environment/environment.ts rename to packages/api-client/src/controllers/environment.ts index ca57000b..56c70a7f 100644 --- a/packages/api-client/src/controllers/environment/environment.ts +++ b/packages/api-client/src/controllers/environment.ts @@ -1,6 +1,6 @@ -import { ClientResponse } from '../../types/index.types' -import { APIClient } from '../../core/client' -import { parseResponse } from '../../core/response-parser' +import { ClientResponse } from '../types/index.types' +import { APIClient } from '../core/client' +import { parseResponse } from '../core/response-parser' import { CreateEnvironmentRequest, CreateEnvironmentResponse, @@ -12,7 +12,7 @@ import { GetEnvironmentByIdResponse, UpdateEnvironmentRequest, UpdateEnvironmentResponse -} from '../../types/environment.types' +} from '../types/environment.types' export default class EnvironmentController { private apiClient: APIClient diff --git a/packages/api-client/src/controllers/event/event.ts b/packages/api-client/src/controllers/event.ts similarity index 68% rename from packages/api-client/src/controllers/event/event.ts rename to packages/api-client/src/controllers/event.ts index 19005022..f35e5a3d 100644 --- a/packages/api-client/src/controllers/event/event.ts +++ b/packages/api-client/src/controllers/event.ts @@ -1,7 +1,7 @@ -import { GetEventsRequest, GetEventsResponse } from '../../types/event.types' -import { APIClient } from '../../core/client' -import { ClientResponse } from '../../types/index.types' -import { parseResponse } from '../../core/response-parser' +import { GetEventsRequest, GetEventsResponse } from '../types/event.types' +import { APIClient } from '../core/client' +import { ClientResponse } from '../types/index.types' +import { parseResponse } from '../core/response-parser' export default class EventController { private apiClient: APIClient @@ -18,6 +18,7 @@ export default class EventController { `/api/event/${request.workspaceId}?source=${request.source}`, headers ) + return await parseResponse(response) } } diff --git a/packages/api-client/src/controllers/secret/secret.ts b/packages/api-client/src/controllers/secret.ts similarity index 94% rename from packages/api-client/src/controllers/secret/secret.ts rename to packages/api-client/src/controllers/secret.ts index 69b76931..0cf22058 100644 --- a/packages/api-client/src/controllers/secret/secret.ts +++ b/packages/api-client/src/controllers/secret.ts @@ -1,6 +1,6 @@ -import { APIClient } from '../../core/client' -import { ClientResponse } from 'src/types/index.types' -import { parseResponse } from '../../core/response-parser' +import { APIClient } from '../core/client' +import { ClientResponse } from '../types/index.types' +import { parseResponse } from '../core/response-parser' import { CreateSecretRequest, CreateSecretResponse, @@ -14,7 +14,7 @@ import { RollBackSecretResponse, UpdateSecretRequest, UpdateSecretResponse -} from '../../types/secret.types' +} from '../types/secret.types' export default class SecretController { private apiClient: APIClient @@ -32,8 +32,10 @@ export default class SecretController { request, headers ) + return await parseResponse(response) } + async updateSecret( request: UpdateSecretRequest, headers?: Record @@ -56,6 +58,7 @@ export default class SecretController { request, headers ) + return await parseResponse(response) } @@ -67,6 +70,7 @@ export default class SecretController { `/api/secret/${request.secretId}`, headers ) + return await parseResponse(response) } diff --git a/packages/api-client/tests/environment.spec.ts b/packages/api-client/tests/environment.spec.ts index c652f67d..b3b3875e 100644 --- a/packages/api-client/tests/environment.spec.ts +++ b/packages/api-client/tests/environment.spec.ts @@ -1,7 +1,7 @@ import { APIClient } from '../src/core/client' -import EnvironmentController from '../src/controllers/environment/environment' +import EnvironmentController from '../src/controllers/environment' -describe('Get Environments Tests', () => { +describe('Environments Controller Tests', () => { const backendUrl = process.env.BACKEND_URL const client = new APIClient(backendUrl) @@ -10,7 +10,7 @@ describe('Get Environments Tests', () => { const email = 'johndoe@example.com' let projectId: string | null let workspaceId: string | null - let environment: any + let environmentId: string | null beforeAll(async () => { //Create the user's workspace @@ -66,12 +66,12 @@ describe('Get Environments Tests', () => { ) ).json()) as any - environment = createEnvironmentResponse + environmentId = createEnvironmentResponse.id }) afterEach(async () => { // Delete the environment - await client.delete(`/api/environment/${environment.id}`, { + await client.delete(`/api/environment/${environmentId}`, { 'x-e2e-user-email': email }) }) @@ -112,7 +112,7 @@ describe('Get Environments Tests', () => { const environmentResponse = ( await environmentController.getEnvironmentById( { - id: environment.id + id: environmentId }, { 'x-e2e-user-email': email @@ -120,7 +120,7 @@ describe('Get Environments Tests', () => { ) ).data - expect(environmentResponse.id).toBe(environment.id) + expect(environmentResponse.id).toBe(environmentId) expect(environmentResponse.name).toBe('Dev') }) @@ -157,7 +157,7 @@ describe('Get Environments Tests', () => { const updateEnvironmentResponse = ( await environmentController.updateEnvironment( { - id: environment.id, + id: environmentId, name: 'Prod' }, { @@ -169,7 +169,7 @@ describe('Get Environments Tests', () => { expect(updateEnvironmentResponse.name).toBe('Prod') const fetchEnvironmentResponse = (await ( - await client.get(`/api/environment/${environment.id}`, { + await client.get(`/api/environment/${environmentId}`, { 'x-e2e-user-email': email }) ).json()) as any diff --git a/packages/api-client/tests/event.spec.ts b/packages/api-client/tests/event.spec.ts index 3d0b0120..2635cea7 100644 --- a/packages/api-client/tests/event.spec.ts +++ b/packages/api-client/tests/event.spec.ts @@ -1,5 +1,5 @@ import { APIClient } from '../src/core/client' -import EventController from '../src/controllers/event/event' +import EventController from '../src/controllers/event' export enum EventSource { SECRET = 'SECRET', VARIABLE = 'VARIABLE', @@ -10,7 +10,7 @@ export enum EventSource { INTEGRATION = 'INTEGRATION' } -describe('Get Event Controller', () => { +describe('Event Controller Tests', () => { const backendUrl = process.env.BACKEND_URL const client = new APIClient(backendUrl) @@ -18,8 +18,6 @@ describe('Get Event Controller', () => { const email = 'johndoe@example.com' let projectId: string | null let workspaceId: string | null - let secret: any - let variable: any let environment: any beforeAll(async () => { @@ -35,7 +33,6 @@ describe('Get Event Controller', () => { } ) ).json()) as any - console.log(workspaceResponse) workspaceId = workspaceResponse.id }) @@ -65,7 +62,6 @@ describe('Get Event Controller', () => { { workspaceId, source: 'PROJECT' }, { 'x-e2e-user-email': email } ) - console.log(events.data.items) expect(events.data.items[0].source).toBe(EventSource.PROJECT) expect(events.data.items[0].metadata.projectId).toBe(projectId) expect(events.data.items[0].metadata.name).toBe('Project') @@ -122,7 +118,6 @@ describe('Get Event Controller', () => { expect(events.data.items[0].source).toBe('SECRET') expect(events.data.items[0].metadata.secretId).toBe(secretRepsonse.id) expect(events.data.items[0].metadata.name).toBe('My secret') - secret = secretRepsonse }) it('should fetch a Variable Event', async () => { @@ -151,6 +146,5 @@ describe('Get Event Controller', () => { expect(events.data.items[0].source).toBe('VARIABLE') expect(events.data.items[0].metadata.variableId).toBe(variableResponse.id) expect(events.data.items[0].metadata.name).toBe('My variable') - variable = variableResponse }) }) diff --git a/packages/api-client/tests/secret.spec.ts b/packages/api-client/tests/secret.spec.ts index 294ad912..a52cbf09 100644 --- a/packages/api-client/tests/secret.spec.ts +++ b/packages/api-client/tests/secret.spec.ts @@ -1,7 +1,7 @@ import { APIClient } from '../src/core/client' -import SecretController from '../src/controllers/secret/secret' +import SecretController from '../src/controllers/secret' -describe('Get Variable tests', () => { +describe('Secret Controller Tests', () => { const backendUrl = process.env.BACKEND_URL const client = new APIClient(backendUrl) @@ -10,11 +10,12 @@ describe('Get Variable tests', () => { const email = 'johndoe@example.com' let projectId: string | null let workspaceId: string | null - let environment: any - let secretId: string + let environmentId: string | null + let secretId: string | null beforeAll(async () => { //Create the user's workspace + const workspaceResponse = (await ( await client.post( '/api/workspace', @@ -26,6 +27,7 @@ describe('Get Variable tests', () => { } ) ).json()) as any + workspaceId = workspaceResponse.id // Create a project @@ -41,6 +43,7 @@ describe('Get Variable tests', () => { } ) ).json()) as any + projectId = projectResponse.id const createEnvironmentResponse = (await ( @@ -55,30 +58,53 @@ describe('Get Variable tests', () => { ) ).json()) as any - environment = createEnvironmentResponse + environmentId = createEnvironmentResponse.id }) afterAll(async () => { - // Delete the environment - await client.delete(`/api/environment/${environment.id}`, { - 'x-e2e-user-email': email - }) - // Delete the workspace await client.delete(`/api/workspace/${workspaceId}`, { 'x-e2e-user-email': email }) }) + beforeEach(async () => { + // Create a secret + const createSecretResponse = await secretController.createSecret( + { + name: 'Secret 1', + note: 'Secret 1 note', + entries: [ + { + environmentId, + value: 'Secret 1 value' + } + ], + projectId + }, + { 'x-e2e-user-email': email } + ) + + secretId = createSecretResponse.data.id + }) + + afterEach(async () => { + // Delete the secret + await secretController.deleteSecret( + { secretId }, + { 'x-e2e-user-email': email } + ) + }) + // Create a Secret it('should create a secret', async () => { const secret = await secretController.createSecret( { - name: 'Secret 1', - note: 'Secret 1 note', + name: 'Secret 2', + note: 'Secret 2 note', entries: [ { - environmentId: environment.id, + environmentId, value: 'Secret 1 value' } ], @@ -89,10 +115,15 @@ describe('Get Variable tests', () => { expect(secret.data.projectId).toBe(projectId) expect(secret.data.project.workspaceId).toBe(workspaceId) - expect(secret.data.name).toBe('Secret 1') + expect(secret.data.name).toBe('Secret 2') expect(secret.data.versions.length).toBe(1) expect(secret.error).toBe(null) - secretId = secret.data.id + + // Delete the secret + await secretController.deleteSecret( + { secretId: secret.data.id }, + { 'x-e2e-user-email': email } + ) }) // Update Name of a Secret @@ -114,7 +145,7 @@ describe('Get Variable tests', () => { entries: [ { value: 'Updated Secret 1 value', - environmentId: environment.id + environmentId } ], secretId @@ -126,11 +157,39 @@ describe('Get Variable tests', () => { // // RollBack a Particular Version of a Secret it('should roll back a version of a secret', async () => { + // Create 2 versions of the secret + await secretController.updateSecret( + { + entries: [ + { + value: 'Secret 1 value', + environmentId + } + ], + secretId + }, + { 'x-e2e-user-email': email } + ) + + await secretController.updateSecret( + { + entries: [ + { + value: 'Updated Secret 1 value', + environmentId + } + ], + secretId + }, + { 'x-e2e-user-email': email } + ) + const rollbackSecret = await secretController.rollbackSecret( - { secretId, environmentId: environment.id, version: 1 }, + { secretId, environmentId, version: 1 }, { 'x-e2e-user-email': email } ) - expect(rollbackSecret.data.count).toBe(1) + + expect(rollbackSecret.data.count).toBe(2) }) // // Get all secrets of a Project @@ -146,7 +205,7 @@ describe('Get Variable tests', () => { it('should get all secrets of an environment', async () => { const secrets: any = await secretController.getAllSecretsOfEnvironment( { - environmentId: environment.id, + environmentId, projectId: projectId }, { 'x-e2e-user-email': email } diff --git a/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json index b7b14a6a..c2ce8a99 100644 --- a/packages/api-client/tsconfig.json +++ b/packages/api-client/tsconfig.json @@ -18,6 +18,6 @@ "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true }, - "include": ["src/**/*.ts", "tests/**/*.ts"], + "include": ["src/**/*.ts", "tests/**/*.ts", "jest.config.ts"], "exclude": ["node_modules", "dist"] }