Skip to content

Commit

Permalink
feat(entities): add http API for listing all entities
Browse files Browse the repository at this point in the history
  • Loading branch information
mKeRix committed Feb 17, 2020
1 parent f4cfc6a commit 2bff076
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/entities/entities.controller.spec.ts
@@ -0,0 +1,43 @@
import { Test, TestingModule } from '@nestjs/testing';
import { EntitiesController } from './entities.controller';
import { EntitiesService } from './entities.service';
import { Sensor } from './sensor';
import { Switch } from './switch';
import { Entity } from './entity';
import { NestEmitterModule } from 'nest-emitter';
import { ClusterModule } from '../cluster/cluster.module';
import { EventEmitter } from 'events';
import { ClusterService } from '../cluster/cluster.service';

describe('Entities Controller', () => {
let controller: EntitiesController;
let service: EntitiesService;
const emitter: EventEmitter = new EventEmitter();
const clusterService = {};

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [NestEmitterModule.forRoot(emitter), ClusterModule],
controllers: [EntitiesController],
providers: [EntitiesService]
})
.overrideProvider(ClusterService)
.useValue(clusterService)
.compile();

controller = module.get<EntitiesController>(EntitiesController);
service = module.get<EntitiesService>(EntitiesService);
});

it('should return all registered entities', () => {
const entities: Entity[] = [
new Sensor('sensor', 'Test Sensor'),
new Switch('switch', 'Test Switch')
];
jest.spyOn(service, 'getAll').mockImplementation(() => {
return entities;
});

expect(controller.getAll()).toBe(entities);
});
});
13 changes: 13 additions & 0 deletions src/entities/entities.controller.ts
@@ -0,0 +1,13 @@
import { Controller, Get } from '@nestjs/common';
import { Entity } from './entity';
import { EntitiesService } from './entities.service';

@Controller('entities')
export class EntitiesController {
constructor(private readonly entitiesService: EntitiesService) {}

@Get()
getAll(): Entity[] {
return this.entitiesService.getAll();
}
}
2 changes: 2 additions & 0 deletions src/entities/entities.module.ts
@@ -1,10 +1,12 @@
import { Module } from '@nestjs/common';
import { EntitiesService } from './entities.service';
import { ClusterModule } from '../cluster/cluster.module';
import { EntitiesController } from './entities.controller';

@Module({
imports: [ClusterModule],
providers: [EntitiesService],
controllers: [EntitiesController],
exports: [EntitiesService]
})
export class EntitiesModule {}
9 changes: 9 additions & 0 deletions src/entities/entities.service.spec.ts
Expand Up @@ -8,6 +8,7 @@ import { EventEmitter } from 'events';
import { EntityCustomization } from './entity-customization.interface';
import { SensorConfig } from '../integrations/home-assistant/sensor-config';
import { ClusterModule } from '../cluster/cluster.module';
import { Switch } from './switch';

describe('EntitiesService', () => {
let service: EntitiesService;
Expand Down Expand Up @@ -62,6 +63,14 @@ describe('EntitiesService', () => {
expect(util.types.isProxy(returnedEntity)).toBeTruthy();
});

it('should return all registered entities', () => {
const entities = [];
entities.push(service.add(new Sensor('sensor', 'Test')));
entities.push(service.add(new Switch('switch', 'Test')));

expect(service.getAll()).toStrictEqual(entities);
});

it('should throw an exception when adding a sensor with an existing id', () => {
const entity = new Sensor('duplicate_sensor', 'Duplicate');
service.add(entity);
Expand Down
4 changes: 4 additions & 0 deletions src/entities/entities.service.ts
Expand Up @@ -32,6 +32,10 @@ export class EntitiesService implements OnApplicationBootstrap {
return this.entities.get(id);
}

getAll(): Entity[] {
return Array.from(this.entities.values());
}

add(
entity: Entity,
customizations?: Array<EntityCustomization<any>>
Expand Down

0 comments on commit 2bff076

Please sign in to comment.