Skip to content

Commit

Permalink
Don't use Ember.get in conjunction with dynamic strings in the job-pl…
Browse files Browse the repository at this point in the history
…an serializer
  • Loading branch information
DingoEatingFuzz committed Dec 13, 2018
1 parent 6964213 commit cc3bdf1
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 3 deletions.
6 changes: 3 additions & 3 deletions ui/app/serializers/job-plan.js
Original file line number Diff line number Diff line change
@@ -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);
},
Expand Down
94 changes: 94 additions & 0 deletions ui/tests/unit/serializers/job-plan-test.js
Original file line number Diff line number Diff line change
@@ -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);
});
});

0 comments on commit cc3bdf1

Please sign in to comment.