component-dbs-core
Version:
DTO objects shared among device backend
92 lines • 4.4 kB
JavaScript
;
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 dynamodbUtils_1 = require("./dynamodbUtils");
describe('dynamodbUtils test suite', () => {
const dynamodbUtils = new dynamodbUtils_1.DynamodbUtils();
it('should convert transaction db item to dto', () => __awaiter(void 0, void 0, void 0, function* () {
const dbToTransactionNameMapping = {
id: 'deviceUuid',
transactionUuid: 'id',
};
const attributesToDelete = ['type', 'transactionUuid', 'panToken', 'par'];
const item = {
id: 'id',
transactionUuid: 't-uuid',
type: 'transaction.12345',
scheme: "AMEX" /* AMEX */,
'aws:rep:deleting': '123456',
'aws:rep:updatetime': '123456',
'aws:rep:updateregion': '123456',
};
const tran = dynamodbUtils.convertDbItemToDto(item, dbToTransactionNameMapping, attributesToDelete);
expect(tran).toEqual({
id: 't-uuid',
deviceUuid: 'id',
scheme: "AMEX" /* AMEX */,
});
expect(Object.keys(tran).length).toBe(3);
}));
it('should convert deposit db item to dto', () => __awaiter(void 0, void 0, void 0, function* () {
const dbToDepositNameMapping = {
id: 'deviceUuid',
depositUuid: 'id',
};
const attributesToDelete = ['type', 'depositUuid'];
const item = {
id: 'id',
depositUuid: 'd-uuid',
type: 'deposit.12345',
dailyTotals: [{ 'amount': 12, date: '123' }],
'aws:rep:deleting': '123456',
'aws:rep:updatetime': '123456',
'aws:rep:updateregion': '123456',
};
const dep = dynamodbUtils.convertDbItemToDto(item, dbToDepositNameMapping, attributesToDelete);
console.log(dep);
expect(dep).toEqual({
id: 'd-uuid',
deviceUuid: 'id',
dailyTotals: [{ 'amount': 12, date: '123' }],
});
expect(Object.keys(dep).length).toBe(3);
}));
it('should create last year query condition', () => {
const condition = JSON.parse(dynamodbUtils.createLastYearQuery());
const lt = condition.expressionValues[':timestampFilter_lt'].S;
const gt = condition.expressionValues[':timestampFilter_gt'].S;
const ltTime = new Date(lt);
const gtTime = new Date(gt);
expect(ltTime.getFullYear() - gtTime.getFullYear()).toBe(1);
});
it('should be able to convert timestamp between confition', () => {
const startDate = new Date('2020-02-28T00:00:00Z');
const endDate = new Date('2020-01-10T00:00:00Z');
const filter = {
expression: '(#timestamp BETWEEN :timestampFilter_between_start AND :timestampFilter_between_end)',
expressionNames: { '#timestampFilter': 'timestamp' },
expressionValues: {
':timestampFilter_between_start': { S: startDate.toISOString() },
':timestampFilter_between_end': { S: endDate.toISOString() },
},
};
const condition = dynamodbUtils.convertTimestampFilter(JSON.stringify(filter), 'transaction');
expect(condition).toMatchObject({
TableName: '',
ExpressionAttributeValues: {
':timestampFilter_between_start': `transaction.${startDate.getTime()}`,
':timestampFilter_between_end': `transaction.${endDate.getTime()}`,
},
KeyConditionExpression: '(#type BETWEEN :timestampFilter_between_start AND :timestampFilter_between_end)',
});
});
});
//# sourceMappingURL=dynamodbUtils.spec.js.map