2018-02-20 20:04:36 +00:00
|
|
|
import { run } from '@ember/runloop';
|
2019-03-13 00:04:16 +00:00
|
|
|
import { test } from 'qunit';
|
2018-02-20 20:04:36 +00:00
|
|
|
import NodeModel from 'nomad-ui/models/node';
|
|
|
|
import moduleForSerializer from '../../helpers/module-for-serializer';
|
|
|
|
import pushPayloadToStore from '../../utils/push-payload-to-store';
|
2019-03-13 00:04:16 +00:00
|
|
|
import { settled } from '@ember/test-helpers';
|
2018-02-20 20:04:36 +00:00
|
|
|
|
|
|
|
moduleForSerializer('node', 'Unit | Serializer | Node', {
|
2018-05-13 03:01:51 +00:00
|
|
|
needs: [
|
2018-12-13 01:23:09 +00:00
|
|
|
'adapter:application',
|
2018-05-13 03:01:51 +00:00
|
|
|
'service:config',
|
2018-12-13 01:23:09 +00:00
|
|
|
'serializer:node',
|
|
|
|
'service:system',
|
|
|
|
'service:token',
|
2018-05-13 03:01:51 +00:00
|
|
|
'transform:fragment',
|
|
|
|
'transform:fragment-array',
|
2018-12-13 01:23:09 +00:00
|
|
|
'model:node-attributes',
|
|
|
|
'model:resources',
|
|
|
|
'model:drain-strategy',
|
|
|
|
'model:node-driver',
|
|
|
|
'model:node-event',
|
2018-05-13 03:01:51 +00:00
|
|
|
'model:allocation',
|
2018-12-13 01:23:09 +00:00
|
|
|
'model:job',
|
2018-05-13 03:01:51 +00:00
|
|
|
],
|
2018-02-20 20:04:36 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
test('local store is culled to reflect the state of findAll requests', function(assert) {
|
|
|
|
const findAllResponse = [
|
|
|
|
makeNode('1', 'One', '127.0.0.1:4646'),
|
|
|
|
makeNode('2', 'Two', '127.0.0.2:4646'),
|
|
|
|
makeNode('3', 'Three', '127.0.0.3:4646'),
|
|
|
|
];
|
|
|
|
|
|
|
|
const payload = this.subject().normalizeFindAllResponse(this.store, NodeModel, findAllResponse);
|
|
|
|
pushPayloadToStore(this.store, payload, NodeModel.modelName);
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
payload.data.length,
|
|
|
|
findAllResponse.length,
|
|
|
|
'Each original record is returned in the response'
|
|
|
|
);
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
this.store
|
|
|
|
.peekAll('node')
|
|
|
|
.filterBy('id')
|
|
|
|
.get('length'),
|
|
|
|
findAllResponse.length,
|
|
|
|
'Each original record is now in the store'
|
|
|
|
);
|
|
|
|
|
|
|
|
const newFindAllResponse = [
|
|
|
|
makeNode('2', 'Two', '127.0.0.2:4646'),
|
|
|
|
makeNode('3', 'Three', '127.0.0.3:4646'),
|
|
|
|
makeNode('4', 'Four', '127.0.0.4:4646'),
|
|
|
|
];
|
|
|
|
|
|
|
|
let newPayload;
|
|
|
|
run(() => {
|
|
|
|
newPayload = this.subject().normalizeFindAllResponse(this.store, NodeModel, newFindAllResponse);
|
|
|
|
});
|
|
|
|
pushPayloadToStore(this.store, newPayload, NodeModel.modelName);
|
|
|
|
|
2019-03-13 00:04:16 +00:00
|
|
|
return settled().then(() => {
|
2018-02-20 20:04:36 +00:00
|
|
|
assert.equal(
|
|
|
|
newPayload.data.length,
|
|
|
|
newFindAllResponse.length,
|
|
|
|
'Each new record is returned in the response'
|
|
|
|
);
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
this.store
|
|
|
|
.peekAll('node')
|
|
|
|
.filterBy('id')
|
|
|
|
.get('length'),
|
|
|
|
newFindAllResponse.length,
|
|
|
|
'The node length in the store reflects the new response'
|
|
|
|
);
|
|
|
|
|
|
|
|
assert.notOk(this.store.peekAll('node').findBy('id', '1'), 'Record One is no longer found');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
function makeNode(id, name, ip) {
|
|
|
|
return { ID: id, Name: name, HTTPAddr: ip };
|
|
|
|
}
|
2018-12-13 01:23:09 +00:00
|
|
|
|
|
|
|
const normalizationTestCases = [
|
|
|
|
{
|
|
|
|
name: 'Normal',
|
|
|
|
in: {
|
|
|
|
ID: 'test-node',
|
|
|
|
HTTPAddr: '867.53.0.9:4646',
|
|
|
|
Drain: false,
|
|
|
|
Drivers: {
|
|
|
|
docker: {
|
|
|
|
Detected: true,
|
|
|
|
Healthy: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
out: {
|
|
|
|
data: {
|
|
|
|
id: 'test-node',
|
|
|
|
type: 'node',
|
|
|
|
attributes: {
|
|
|
|
isDraining: false,
|
|
|
|
httpAddr: '867.53.0.9:4646',
|
|
|
|
drivers: [
|
|
|
|
{
|
|
|
|
name: 'docker',
|
|
|
|
detected: true,
|
|
|
|
healthy: false,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
relationships: {
|
|
|
|
allocations: {
|
|
|
|
links: {
|
|
|
|
related: '/v1/node/test-node/allocations',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
name: 'Dots in driver names',
|
|
|
|
in: {
|
|
|
|
ID: 'test-node',
|
|
|
|
HTTPAddr: '867.53.0.9:4646',
|
|
|
|
Drain: false,
|
|
|
|
Drivers: {
|
|
|
|
'my.driver': {
|
|
|
|
Detected: true,
|
|
|
|
Healthy: false,
|
|
|
|
},
|
|
|
|
'my.other.driver': {
|
|
|
|
Detected: false,
|
|
|
|
Healthy: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
out: {
|
|
|
|
data: {
|
|
|
|
id: 'test-node',
|
|
|
|
type: 'node',
|
|
|
|
attributes: {
|
|
|
|
isDraining: false,
|
|
|
|
httpAddr: '867.53.0.9:4646',
|
|
|
|
drivers: [
|
|
|
|
{
|
|
|
|
name: 'my.driver',
|
|
|
|
detected: true,
|
|
|
|
healthy: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'my.other.driver',
|
|
|
|
detected: false,
|
|
|
|
healthy: false,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
relationships: {
|
|
|
|
allocations: {
|
|
|
|
links: {
|
|
|
|
related: '/v1/node/test-node/allocations',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
normalizationTestCases.forEach(testCase => {
|
|
|
|
test(`normalization: ${testCase.name}`, function(assert) {
|
|
|
|
assert.deepEqual(this.subject().normalize(NodeModel, testCase.in), testCase.out);
|
|
|
|
});
|
|
|
|
});
|