Skip to content

Commit

Permalink
handle firstOf undefined correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
Afsin Ustundag committed Jul 10, 2018
1 parent bf9ec37 commit c20f227
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/jsonapter.js
Expand Up @@ -244,7 +244,7 @@ var prototype = {
for (var i = 0; i < templateFirstOf.length; ++i) {
var t = templateFirstOf[i];
var value = this.evaluateValue(t, input, parent, params, arrayIndex, arraySize, options);
if (value !== null) {
if (!_.isNil(value)) {
return value;
}
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "jsonapter",
"version": "2.0.6",
"version": "2.0.7",
"description": "Template based JSON to JSON transformer",
"main": "./index.js",
"directories": {
Expand Down
10 changes: 10 additions & 0 deletions test/test-firstOf.js
Expand Up @@ -5,6 +5,7 @@ var chai = require('chai');
var json2json = require('../index');

var case_0 = require('./test_cases/case-firstOf-0');
var case_1 = require('./test_cases/case-firstOf-1');

var expect = chai.expect;

Expand All @@ -19,4 +20,13 @@ describe('firtOf', function () {
expect(actual).to.deep.equal(case_0.expecteds[i]);
}
});

it('case-firstOf-1: undefined output', function () {
var template = case_1.template;
var n = case_1.inputs.length;
for (var i = 0; i < n; ++i) {
var actual = engine.run(template, case_1.inputs[i]);
expect(actual).to.deep.equal(case_1.expecteds[i]);
}
});
});
39 changes: 39 additions & 0 deletions test/test_cases/case-firstOf-1.js
@@ -0,0 +1,39 @@
"use strict";

exports.template = {
content: {
item: {
firstOf: [{
value: function (input) {
if (input.startsWith('a')) {
return input + ' 1st';
}
}
}, {
value: function (input) {
if (input.startsWith('b')) {
return input + ' 2nd';
}
}
}, {
value: function (input) {
if (input.startsWith('c')) {
return input + ' 3rd';
}
}
}]
}
},
dataKey: 'prop'
};

exports.inputs = [];
exports.expecteds = [];

exports.inputs[0] = { prop: 'and' };
exports.inputs[1] = { prop: 'but' };
exports.inputs[2] = { prop: 'cal' };

exports.expecteds[0] = { item: 'and 1st' };
exports.expecteds[1] = { item: 'but 2nd' };
exports.expecteds[2] = { item: 'cal 3rd' };

0 comments on commit c20f227

Please sign in to comment.