2 * Copyright 2014 IBM Corp.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 var should = require("should");
19 var changeNode = require("../../../../nodes/core/logic/15-change.js");
20 var helper = require("../../helper.js");
22 describe('ChangeNode', function() {
24 beforeEach(function(done) {
25 helper.startServer(done);
28 afterEach(function(done) {
30 helper.stopServer(done);
33 it('should be loaded', function(done) {
34 var flow = [{"id":"changeNode1","type":"change","action":"replace","property":"payload","from":"","to":"","reg":false,"name":"changeNode","wires":[[]]}];
35 helper.load(changeNode, flow, function() {
36 var changeNode1 = helper.getNode("changeNode1");
37 changeNode1.should.have.property('name', 'changeNode');
42 it('sets the value of the message property', function(done) {
43 var flow = [{"id":"changeNode1","type":"change","action":"replace","property":"payload","from":"","to":"changed","reg":false,"name":"changeNode","wires":[["helperNode1"]]},
44 {id:"helperNode1", type:"helper", wires:[]}];
45 helper.load(changeNode, flow, function() {
46 var changeNode1 = helper.getNode("changeNode1");
47 var helperNode1 = helper.getNode("helperNode1");
48 helperNode1.on("input", function(msg) {
50 msg.payload.should.equal("changed");
56 changeNode1.receive({payload:"changeMe"});
60 it('changes the value of the message property', function(done) {
61 var flow = [{"id":"changeNode1","type":"change","action":"change","property":"payload","from":"Hello","to":"Goodbye","reg":false,"name":"changeNode","wires":[["helperNode1"]]},
62 {id:"helperNode1", type:"helper", wires:[]}];
63 helper.load(changeNode, flow, function() {
64 var changeNode1 = helper.getNode("changeNode1");
65 var helperNode1 = helper.getNode("helperNode1");
66 helperNode1.on("input", function(msg) {
68 msg.payload.should.equal("Goodbye World!");
74 changeNode1.receive({payload:"Hello World!"});
78 it('changes the value of the message property based on a regex', function(done) {
79 var flow = [{"id":"changeNode1","type":"change","action":"change","property":"payload","from":"\\d+","to":"NUMBER","reg":true,"name":"changeNode","wires":[["helperNode1"]]},
80 {id:"helperNode1", type:"helper", wires:[]}];
81 helper.load(changeNode, flow, function() {
82 var changeNode1 = helper.getNode("changeNode1");
83 var helperNode1 = helper.getNode("helperNode1");
84 helperNode1.on("input", function(msg) {
86 msg.payload.should.equal("Replace all numbers NUMBER and NUMBER");
92 changeNode1.receive({payload:"Replace all numbers 12 and 14"});
96 it('supports regex groups', function(done) {
97 var flow = [{"id":"changeNode1","type":"change","action":"change","property":"payload","from":"(Hello)","to":"$1-$1-$1","reg":true,"name":"changeNode","wires":[["helperNode1"]]},
98 {id:"helperNode1", type:"helper", wires:[]}];
99 helper.load(changeNode, flow, function() {
100 var changeNode1 = helper.getNode("changeNode1");
101 var helperNode1 = helper.getNode("helperNode1");
102 helperNode1.on("input", function(msg) {
104 msg.payload.should.equal("Hello-Hello-Hello World");
110 changeNode1.receive({payload:"Hello World"});
114 it('Reports invalid regex', function(done) {
116 var sinon = require('sinon');
118 var flow = [{"id":"changeNode1","type":"change","action":"change","property":"payload","from":"\\+**+","to":"NUMBER","reg":true,"name":"changeNode","wires":[["helperNode1"]]},
119 {id:"helperNode1", type:"helper", wires:[]}];
120 helper.load(changeNode, flow, function() {
121 var changeNode1 = helper.getNode("changeNode1");
122 var helperNode1 = helper.getNode("helperNode1");
124 sinon.stub(changeNode1, 'error', function(error) {
125 if(error.indexOf("regular expression" > -1)) {
129 should.fail(null, null, "An error should be reported for an invalid regex");
135 changeNode1.receive({payload:"This is irrelevant"});
139 it('deletes the value of the message property', function(done) {
140 var flow = [{"id":"changeNode1","type":"change","action":"delete","property":"payload","from":"","to":"","reg":false,"name":"changeNode","wires":[["helperNode1"]]},
141 {id:"helperNode1", type:"helper", wires:[]}];
142 helper.load(changeNode, flow, function() {
143 var changeNode1 = helper.getNode("changeNode1");
144 var helperNode1 = helper.getNode("helperNode1");
145 helperNode1.on("input", function(msg) {
147 msg.should.not.have.property('payload');
153 changeNode1.receive({payload:"This won't get through!"});
157 // TODO confirm the behaviour of the change node later,apparently calling eval such that makeNew( msg, node.property.split("."), eval(node.to) ); is incorrect
158 // it('changes the property name of the message object', function(done) {
159 // var flow = [{"id":"changeNode1","type":"change","action":"replace","property":"payload","from":"","to":"msg.otherProp=10","reg":false,"name":"changeNode","wires":[["helperNode1"]]},
160 // {id:"helperNode1", type:"helper", wires:[]}];
161 // helper.load(changeNode, flow, function() {
162 // var changeNode1 = helper.getNode("changeNode1");
163 // var helperNode1 = helper.getNode("helperNode1");
164 // helperNode1.on("input", function(msg) {
166 // msg.otherProp.should.equal(10);
172 // changeNode1.receive({payload:"changeMe"});
176 it('splits dot delimited properties into objects', function(done) {
177 var flow = [{"id":"changeNode1","type":"change","action":"replace","property":"pay.load","from":"","to":"10","reg":false,"name":"changeNode","wires":[["helperNode1"]]},
178 {id:"helperNode1", type:"helper", wires:[]}];
179 helper.load(changeNode, flow, function() {
180 var changeNode1 = helper.getNode("changeNode1");
181 var helperNode1 = helper.getNode("helperNode1");
182 helperNode1.on("input", function(msg) {
184 msg.pay.load.should.equal("10");
190 changeNode1.receive({"pay.load":"changeMe"});