From 91336d974f3ee3a128d343e12ba8abfe4c4aa69e Mon Sep 17 00:00:00 2001 From: Berend Sliedrecht <berend@animo.id> Date: Thu, 1 Feb 2024 11:25:40 +0100 Subject: [PATCH] feat: get all tenant ids Signed-off-by: Berend Sliedrecht <berend@animo.id> --- .../__tests__/tenants.controller.spec.ts | 33 +++++++++++-------- .../src/agent/tenants/tenants.controller.ts | 22 ++++++++++--- .../src/agent/tenants/tenants.service.ts | 19 ++++++++++- apps/ssi-abstraction/test/tenants.e2e-spec.ts | 28 ++++++++++++++-- 4 files changed, 81 insertions(+), 21 deletions(-) diff --git a/apps/ssi-abstraction/src/agent/tenants/__tests__/tenants.controller.spec.ts b/apps/ssi-abstraction/src/agent/tenants/__tests__/tenants.controller.spec.ts index d2f9a73..8478656 100644 --- a/apps/ssi-abstraction/src/agent/tenants/__tests__/tenants.controller.spec.ts +++ b/apps/ssi-abstraction/src/agent/tenants/__tests__/tenants.controller.spec.ts @@ -21,21 +21,28 @@ describe('TenantsController', () => { tenantsController = moduleRef.get(TenantsController); }); - describe('resolve', () => { - it('should resolve a basic did', async () => { - const result = new TenantRecord({ - config: { - label: 'my-label', - walletConfig: { key: 'some-key', id: 'some-id' }, - }, - }); - jest.spyOn(tenantsService, 'create').mockResolvedValue(result); - - const event = await tenantsController.create({ + it('create', async () => { + const result = new TenantRecord({ + config: { label: 'my-label', - }); + walletConfig: { key: 'some-key', id: 'some-id' }, + }, + }); + jest.spyOn(tenantsService, 'create').mockResolvedValue(result); - expect(event.data).toStrictEqual(result); + const event = await tenantsController.create({ + label: 'my-label', }); + + expect(event.data).toStrictEqual(result); + }); + + it('get All', async () => { + const result = ['some-id', 'another-id']; + jest.spyOn(tenantsService, 'getAllTenantIds').mockResolvedValue(result); + + const event = await tenantsController.getAllTenantIds(); + + expect(event.data).toStrictEqual(result); }); }); diff --git a/apps/ssi-abstraction/src/agent/tenants/tenants.controller.ts b/apps/ssi-abstraction/src/agent/tenants/tenants.controller.ts index 89dc001..ef867a1 100644 --- a/apps/ssi-abstraction/src/agent/tenants/tenants.controller.ts +++ b/apps/ssi-abstraction/src/agent/tenants/tenants.controller.ts @@ -1,6 +1,10 @@ import { Controller } from '@nestjs/common'; import { MessagePattern } from '@nestjs/microservices'; -import { EventTenantsCreate, EventTenantsCreateInput } from '@ocm/shared'; +import { + EventTenantsCreate, + EventTenantsCreateInput, + EventTenantsGetAllTenantIds, +} from '@ocm/shared'; import { TenantsService } from './tenants.service.js'; @@ -9,11 +13,19 @@ export class TenantsController { public constructor(private tenantsService: TenantsService) {} @MessagePattern(EventTenantsCreate.token) - public async create({ - label, - }: EventTenantsCreateInput): Promise<EventTenantsCreate> { + public async create( + options: EventTenantsCreateInput, + ): Promise<EventTenantsCreate> { return new EventTenantsCreate( - await this.tenantsService.create(label), + await this.tenantsService.create(options), + undefined, + ); + } + + @MessagePattern(EventTenantsGetAllTenantIds.token) + public async getAllTenantIds(): Promise<EventTenantsGetAllTenantIds> { + return new EventTenantsGetAllTenantIds( + await this.tenantsService.getAllTenantIds(), undefined, ); } diff --git a/apps/ssi-abstraction/src/agent/tenants/tenants.service.ts b/apps/ssi-abstraction/src/agent/tenants/tenants.service.ts index 483a64a..ddc79ff 100644 --- a/apps/ssi-abstraction/src/agent/tenants/tenants.service.ts +++ b/apps/ssi-abstraction/src/agent/tenants/tenants.service.ts @@ -1,5 +1,11 @@ import type { AppAgent } from '../agent.service.js'; +import type { + EventTenantsCreate, + EventTenantsCreateInput, + EventTenantsGetAllTenantIds, +} from '@ocm/shared'; +import { TenantRepository } from '@aries-framework/tenants/build/repository/TenantRepository.js'; import { Injectable } from '@nestjs/common'; import { AgentService } from '../agent.service.js'; @@ -12,7 +18,18 @@ export class TenantsService { this.agent = agentService.agent; } - public async create(label: string) { + public async create({ + label, + }: EventTenantsCreateInput): Promise<EventTenantsCreate['data']> { return await this.agent.modules.tenants.createTenant({ config: { label } }); } + + public async getAllTenantIds(): Promise<EventTenantsGetAllTenantIds['data']> { + const tenantRepository = + this.agent.dependencyManager.resolve(TenantRepository); + + const tenantRecords = await tenantRepository.getAll(this.agent.context); + + return tenantRecords.map((t) => t.id); + } } diff --git a/apps/ssi-abstraction/test/tenants.e2e-spec.ts b/apps/ssi-abstraction/test/tenants.e2e-spec.ts index a0d372f..8924e04 100644 --- a/apps/ssi-abstraction/test/tenants.e2e-spec.ts +++ b/apps/ssi-abstraction/test/tenants.e2e-spec.ts @@ -1,10 +1,13 @@ import type { INestApplication } from '@nestjs/common'; import type { ClientProxy } from '@nestjs/microservices'; -import type { EventTenantsCreateInput } from '@ocm/shared'; +import type { + EventTenantsCreateInput, + EventTenantsGetAllTenantIdsInput, +} from '@ocm/shared'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { Test } from '@nestjs/testing'; -import { EventTenantsCreate } from '@ocm/shared'; +import { EventTenantsGetAllTenantIds, EventTenantsCreate } from '@ocm/shared'; import { firstValueFrom } from 'rxjs'; import { AgentModule } from '../src/agent/agent.module.js'; @@ -62,4 +65,25 @@ describe('Tenants', () => { }, }); }); + + it(EventTenantsGetAllTenantIds.token, async () => { + const createResponse$ = client.send< + EventTenantsCreate, + EventTenantsCreateInput + >(EventTenantsCreate.token, { + label: 'my-new-tenant', + }); + + await firstValueFrom(createResponse$); + + const response$ = client.send< + EventTenantsGetAllTenantIds, + EventTenantsGetAllTenantIdsInput + >(EventTenantsGetAllTenantIds.token, {}); + + const response = await firstValueFrom(response$); + const eventInstance = EventTenantsGetAllTenantIds.fromEvent(response); + + expect(eventInstance.instance.length).toBeGreaterThanOrEqual(1); + }); }); -- GitLab