diff --git a/test/crud-test.ts b/test/crud-test.ts index 273d420..6bf68f0 100644 --- a/test/crud-test.ts +++ b/test/crud-test.ts @@ -1,12 +1,15 @@ /*jshint globalstrict:true, devel:true */ /*eslint no-var:0 */ +/*tslint:disable:comment-format*/ +/*tslint:disable:typedef*/ +/*tslint:disable:max-line-length*/ /*global require, __dirname, describe, before, it */ "use strict"; -var XlsxTemplate = require('../lib'), - fs = require('fs'), - path = require('path'), - etree = require('elementtree'); +var XlsxTemplate = require("../lib"), + fs = require("fs"), + path = require("path"), + etree = require("elementtree"); function getSharedString(sharedStrings, sheet1, index) { return sharedStrings.findall("./si")[ @@ -16,11 +19,11 @@ function getSharedString(sharedStrings, sheet1, index) { describe("CRUD operations", function() { - describe('XlsxTemplate', function() { + describe("XlsxTemplate", function() { it("can load data", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't1.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t1.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -38,7 +41,7 @@ describe("CRUD operations", function() { it("can write changed shared strings", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't1.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t1.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -58,7 +61,7 @@ describe("CRUD operations", function() { it("can substitute values and generate a file", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't1.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t1.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -160,7 +163,7 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='F9']/v").text).toEqual("4"); // XXX: For debugging only - fs.writeFileSync('test/output/test1.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test1.xlsx", newData, "binary"); done(); }); @@ -169,7 +172,7 @@ describe("CRUD operations", function() { it("can substitute values with descendant properties and generate a file", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't2.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t2.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -271,16 +274,16 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='F9']/v").text).toEqual("4"); // XXX: For debugging only - fs.writeFileSync('test/output/test2.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test2.xlsx", newData, "binary"); done(); }); }); - + it("can substitute values when single item array contains an object and generate a file", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't3.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t3.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -322,25 +325,25 @@ describe("CRUD operations", function() { parseInt(sheet1.find("./sheetData/row/c[@r='B7']/v").text, 10) ].find("t").text ).toEqual("John Smith"); - + expect(sheet1.find("./sheetData/row/c[@r='C7']").attrib.t).toEqual("s"); expect( sharedStrings.findall("./si")[ parseInt(sheet1.find("./sheetData/row/c[@r='C7']/v").text, 10) ].find("t").text ).toEqual("Developer"); - + // XXX: For debugging only - fs.writeFileSync('test/output/test6.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test6.xlsx", newData, "binary"); done(); }); }); - + it("can substitute values when single item array contains an object with sub array containing primatives and generate a file", function(done) { - fs.readFile(path.join(__dirname, 'templates', 't2.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "t2.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -359,7 +362,7 @@ describe("CRUD operations", function() { }); var newData = t.generate(); - + var sharedStrings = etree.parse(t.archive.file("xl/sharedStrings.xml").asText()).getroot(), sheet1 = etree.parse(t.archive.file("xl/worksheets/sheet1.xml").asText()).getroot(); @@ -403,7 +406,7 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='F7']/v").text).toEqual("4"); // XXX: For debugging only - fs.writeFileSync('test/output/test7.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test7.xlsx", newData, "binary"); done(); }); @@ -412,7 +415,7 @@ describe("CRUD operations", function() { it("moves columns left or right when filling lists", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-cols.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-cols.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -453,7 +456,7 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='C6']/v").text).toEqual("103"); // XXX: For debugging only - fs.writeFileSync('test/output/test3.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test3.xlsx", newData, "binary"); done(); }); @@ -462,7 +465,7 @@ describe("CRUD operations", function() { it("moves rows down when filling tables", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-tables.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-tables.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -592,15 +595,15 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='C17']")).toBeNull(); // XXX: For debugging only - fs.writeFileSync('test/output/test4.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test4.xlsx", newData, "binary"); done(); }); }); - it("replaces hyperlinks in sheet", function(done){ - fs.readFile(path.join(__dirname, 'templates', 'test-hyperlinks.xlsx'), function(err, data) { + it("replaces hyperlinks in sheet", function(done) { + fs.readFile(path.join(__dirname, "templates", "test-hyperlinks.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -624,7 +627,7 @@ describe("CRUD operations", function() { expect(rels.find("./Relationship[@Id='rId1']").attrib.Target).toEqual("mailto:john@bob.com?subject=Hello%20hello"); // XXX: For debugging only - fs.writeFileSync('test/output/test9.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test9.xlsx", newData, "binary"); done(); }); @@ -632,7 +635,7 @@ describe("CRUD operations", function() { it("moves named tables, named cells and merged cells", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-named-tables.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-named-tables.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -689,7 +692,7 @@ describe("CRUD operations", function() { expect(table3.find("./autoFilter").attrib.ref).toEqual("C14:D16"); // Grown and pushed down // XXX: For debugging only - fs.writeFileSync('test/output/test5.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test5.xlsx", newData, "binary"); done(); }); @@ -698,7 +701,7 @@ describe("CRUD operations", function() { it("Correctly parse when formula in the file", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'template.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "template.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -721,14 +724,14 @@ describe("CRUD operations", function() { }); it("Correctly recalculate formula", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-formula.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-formula.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); t.substitute(1, { data: [ - { name: 'A', quantity: 10, unitCost: 3 }, - { name: 'B', quantity: 15, unitCost: 5 }, + { name: "A", quantity: 10, unitCost: 3 }, + { name: "B", quantity: 15, unitCost: 5 }, ] }); @@ -738,24 +741,24 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row/c[@r='D2']/f").text).toEqual("Table3[Qty]*Table3[UnitCost]"); expect(sheet1.find("./sheetData/row/c[@r='D2']/v")).toBeNull(); - + // This part is not working // expect(sheet1.find("./sheetData/row/c[@r='D3']/f").text).toEqual("Table3[Qty]*Table3[UnitCost]"); - + // fs.writeFileSync('test/output/test6.xlsx', newData, 'binary'); done(); - }); + }); }); - + it("File without dimensions works", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'gdocs.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "gdocs.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); t.substitute(1, { planData: [ - { name: 'A', role: 'Role 1' }, - { name: 'B', role: 'Role 2' }, + { name: "A", role: "Role 1" }, + { name: "B", role: "Role 2" }, ] }); @@ -765,18 +768,18 @@ describe("CRUD operations", function() { // fs.writeFileSync('test/output/test7.xlsx', newData, 'binary'); done(); - }); + }); }); - + it("Array indexing", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-array.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-array.xlsx"), function(err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); t.substitute(1, { data: [ "First row", - { name: 'B' }, + { name: "B" }, ] }); @@ -788,16 +791,16 @@ describe("CRUD operations", function() { expect(getSharedString(sharedStrings, sheet1, "A2")).toEqual("First row"); expect(sheet1.find("./sheetData/row/c[@r='B2']/v")).not.toBeNull(); expect(getSharedString(sharedStrings, sheet1, "B2")).toEqual("B"); - + // fs.writeFileSync('test/output/test8.xlsx', newData, 'binary'); done(); - }); + }); }); - + it("Arrays with single element", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-nested-arrays.xlsx'), function(err, buffer) { + fs.readFile(path.join(__dirname, "templates", "test-nested-arrays.xlsx"), function(err, buffer) { expect(err).toBeNull(); - + var t = new XlsxTemplate(buffer); var data = { "sales": [ { "payments": [123] } ] }; t.substitute(1, data); @@ -812,14 +815,14 @@ describe("CRUD operations", function() { expect(a1.text).toEqual("123"); expect(firstElement).not.toBeNull(); expect(firstElement.length).toEqual(1); - - fs.writeFileSync('test/output/test-nested-arrays.xlsx', newData, 'binary'); + + fs.writeFileSync("test/output/test-nested-arrays.xlsx", newData, "binary"); done(); - }); + }); }); it("will correctly fill cells on all rows where arrays are used to dynamically render multiple cells", function (done) { - fs.readFile(path.join(__dirname, 'templates', 't2.xlsx'), function (err, data) { + fs.readFile(path.join(__dirname, "templates", "t2.xlsx"), function (err, data) { expect(err).toBeNull(); var t = new XlsxTemplate(data); @@ -859,18 +862,18 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row[@r='8']")._children.length).toEqual(2 + 5); expect(sheet1.find("./sheetData/row[@r='9']")._children.length).toEqual(2 + 7); - fs.writeFileSync('test/output/test8.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test8.xlsx", newData, "binary"); done(); }); }); - + it("do not move Images", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-move-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-move-images.xlsx"), function(err, data) { expect(err).toBeNull(); var option = { moveImages : false - } + }; var t = new XlsxTemplate(data, option); t.substitute(1, { users: [ @@ -887,36 +890,36 @@ describe("CRUD operations", function() { var newData = t.generate(); var drawingSheet = etree.parse(t.archive.file("xl/drawings/drawing1.xml").asText()).getroot(); expect(drawingSheet).toBeDefined(); - drawingSheet.findall('xdr:twoCellAnchor').forEach(element => { - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")){ + drawingSheet.findall("xdr:twoCellAnchor").forEach(element => { + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("3"); expect(element.find("xdr:to/xdr:row").text).toEqual("9"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("2"); expect(element.find("xdr:to/xdr:row").text).toEqual("9"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("1"); expect(element.find("xdr:to/xdr:row").text).toEqual("11"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("10"); expect(element.find("xdr:to/xdr:row").text).toEqual("24"); } }); - fs.writeFileSync('test/output/test_donotmoveImages.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test_donotmoveImages.xlsx", newData, "binary"); done(); }); }); it("Move Images", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-move-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-move-images.xlsx"), function(err, data) { expect(err).toBeNull(); - var option = { + const option = { moveImages : true - } - var t = new XlsxTemplate(data, option); + }; + const t = new XlsxTemplate(data, option); t.substitute(1, { users: [ { @@ -932,36 +935,36 @@ describe("CRUD operations", function() { var newData = t.generate(); var drawingSheet = etree.parse(t.archive.file("xl/drawings/drawing1.xml").asText()).getroot(); expect(drawingSheet).toBeDefined(); - drawingSheet.findall('xdr:twoCellAnchor').forEach(element => { - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")){ + drawingSheet.findall("xdr:twoCellAnchor").forEach(element => { + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("4"); expect(element.find("xdr:to/xdr:row").text).toEqual("10"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("2"); expect(element.find("xdr:to/xdr:row").text).toEqual("9"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("1"); expect(element.find("xdr:to/xdr:row").text).toEqual("11"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("11"); expect(element.find("xdr:to/xdr:row").text).toEqual("25"); } }); - fs.writeFileSync('test/output/test_moveImages.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test_moveImages.xlsx", newData, "binary"); done(); }); }); it("Move Images with sameLine option", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-move-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-move-images.xlsx"), function(err, data) { expect(err).toBeNull(); var option = { moveImages : true, moveSameLineImages : true, - } + }; var t = new XlsxTemplate(data, option); t.substitute(1, { users: [ @@ -978,39 +981,39 @@ describe("CRUD operations", function() { var newData = t.generate(); var drawingSheet = etree.parse(t.archive.file("xl/drawings/drawing1.xml").asText()).getroot(); expect(drawingSheet).toBeDefined(); - drawingSheet.findall('xdr:twoCellAnchor').forEach(element => { - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")){ + drawingSheet.findall("xdr:twoCellAnchor").forEach(element => { + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='3']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("4"); expect(element.find("xdr:to/xdr:row").text).toEqual("10"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='6']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("3"); expect(element.find("xdr:to/xdr:row").text).toEqual("10"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='8']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("1"); expect(element.find("xdr:to/xdr:row").text).toEqual("11"); } - if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")){ + if(element.find("xdr:pic/xdr:nvPicPr/xdr:cNvPr[@id='10']")) { expect(element.find("xdr:from/xdr:row").text).toEqual("11"); expect(element.find("xdr:to/xdr:row").text).toEqual("25"); } }); - fs.writeFileSync('test/output/test_moveImages_withSameLineOption.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/test_moveImages_withSameLineOption.xlsx", newData, "binary"); done(); }); }); it("Insert image and create rels", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-insert-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-insert-images.xlsx"), function(err, data) { expect(err).toBeNull(); var option = { - imageRootPath : path.join(__dirname, 'templates', 'dataset') - } + imageRootPath : path.join(__dirname, "templates", "dataset") + }; var t = new XlsxTemplate(data, option); - var imgB64 = 'iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC'; + var imgB64 = "iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC"; - t.substitute('init_rels', { + t.substitute("init_rels", { imgB64 : imgB64, }); var newData = t.generate(); @@ -1031,25 +1034,25 @@ describe("CRUD operations", function() { expect(relsdrawing2.findall("Relationship")[0].attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"); //TODO : How can i compare the jpg file in the archive with my imgB64 variable ? //var image = t.archive.file("xl/media/image1.jpg"); - fs.writeFileSync('test/output/insert_image.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/insert_image.xlsx", newData, "binary"); done(); }); }); it("Insert some format of image", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-insert-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-insert-images.xlsx"), function(err, data) { expect(err).toBeNull(); var option = { - imageRootPath : path.join(__dirname, 'templates', 'dataset') - } + imageRootPath : path.join(__dirname, "templates", "dataset") + }; var t = new XlsxTemplate(data, option); - var imgB64 = 'iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC'; + var imgB64 = "iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC"; - t.substitute('multi_test', { + t.substitute("multi_test", { imgB64 : imgB64, - imgBuffer : Buffer.from(imgB64, 'base64'), + imgBuffer : Buffer.from(imgB64, "base64"), imgPath : "image1.png", - high : 'high.png', + high : "high.png", large : "large.png", imgArray : [ {filename : "image1.png"}, @@ -1061,24 +1064,24 @@ describe("CRUD operations", function() { }); var newData = t.generate(); //TODO : make some test - fs.writeFileSync('test/output/insert_images_format.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/insert_images_format.xlsx", newData, "binary"); done(); }); }); it("Insert image does not exist", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-insert-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-insert-images.xlsx"), function(err, data) { expect(err).toBeNull(); var option = { - imageRootPath : path.join(__dirname, 'templates', 'dataset') - } + imageRootPath : path.join(__dirname, "templates", "dataset") + }; var t = new XlsxTemplate(data, option); - var imgB64 = 'iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC'; + var imgB64 = "iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC"; - expect(() => {t.substitute('breaking_image', { - imgBuffer : Buffer.from(imgB64, 'base64'), + expect(() => {t.substitute("breaking_image", { + imgBuffer : Buffer.from(imgB64, "base64"), imgPath : "image_does_not_exist.png", - })}).toThrow(TypeError); + });}).toThrow(TypeError); // TODO : @kant2002 if image is null or empty string in user substitution data, throw an error or not ? // expect(() => {t.substitute('breaking_image', { // imgBuffer : Buffer.from(imgB64, 'base64'), @@ -1089,21 +1092,21 @@ describe("CRUD operations", function() { }); it("Catch insert image does not exist", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-insert-images.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-insert-images.xlsx"), function(err, data) { expect(err).toBeNull(); - var substituteImgBuffer = Buffer.from('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', 'base64'); + var substituteImgBuffer = Buffer.from("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", "base64"); var handleImageFunction = function(substitution, error) { return substituteImgBuffer; - } + }; var option = { - imageRootPath : path.join(__dirname, 'templates', 'dataset'), + imageRootPath : path.join(__dirname, "templates", "dataset"), handleImageError : handleImageFunction - } + }; var t = new XlsxTemplate(data, option); - - expect(() => {t.substitute('breaking_image', { + + expect(() => {t.substitute("breaking_image", { imgPath : "image_does_not_exist.png", - })}).not.toThrow(TypeError); + });}).not.toThrow(TypeError); var newData = t.generate(); expect(t.archive.file("xl/media/image1.jpg").asText()).not.toBeNull(); @@ -1113,46 +1116,46 @@ describe("CRUD operations", function() { }); it("Insert 100 image", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-insert-images.xlsx'), function(err, buffer) { + fs.readFile(path.join(__dirname, "templates", "test-insert-images.xlsx"), function(err, buffer) { expect(err).toBeNull(); expect(err).toBeNull(); var option = { - imageRootPath : path.join(__dirname, 'templates', 'dataset') - } + imageRootPath : path.join(__dirname, "templates", "dataset") + }; var t = new XlsxTemplate(buffer, option); - var imgB64 = 'iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC'; + // tslint:disable-next-line:max-line-length + var imgB64 = "iVBORw0KGgoAAAANSUhEUgAAALAAAAA2CAYAAABnXhObAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAUjSURBVHhe7ZtbyGVjGMfXlmmccpqRcYgZmQsTMeVYQiJzozEYJRHCcCUaNy5kyg3KhUNEhjSRbwipIcoF0pRpxiFiLsYUIqcoZ8b2/6/1vKtnv3u9+/smuXjW/v/qv593PetZa+/17f9617vetb9BVVVDSIiQ7GFRiJC0PfBwOGRbiBAMBoPat+qBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoZGBRWhkYBEaGViERgYWoenND9oHg8EFCOdBPJ57cDzfWf5MhLPZBr9AL2LdzmZxFNTui3AdtF+dqKqtqH3F2iOg9g6EVLcFdTPW7gT1CxAuhE6FFkG/Ql9Cm7HtC4gtqL0S4ehmaRzU32XNiWA/VyGcDGGT4c11sifg2Np/hWODB8iXsAJ3p2OBznL5rS5Pfey38wJPuzpqe6HuXFdDfdRVlwRo9r+stkvboYWu/ifLlzTP7z8XOBZ63mqTDuyqjap0XNMwhGCvStjjkeNw9q6ydgtyCxEub5Za5lnMWW0xsQzbn2btEZBfh0DtWSeq6h3oQeghaBMTYCl0UtMc4U/obegN6FXoJWgGXyBPhk7wfrcgfAJdXCemgNrJ3t0RBUo98KeW+wCiIdjmMCLfnpdYNrw+y+us9ltb/6FFisOWvO4Ut/4HaHWh5j7odJdLPfAXvnYuAk/Ztuuhn61NqQcOzt/QM02zWome6gBrJzj2Jey9imC7lQjsrcn1FsmlFj33WiS34Q+/0dotyL0L3QptttR/hT32cuzvWkQec6+ZNgNvaJo1ay3SlLyxOr5Zqm6wWKI1qpluW7NULcF+zrE29zkfId08sid/3Nq7BfazwMvSRfA+j0Lv2eIui71lqgyML/Z1xO+bxepqi+RGizTAW9Ycw0yZxr+8VJP7LZJLLJJjLBIOY2qwj1XQRtOM6VmIMxM5R0CcTWmFunRSzAX1wD0ifZnpMn4kzHCita+xyLEoKX3xNC9NTB7mCwz/ZL3U4A18sEWSThpyCMRenOL+qMsgfxNXD/IKTFqXox64RyRTcqossQ4mvsna5AmLacYinxv3sw9/YNvlFNpp/HoYlldY+2uLhLMMiTchvifFGYlJcJ6YJ0IrnDDcfq703sCkvpsDfAkrMNssxGsut8Ny1O8W2xkHQPOxsdPleOPGxmx6zG3Dyz4bfI9FKe/WP2DrqRUu/6PldnsWwgvwgU3av2YhguOHBX42IA0J/Fj2N4se3/tOwg8j0qwH3+POpjnC/z1G1RCipzxn0eMfBU8y8C70AINcyKeT4iAMIy6y9u3QN02zWoP8y9D50OHQMuTOaFaVQd0JuWxVJ1i/N7SUwqI/QY5CbjG0vy33hrorBmPddCSB2YYQm7L69y3ftW6L5eshBFhiy9R6X5sEOD+caja4PG8QeROX1pXUNYQoaX6qzQV4JcnrvTo/fzSl45nWHpj4YUT+Q5y8B+YPhRJ8nDsG/qjMf9UsVVdYZJ43hpxS4+NjPsHL4Xj8EdTxUXEi7adE/Q0WKD5mNno1rOClr7FzcxkMDS6P+zDiWNIsQg3yeyHHG6kRmGcsrfP50r5zZqvD+sUIh0L8ZdznqONj4zHSZ+ui6/N6sG2xY8K2/1gzNDjG2re9MrCYHpKBp3kIIXqADCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAiNDCxCIwOL0MjAIjQysAhN+x8ZQkREPbAITFX9C5ozpqaetbGcAAAAAElFTkSuQmCC"; var data = { test : "Bug : If remove me, there are an error on ref.match([regex])", - imgArray : [] + imgArray: [] as { filename: string }[] }; - var i; - for (i = 0; i < 100; i++) { - data["imgArray"].push({filename : imgB64}) + for (let i = 0; i < 100; i++) { + data.imgArray.push({ filename : imgB64 }); } - t.substitute('more_than_100', data); + + t.substitute("more_than_100", data); var newData = t.generate(); var drawing2 = etree.parse(t.archive.file("xl/drawings/drawing2.xml").asText()).getroot(); expect(drawing2.findall("xdr:oneCellAnchor").length).toEqual(100); var relsdrawing2 = etree.parse(t.archive.file("xl/drawings/_rels/drawing2.xml.rels").asText()).getroot(); expect(relsdrawing2.findall("Relationship").length).toEqual(100); - var i; - for (i = 1; i < 101; i++) { + for (let i = 1; i < 101; i++) { var image = t.archive.file("xl/media/image" + i + ".jpg"); expect(image == null).toEqual(false); } - fs.writeFileSync('test/output/insert_100_images.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/insert_100_images.xlsx", newData, "binary"); done(); }); }); it("pushDownPageBreakOnTableSubstitution option", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-movePageBreakOption.xlsx'), function(err, buffer) { + fs.readFile(path.join(__dirname, "templates", "test-movePageBreakOption.xlsx"), function(err, buffer) { expect(err).toBeNull(); expect(err).toBeNull(); var option = { pushDownPageBreakOnTableSubstitution : true - } + }; var t = new XlsxTemplate(buffer, option); var data = { myarray : [ @@ -1166,21 +1169,21 @@ describe("CRUD operations", function() { var workbook = etree.parse(t.archive.file("xl/workbook.xml").asText()).getroot(); workbook.findall("definedNames/definedName").forEach(function(name) { - expect(name.text == "Feuil1!$A$1:$J$12") + expect(name.text === "Feuil1!$A$1:$J$12"); }); - - fs.writeFileSync('test/output/movePageBreakOption.xlsx', newData, 'binary'); + + fs.writeFileSync("test/output/movePageBreakOption.xlsx", newData, "binary"); done(); }); }); it("subsituteAllTableRow option", function(done) { - fs.readFile(path.join(__dirname, 'templates', 'test-movePageBreakOption.xlsx'), function(err, buffer) { + fs.readFile(path.join(__dirname, "templates", "test-movePageBreakOption.xlsx"), function(err, buffer) { expect(err).toBeNull(); expect(err).toBeNull(); var option = { subsituteAllTableRow : true - } + }; var t = new XlsxTemplate(buffer, option); var data = { myarray : [ @@ -1207,16 +1210,16 @@ describe("CRUD operations", function() { expect(sheet1.find("./sheetData/row[@r='6']/c[@r='D6']").attrib.s).toEqual("3"); expect(sheet1.find("./sheetData/row[@r='6']/c[@r='F6']/v").text).toEqual("5"); expect(sheet1.find("./sheetData/row[@r='6']/c[@r='H6']").attrib.s).toEqual("4"); - - fs.writeFileSync('test/output/substituteAllTheRow.xlsx', newData, 'binary'); + + fs.writeFileSync("test/output/substituteAllTheRow.xlsx", newData, "binary"); done(); }); }); }); - + describe("Multiple sheets", function() { it("Each sheet should take each name", function (done) { - fs.readFile(path.join(__dirname, 'templates', 'multple-sheets-arrays.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "multple-sheets-arrays.xlsx"), function(err, data) { expect(err).toBeNull(); // Create a template @@ -1224,14 +1227,14 @@ describe("CRUD operations", function() { for (let sheetNumber = 1; sheetNumber <= 2; sheetNumber++) { // Set up some placeholder values matching the placeholders in the template var values = { - page: 'page: ' + sheetNumber, + page: "page: " + sheetNumber, sheetNumber }; - + // Perform substitution t.substitute(sheetNumber, values); } - + // Get binary data var newData = t.generate(); var sharedStrings = etree.parse(t.archive.file("xl/sharedStrings.xml").asText()).getroot(); @@ -1243,14 +1246,14 @@ describe("CRUD operations", function() { expect(getSharedString(sharedStrings, sheet2, "A1")).toEqual("page: 2"); expect(getSharedString(sharedStrings, sheet1, "A2")).toEqual("Page 1"); expect(getSharedString(sharedStrings, sheet2, "A2")).toEqual("Page 2"); - - fs.writeFileSync('test/output/multple-sheets-arrays.xlsx', newData, 'binary'); + + fs.writeFileSync("test/output/multple-sheets-arrays.xlsx", newData, "binary"); done(); }); }); it("Each sheet should be replaced", function (done) { - fs.readFile(path.join(__dirname, 'templates', 'multple-sheet-substitution.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "multple-sheet-substitution.xlsx"), function(err, data) { expect(err).toBeNull(); // Create a template @@ -1258,7 +1261,7 @@ describe("CRUD operations", function() { t.substituteAll({ foo: "bar" }); - + // Get binary data var newData = t.generate(); var sharedStrings = etree.parse(t.archive.file("xl/sharedStrings.xml").asText()).getroot(); @@ -1268,8 +1271,8 @@ describe("CRUD operations", function() { expect(sheet2).toBeDefined(); expect(getSharedString(sharedStrings, sheet1, "A1")).toEqual("bar"); expect(getSharedString(sharedStrings, sheet2, "A1")).toEqual("bar"); - - fs.writeFileSync('test/output/multple-sheet-substitution.xlsx', newData, 'binary'); + + fs.writeFileSync("test/output/multple-sheet-substitution.xlsx", newData, "binary"); done(); }); }); @@ -1277,7 +1280,7 @@ describe("CRUD operations", function() { describe("Copy sheets", function() { it("Standard-copy-sheets", function (done) { - fs.readFile(path.join(__dirname, 'templates', 'test-copy-sheet.xlsx'), function(err, data) { + fs.readFile(path.join(__dirname, "templates", "test-copy-sheet.xlsx"), function(err, data) { expect(err).toBeNull(); // Create a template var t = new XlsxTemplate(data); @@ -1309,7 +1312,7 @@ describe("CRUD operations", function() { expect(copysheet7.find("headerFooter/oddHeader").text).toEqual("<EST UTF8 éàè&ùï&C&A"); // Get binary data var newData = t.generate(); - fs.writeFileSync('test/output/copy-sheet.xlsx', newData, 'binary'); + fs.writeFileSync("test/output/copy-sheet.xlsx", newData, "binary"); done(); }); }); @@ -1317,7 +1320,7 @@ describe("CRUD operations", function() { describe("Rebuild file", function() { it("Rebuild archive file with custom Relationship workbook rels after delete a sheet", function (done) { - fs.readFile(path.join(__dirname, 'templates', 'custom-xml.xlsx'), function(err, buffer) { + fs.readFile(path.join(__dirname, "templates", "custom-xml.xlsx"), function(err, buffer) { expect(err).toBeNull(); // Create a template var t = new XlsxTemplate(buffer); @@ -1325,21 +1328,28 @@ describe("CRUD operations", function() { t.deleteSheet("Sheet2"); var newData = t.generate(); var wbrels = etree.parse(t.archive.file("xl/_rels/workbook.xml.rels").asText()).getroot(); - expect(wbrels.find("Relationship[@Id='rId1']").attrib.Target).toEqual("worksheets/sheet1.xml"); - expect(wbrels.find("Relationship[@Id='rId1']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"); - expect(wbrels.find("Relationship[@Id='rId2']").attrib.Target).toEqual("worksheets/sheet3.xml"); - expect(wbrels.find("Relationship[@Id='rId2']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"); - expect(wbrels.find("Relationship[@Id='rId3']").attrib.Target).toEqual("theme/theme1.xml"); - expect(wbrels.find("Relationship[@Id='rId3']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"); - expect(wbrels.find("Relationship[@Id='rId4']").attrib.Target).toEqual("styles.xml"); - expect(wbrels.find("Relationship[@Id='rId4']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"); - expect(wbrels.find("Relationship[@Id='rId5']").attrib.Target).toEqual("sharedStrings.xml"); - expect(wbrels.find("Relationship[@Id='rId5']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"); - expect(wbrels.find("Relationship[@Id='rId6']").attrib.Target).toEqual("xmlMaps.xml"); - expect(wbrels.find("Relationship[@Id='rId6']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/xmlMaps"); - expect(wbrels.find("Relationship[@Id='rId7']").attrib.Target).toEqual("connections.xml"); - expect(wbrels.find("Relationship[@Id='rId7']").attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections"); - fs.writeFileSync('test/output/custom-xml.xlsx', newData, 'binary'); + const relationship1 = wbrels.find("Relationship[@Id='rId1']"); + expect(relationship1.attrib.Target).toEqual("worksheets/sheet1.xml"); + expect(relationship1.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"); + const relationship2 = wbrels.find("Relationship[@Id='rId2']"); + expect(relationship2.attrib.Target).toEqual("worksheets/sheet3.xml"); + expect(relationship2.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"); + const relationship3 = wbrels.find("Relationship[@Id='rId3']"); + expect(relationship3.attrib.Target).toEqual("theme/theme1.xml"); + expect(relationship3.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"); + const relationship4 = wbrels.find("Relationship[@Id='rId4']"); + expect(relationship4.attrib.Target).toEqual("styles.xml"); + expect(relationship4.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"); + const relationship5 = wbrels.find("Relationship[@Id='rId5']"); + expect(relationship5.attrib.Target).toEqual("sharedStrings.xml"); + expect(relationship5.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"); + const relationship6 = wbrels.find("Relationship[@Id='rId6']"); + expect(relationship6.attrib.Target).toEqual("xmlMaps.xml"); + expect(relationship6.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/xmlMaps"); + const relationship7 = wbrels.find("Relationship[@Id='rId7']"); + expect(relationship7.attrib.Target).toEqual("connections.xml"); + expect(relationship7.attrib.Type).toEqual("http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections"); + fs.writeFileSync("test/output/custom-xml.xlsx", newData, "binary"); done(); }); });