Don't use Ember.get in conjunction with dynamic strings in the job-plan serializer
This commit is contained in:
parent
5902842d6b
commit
d83be97d78
|
@ -1,11 +1,11 @@
|
|||
import { get } from '@ember/object';
|
||||
import { assign } from '@ember/polyfills';
|
||||
import ApplicationSerializer from './application';
|
||||
|
||||
export default ApplicationSerializer.extend({
|
||||
normalize(typeHash, hash) {
|
||||
hash.FailedTGAllocs = Object.keys(hash.FailedTGAllocs || {}).map(key => {
|
||||
return assign({ Name: key }, get(hash, `FailedTGAllocs.${key}`) || {});
|
||||
const failures = hash.FailedTGAllocs || {};
|
||||
hash.FailedTGAllocs = Object.keys(failures).map(key => {
|
||||
return assign({ Name: key }, failures[key] || {});
|
||||
});
|
||||
return this._super(...arguments);
|
||||
},
|
||||
|
|
94
ui/tests/unit/serializers/job-plan-test.js
Normal file
94
ui/tests/unit/serializers/job-plan-test.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
import { test } from 'ember-qunit';
|
||||
import JobPlanModel from 'nomad-ui/models/job-plan';
|
||||
import moduleForSerializer from '../../helpers/module-for-serializer';
|
||||
|
||||
moduleForSerializer('job-plan', 'Unit | Serializer | JobPlan', {
|
||||
needs: [
|
||||
'service:token',
|
||||
'service:system',
|
||||
'serializer:job-plan',
|
||||
'transform:fragment-array',
|
||||
'model:placement-failure',
|
||||
],
|
||||
});
|
||||
|
||||
const normalizationTestCases = [
|
||||
{
|
||||
name: 'Normal',
|
||||
in: {
|
||||
ID: 'test-plan',
|
||||
Diff: {
|
||||
Arbitrary: 'Value',
|
||||
},
|
||||
FailedTGAllocs: {
|
||||
taskGroup: {
|
||||
NodesAvailable: 10,
|
||||
},
|
||||
},
|
||||
},
|
||||
out: {
|
||||
data: {
|
||||
id: 'test-plan',
|
||||
type: 'job-plan',
|
||||
attributes: {
|
||||
diff: {
|
||||
Arbitrary: 'Value',
|
||||
},
|
||||
failedTGAllocs: [
|
||||
{
|
||||
name: 'taskGroup',
|
||||
nodesAvailable: 10,
|
||||
},
|
||||
],
|
||||
},
|
||||
relationships: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: 'Dots in task names',
|
||||
in: {
|
||||
ID: 'test-plan',
|
||||
Diff: {
|
||||
Arbitrary: 'Value',
|
||||
},
|
||||
FailedTGAllocs: {
|
||||
'one.two': {
|
||||
NodesAvailable: 10,
|
||||
},
|
||||
'three.four': {
|
||||
NodesAvailable: 25,
|
||||
},
|
||||
},
|
||||
},
|
||||
out: {
|
||||
data: {
|
||||
id: 'test-plan',
|
||||
type: 'job-plan',
|
||||
attributes: {
|
||||
diff: {
|
||||
Arbitrary: 'Value',
|
||||
},
|
||||
failedTGAllocs: [
|
||||
{
|
||||
name: 'one.two',
|
||||
nodesAvailable: 10,
|
||||
},
|
||||
{
|
||||
name: 'three.four',
|
||||
nodesAvailable: 25,
|
||||
},
|
||||
],
|
||||
},
|
||||
relationships: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
normalizationTestCases.forEach(testCase => {
|
||||
test(`normalization: ${testCase.name}`, function(assert) {
|
||||
assert.deepEqual(this.subject().normalize(JobPlanModel, testCase.in), testCase.out);
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue