component-dbs-core
Version:
DTO objects shared among device backend
227 lines • 12.6 kB
JavaScript
"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