diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.js b/packages/node_modules/@node-red/nodes/core/storage/10-file.js index d3b8a0765..601f5b46d 100644 --- a/packages/node_modules/@node-red/nodes/core/storage/10-file.js +++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.js @@ -68,9 +68,12 @@ module.exports = function(RED) { node.error(err,msg); return done(); } else { - filename = value; + processMsg2(msg,nodeSend,value,done); } }); + } + + function processMsg2(msg,nodeSend,filename,done) { filename = filename || ""; msg.filename = filename; var fullFilename = filename; @@ -311,9 +314,12 @@ module.exports = function(RED) { node.error(err,msg); return done(); } else { - filename = (value || "").replace(/\t|\r|\n/g,''); + processMsg2(msg, nodeSend, (value || "").replace(/\t|\r|\n/g,''), nodeDone); } }); + }); + + function processMsg2(msg, nodeSend, filename, nodeDone) { filename = filename || ""; var fullFilename = filename; if (filename && RED.settings.fileWorkingDirectory && !path.isAbsolute(filename)) { @@ -434,7 +440,8 @@ module.exports = function(RED) { nodeDone(); }); } - }); + } + this.on('close', function() { node.status({}); }); diff --git a/test/nodes/core/storage/10-file_spec.js b/test/nodes/core/storage/10-file_spec.js index 19026d457..584aaffd5 100644 --- a/test/nodes/core/storage/10-file_spec.js +++ b/test/nodes/core/storage/10-file_spec.js @@ -98,6 +98,30 @@ describe('file Nodes', function() { }); }); + it('should write to a file using JSONata', function(done) { + var fileToTest4jsonata = "'" + resourcesDir + "/'&(20+30)&'-file-test-file.txt'"; + var flow = [{id:"fileNode1", type:"file", name: "fileNode", "filename": fileToTest4jsonata, "filenameType": "jsonata", "appendNewline":false, "overwriteFile":true, wires: [["helperNode1"]]}, + {id:"helperNode1", type:"helper"}]; + helper.load(fileNode, flow, function() { + var n1 = helper.getNode("fileNode1"); + var n2 = helper.getNode("helperNode1"); + n2.on("input", function(msg) { + try { + var f = fs.readFileSync(fileToTest); + f.should.have.length(4); + fs.unlinkSync(fileToTest); + msg.should.have.property("payload", "test"); + done(); + } + catch (e) { + done(e); + } + }); + n1.receive({payload:"test"}); + }); + }); + + it('should write to a file using RED.settings.fileWorkingDirectory', function(done) { var flow = [{id:"fileNode1", type:"file", name: "fileNode", "filename":relativePathToFile, "appendNewline":false, "overwriteFile":true, wires: [["helperNode1"]]}, {id:"helperNode1", type:"helper"}]; @@ -1237,6 +1261,27 @@ describe('file Nodes', function() { }); }); + it('should read in a file using JSONata and output a utf8 string', function(done) { + var fileToTest4jsonata = "'" + resourcesDir + "/'&(20+30)&'-file-test-file.txt'"; + var flow = [{id:"fileInNode1", type:"file in", name: "fileInNode", "filename":fileToTest4jsonata, "filenameType": "jsonata", "format":"utf8", wires:[["n2"]]}, + {id:"n2", type:"helper"}]; + helper.load(fileNode, flow, function() { + var n1 = helper.getNode("fileInNode1"); + var n2 = helper.getNode("n2"); + n2.on("input", function(msg) { + try { + msg.should.have.property('payload'); + msg.payload.should.be.a.String(); + msg.payload.should.have.length(40) + msg.payload.should.equal("File message line 1\nFile message line 2\n"); + done(); + } catch(err) { + done(err); + } + }); + n1.receive({payload:""}); + }); + }); it('should read in a file using fileWorkingDirectory to set cwd', function(done) { var flow = [{id:"fileInNode1", type:"file in", name: "fileInNode", "filename":relativePathToFile, "format":"utf8", wires:[["n2"]]},