component-dbs-core
Version:
DTO objects shared among device backend
155 lines • 8.66 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 dynamodb_1 = require("aws-sdk/clients/dynamodb");
const testing_1 = require("@nestjs/testing");
const uuid_1 = require("uuid");
const config_1 = require("@nestjs/config");
const deviceService_1 = require("./deviceService");
const config_2 = require("../common_services/config");
const deviceVerification_1 = require("./deviceVerification");
const deviceMetrics_1 = require("./deviceMetrics");
const common_services_1 = require("../common_services");
jest.mock('../common_services/dynamodb/dynamodbService');
describe('device service test suite', () => {
let documentClient;
let deviceService;
let deviceVerification;
beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
documentClient = new dynamodb_1.DocumentClient({
endpoint: 'localhost:8001',
sslEnabled: false,
region: 'local-env',
});
const moduleRef = yield testing_1.Test.createTestingModule({
imports: [
config_1.ConfigModule.forRoot({
isGlobal: true,
}),
],
providers: [
config_2.EnvironmentService,
deviceService_1.DeviceService,
deviceMetrics_1.DeviceMetrics,
deviceVerification_1.DeviceVerification,
common_services_1.DynamodbService,
common_services_1.DynamodbUtils,
common_services_1.AppSyncClient,
common_services_1.AppSyncUtils
],
}).compile();
deviceService = yield moduleRef.get(deviceService_1.DeviceService);
deviceVerification = yield moduleRef.get(deviceVerification_1.DeviceVerification);
}));
it('should be able verify device uuid', () => __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 });
expect(deviceUuid).not.toBeUndefined();
const verify = yield deviceVerification.isDeviceUuidValid(deviceUuid.id);
expect(verify).toBeTruthy();
}));
it('should response false if device uuid doesnt exit', () => __awaiter(void 0, void 0, void 0, function* () {
const verify = yield deviceVerification.isDeviceUuidValid(uuid_1.v4());
expect(verify).toBeFalsy();
}));
it('should be able to query device based on tokens', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
const idToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken, idToken);
const valid = yield deviceVerification.isDeviceTokenValid(deviceUuid.id, accessToken, refreshToken, idToken);
expect(valid).toBeTruthy();
}));
it('should response false if device token not found', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
const idToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken, idToken);
const valid = yield deviceVerification.isDeviceTokenValid(uuid_1.v4().slice(-16), accessToken, refreshToken, 'unknown id token');
expect(valid).toBeFalsy();
}));
it('should be able to find token without idToken', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken);
const valid = yield deviceVerification.isDeviceTokenValid(deviceUuid.id, accessToken, refreshToken);
expect(valid).toBeTruthy();
}));
it('should be able to verify deviceUuid match accessToken', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken);
const valid = yield deviceVerification.isDeviceTokenValid(deviceUuid.id, accessToken);
expect(valid).toBeTruthy();
}));
it('should be able to detect if deviceUuid doesnt match accessToken', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken);
const valid = yield deviceVerification.isDeviceTokenValid(deviceUuid.id, 'wrong access token');
expect(valid).toBeFalsy();
}));
it('should be able to check 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.saveEntity(deviceUuid.id, 'entity-uuid');
yield deviceService.saveDeviceTokens(deviceUuid.id, 'access-token', 'refresh-token');
yield deviceVerification.checkAccessToken('access-token');
yield expect(deviceVerification.checkAccessToken('unknown')).rejects.toThrowError(Error);
}));
it('should be able to find token without idToken', () => __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 accessToken = uuid_1.v4();
const refreshToken = uuid_1.v4();
yield deviceService.saveDeviceTokens(deviceUuid.id, accessToken, refreshToken);
const valid = yield deviceVerification.isDeviceTokenValid(deviceUuid.id, accessToken, refreshToken);
expect(valid).toBeTruthy();
}));
it('should return true for valid pin', () => __awaiter(void 0, void 0, void 0, function* () {
const model = uuid_1.v4().slice(-16);
const serial = uuid_1.v4().slice(-16);
const pin = '1023';
const deviceUuid = yield deviceService.getDeviceUuid({ model, serial });
yield deviceService.saveDevicePin(deviceUuid.id, pin);
const valid = yield deviceVerification.isDevicePinValid(pin, deviceUuid.id);
expect(valid).toBeTruthy();
}));
it('should return false for incorrect pin', () => __awaiter(void 0, void 0, void 0, function* () {
const model = uuid_1.v4().slice(-16);
const serial = uuid_1.v4().slice(-16);
const pin = '1023';
const invalidPin = '1123';
const deviceUuid = yield deviceService.getDeviceUuid({ model, serial });
yield deviceService.saveDevicePin(deviceUuid.id, pin);
const valid = yield deviceVerification.isDevicePinValid(invalidPin, deviceUuid.id);
expect(valid).toBeFalsy();
}));
});
//# sourceMappingURL=deviceVerification.spec.js.map