iqs-services-zones-node
Version:
Zones microservice in Node.js
310 lines (272 loc) • 9.41 kB
text/typescript
let _ = require('lodash');
let async = require('async');
let assert = require('chai').assert;
import { FilterParams } from 'pip-services3-commons-node';
import { PagingParams } from 'pip-services3-commons-node';
import { ZoneV1 } from '../../src/data/version1/ZoneV1';
import { ZoneTypeV1 } from '../../src/data/version1/ZoneTypeV1';
import { IZonesPersistence } from '../../src/persistence/IZonesPersistence';
let ZONE1: ZoneV1 = {
id: '1',
org_id: '1',
type: 'line',
name: 'Test zone 1',
geometry: { type: 'LineString', coordinates: [[0, 0], [1, 1]] },
};
let ZONE2: ZoneV1 = {
id: '2',
org_id: '1',
type: 'circle',
name: 'Test zone 2',
center: { type: 'Point', coordinates: [1, 1] },
};
let ZONE3: ZoneV1 = {
id: '3',
org_id: '2',
type: 'object',
name: 'Test zone 2',
distance: 10,
include_group_ids: ['1']
};
export class ZonesPersistenceFixture {
private _persistence: IZonesPersistence;
constructor(persistence) {
assert.isNotNull(persistence);
this._persistence = persistence;
}
private testCreateZones(done) {
async.series([
// Create one zone
(callback) => {
this._persistence.create(
null,
ZONE1,
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.org_id, ZONE1.org_id);
assert.equal(zone.type, ZONE1.type);
assert.equal(zone.name, ZONE1.name);
callback();
}
);
},
// Create another zone
(callback) => {
this._persistence.create(
null,
ZONE2,
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.org_id, ZONE2.org_id);
assert.equal(zone.type, ZONE2.type);
assert.equal(zone.name, ZONE2.name);
callback();
}
);
},
// Create yet another zone
(callback) => {
this._persistence.create(
null,
ZONE3,
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.org_id, ZONE3.org_id);
assert.equal(zone.type, ZONE3.type);
assert.equal(zone.name, ZONE3.name);
callback();
}
);
}
], done);
}
public testCrudOperations(done) {
let zone1: ZoneV1;
async.series([
// Create items
(callback) => {
this.testCreateZones(callback);
},
// Get all zones
(callback) => {
this._persistence.getPageByFilter(
null,
new FilterParams(),
new PagingParams(),
(err, page) => {
assert.isNull(err);
assert.isObject(page);
assert.lengthOf(page.data, 3);
zone1 = page.data[0];
callback();
}
);
},
// Update the zone
(callback) => {
zone1.name = 'Updated zone 1';
this._persistence.update(
null,
zone1,
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.name, 'Updated zone 1');
assert.equal(zone.id, zone1.id);
callback();
}
);
},
// Delete zone
(callback) => {
this._persistence.deleteById(
null,
zone1.id,
(err) => {
assert.isNull(err);
callback();
}
);
},
// Try to get delete zone
(callback) => {
this._persistence.getOneById(
null,
zone1.id,
(err, zone) => {
assert.isNull(err);
assert.isNull(zone || null);
callback();
}
);
}
], done);
}
public testGetWithFilter(done) {
async.series([
// Create zones
(callback) => {
this.testCreateZones(callback);
},
// Get zones filtered by org_id
(callback) => {
this._persistence.getPageByFilter(
null,
FilterParams.fromValue({
org_id: '1'
}),
new PagingParams(),
(err, zones) => {
assert.isNull(err);
assert.isObject(zones);
assert.lengthOf(zones.data, 2);
callback();
}
);
},
// Get zones filtered by type
(callback) => {
this._persistence.getPageByFilter(
null,
FilterParams.fromValue({
type: 'line'
}),
new PagingParams(),
(err, zones) => {
assert.isNull(err);
assert.isObject(zones);
assert.lengthOf(zones.data, 1);
callback();
}
);
},
// Get zones filtered by search
(callback) => {
this._persistence.getPageByFilter(
null,
FilterParams.fromValue({
search: 'test'
}),
new PagingParams(),
(err, zones) => {
assert.isNull(err);
assert.isObject(zones);
assert.lengthOf(zones.data, 3);
callback();
}
);
},
], done);
}
public testUnsetReferences(done) {
async.series([
// Create zone
(callback) => {
this._persistence.create(
null,
{
id: '5',
org_id: '1',
type: 'line',
name: 'Test zone 1',
geometry: { type: 'LineString', coordinates: [[0, 0], [1, 1]] },
include_object_ids: ['1', '2'],
exclude_object_ids: ['1', '2'],
include_group_ids: ['1', '2'],
exclude_group_ids: ['1', '2']
},
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.org_id, ZONE1.org_id);
assert.lengthOf(zone.include_object_ids, 2);
assert.lengthOf(zone.exclude_object_ids, 2);
assert.lengthOf(zone.include_group_ids, 2);
assert.lengthOf(zone.exclude_group_ids, 2);
callback();
}
);
},
// Unset object
(callback) => {
this._persistence.unsetObject(
null, '1', '1',
(err) => {
assert.isNull(err);
callback();
}
);
},
// Unset group
(callback) => {
this._persistence.unsetGroup(
null, '1', '1',
(err) => {
assert.isNull(err);
callback();
}
);
},
// Get and check the zone
(callback) => {
this._persistence.getOneById(
null,
'5',
(err, zone) => {
assert.isNull(err);
assert.isObject(zone);
assert.equal(zone.org_id, ZONE1.org_id);
assert.lengthOf(zone.include_object_ids, 1);
assert.lengthOf(zone.exclude_object_ids, 1);
assert.lengthOf(zone.include_group_ids, 1);
assert.lengthOf(zone.exclude_group_ids, 1);
callback();
}
);
}
], done);
}
}