UNPKG

component-dbs-core

Version:

DTO objects shared among device backend

227 lines 12.6 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const uuid_1 = require("uuid"); const deviceService_1 = require("./deviceService"); const deviceVerification_1 = require("./deviceVerification"); const deviceMetrics_1 = require("./deviceMetrics"); const common_services_1 = require("../common_services"); const ts_mockito_1 = require("ts-mockito"); jest.mock('../common_services/dynamodb/dynamodbService'); describe('device service test suite', () => { let deviceService; const mockAppSyncClient = ts_mockito_1.mock(common_services_1.AppSyncClient); const envService = { deviceTableName: 'Devices', modelSerialGsi: 'modelSerialGsi', accessTokenGsi: 'accessTokenGsi', }; beforeEach(() => { const mAppsyncClient = ts_mockito_1.instance(mockAppSyncClient); mAppsyncClient.utils = new common_services_1.AppSyncUtils(); const dbService = new common_services_1.DynamodbService(envService, new common_services_1.DynamodbUtils()); const deviceVerification = new deviceVerification_1.DeviceVerification(dbService, envService); deviceService = new deviceService_1.DeviceService(dbService, envService, new deviceMetrics_1.DeviceMetrics(dbService, envService, deviceVerification), deviceVerification, mAppsyncClient); }); it('should be able to save device uuid on database', () => __awaiter(void 0, void 0, void 0, function* () { const model = 'model1'; const serial = 'serial1'; const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); expect(deviceUuid).not.toBeUndefined(); console.log('uuid:', deviceUuid); expect(deviceUuid.id).not.toBeUndefined(); expect(deviceUuid.model).toBe(model); expect(deviceUuid.serial).toBe(serial); const existedDeviceUuid = yield deviceService.getDeviceUuid({ model, serial, }); expect(existedDeviceUuid.id).toBe(deviceUuid.id); expect(existedDeviceUuid.model).toBe(model); expect(existedDeviceUuid.serial).toBe(serial); }), 30000); it('should be able to save device metric on database', () => __awaiter(void 0, void 0, void 0, function* () { const model = 'model1'; const serial = 'serial1'; const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); expect(deviceUuid).not.toBeUndefined(); const metric = { deviceUuid: deviceUuid.id, activity: 'activity', metric: 'metric', timestamp: new Date().getTime() + '', }; const device = yield deviceService.createDeviceMetrics(metric); expect(device.id).toBe(metric.deviceUuid); const output = yield deviceService.getDeviceMetrics(metric.deviceUuid, `${"metrics" /* metrics */}.${metric.timestamp}`); const { Items: items } = output; expect(items === null || items === void 0 ? void 0 : items.length).toBe(1); })); it('should be able to save device tokens on db', () => __awaiter(void 0, void 0, void 0, function* () { var _a; const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); const accessToken = uuid_1.v4(); const refreshToken = uuid_1.v4(); const idToken = uuid_1.v4(); yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken, idToken); const output = yield deviceService.deviceDb.getDeviceRecordByType(deviceUuid.id, "core" /* core */); expect(((_a = output.Items) === null || _a === void 0 ? void 0 : _a.length) === 1).toBeTruthy(); const item = output.Items[0]; expect(item.id).toBe(deviceUuid.id); expect(item.accessToken).toBe(accessToken); expect(item.refreshToken).toBe(refreshToken); expect(item.idToken).toBe(idToken); expect(item.type).toBe("core" /* core */); })); it('should reject if device uuid not found when save tokens', () => __awaiter(void 0, void 0, void 0, function* () { yield expect(deviceService.saveDeviceTokens(uuid_1.v4(), '', '', '')).rejects.toThrowError(Error); })); it('should be able to skip idToken if it is not specified', () => __awaiter(void 0, void 0, void 0, function* () { var _b; const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); const accessToken = uuid_1.v4(); const refreshToken = uuid_1.v4(); yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken); const output = yield deviceService.deviceDb.getDeviceRecordByType(deviceUuid.id, "core" /* core */); expect((_b = output.Items) === null || _b === void 0 ? void 0 : _b.length).toBe(1); const item = output.Items[0]; expect(item.id).toBe(deviceUuid.id); expect(item.accessToken).toBe(accessToken); expect(item.refreshToken).toBe(refreshToken); expect(item.type).toBe("core" /* core */); })); it('should be able to save phone on device setting', () => __awaiter(void 0, void 0, void 0, function* () { var _c; const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); yield deviceService.saveDevicePhone(deviceUuid.id, '123456'); const output = yield deviceService.deviceDb.getDeviceRecordByType(deviceUuid.id, "settings" /* settings */); expect((_c = output.Items) === null || _c === void 0 ? void 0 : _c.length).toBe(1); expect(output.Items[0].id).toBe(deviceUuid.id); expect(output.Items[0].phone).toBe('123456'); })); it('should be able to save pin on device setting', () => __awaiter(void 0, void 0, void 0, function* () { var _d; const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); yield deviceService.saveDevicePin(deviceUuid.id, '1234'); const output = yield deviceService.deviceDb.getDeviceRecordByType(deviceUuid.id, "settings" /* settings */); expect(((_d = output.Items) === null || _d === void 0 ? void 0 : _d.length) === 1).toBeTruthy(); expect(output.Items[0].id).toBe(deviceUuid.id); expect(output.Items[0].pin).toBe('1234'); })); it('should be able to save site uuid on device setting', () => __awaiter(void 0, void 0, void 0, function* () { var _e; const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); yield deviceService.saveSite(deviceUuid.id, 'site-uuid'); const output = yield deviceService.deviceDb.getDeviceRecordByType(deviceUuid.id, "settings" /* settings */); expect((_e = output.Items) === null || _e === void 0 ? void 0 : _e.length).toBe(1); expect(output.Items[0].id).toBe(deviceUuid.id); expect(output.Items[0].siteUuid).toBe('site-uuid'); })); it('should be able to get entity uuid by access token', () => __awaiter(void 0, void 0, void 0, function* () { const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); yield deviceService.saveDeviceTokens(deviceUuid.id, 'access-token', 'refresh-token'); yield deviceService.saveEntity(deviceUuid.id, 'entity-uuid'); const entityUuid = yield deviceService.getEntityUuidByAccessToken('access-token'); expect(entityUuid).toBe('entity-uuid'); yield expect(deviceService.getEntityUuidByAccessToken('unknown')).rejects.toThrowError(Error); })); it('should be able to save device status', () => __awaiter(void 0, void 0, void 0, function* () { const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); yield deviceService.saveDeviceStatus(deviceUuid.id, "ACTIVE" /* ACTIVE */); const status = yield deviceService.getDeviceStatus(deviceUuid.id); expect(status).toBe("ACTIVE" /* ACTIVE */); })); it('should throw error if device uuid is not found on getDeviceStatus', () => __awaiter(void 0, void 0, void 0, function* () { yield expect(deviceService.getDeviceStatus('unknown')).rejects.toThrowError(Error); })); it('should be able to update and get get deviceSettings', () => __awaiter(void 0, void 0, void 0, function* () { const model = uuid_1.v4().slice(-16); const serial = uuid_1.v4().slice(-16); const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); const deviceSettings = { id: deviceUuid.id, name: 'zeller device name', site: { name: 'zeller site name', pin: '1203', siteUuid: uuid_1.v4(), }, receipt: { businessAddress: 'Melbourne, Australia', businessName: 'NPCO ltd.', footer: 'link://footer', logo: 'link://logo', enabled: true, }, }; yield deviceService.updateDeviceSettings(deviceSettings); const settings = yield deviceService.getDeviceSettings(deviceUuid.id); expect(settings.name).toBe(deviceSettings.name); expect(settings.receipt).toMatchObject(deviceSettings.receipt); expect(settings.site).toMatchObject(deviceSettings.site); })); it('should publish deviceSettings update event', () => __awaiter(void 0, void 0, void 0, function* () { const mutate = jest.fn(); ts_mockito_1.when(mockAppSyncClient.getAppSyncClient()).thenReturn(Promise.resolve({ mutate })); const model = 'model1'; const serial = 'serial1'; const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); expect(deviceUuid).not.toBeUndefined(); yield deviceService.saveDeviceTokens(deviceUuid.id, 'accessToken', 'refreshToken'); const deviceStatus = yield deviceService.getDeviceStatus(deviceUuid.id); expect(deviceStatus).toBe('ACTIVE'); const event = [ { dynamodb: { ApproximateCreationDateTime: 1594608723, Keys: { id: { S: deviceUuid.id, }, type: { S: 'settings', }, }, NewImage: { id: { S: '123' }, name: { S: 'new name for device' }, }, }, }, ]; yield deviceService.onDeviceSettingsStream(event); expect(mutate).toHaveBeenCalledTimes(1); })); it('should be able to response subscribe request', () => __awaiter(void 0, void 0, void 0, function* () { const model = 'model1'; const serial = 'serial1'; const deviceUuid = yield deviceService.getDeviceUuid({ model, serial }); expect(deviceUuid).not.toBeUndefined(); yield deviceService.saveDeviceTokens(deviceUuid.id, 'accessToken', 'refreshToken'); yield deviceService.onDeviceSettingsUpdate('accessToken'); yield expect(deviceService.onDeviceSettingsUpdate('bad-access-token')).rejects.toThrowError(Error); })); }); //# sourceMappingURL=deviceService.spec.js.map