@sme.up/doc-alchemist 1.1.0-SNAPSHOT-20250623155458 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +278 -30
  2. package/dist/assets/gfx-data.d.ts +1 -0
  3. package/dist/assets/gfx-data.js +2 -0
  4. package/dist/assets/gfx-data.js.map +1 -0
  5. package/dist/converters/excel/commons.d.ts +35 -0
  6. package/dist/converters/excel/commons.js +216 -0
  7. package/dist/converters/excel/commons.js.map +1 -0
  8. package/dist/{src/excel/excel-generator.types.d.ts → converters/excel/excel-converter.types.d.ts} +1 -0
  9. package/dist/{src/excel/excel-generator.types.js → converters/excel/excel-converter.types.js} +4 -2
  10. package/dist/converters/excel/excel-converter.types.js.map +1 -0
  11. package/dist/{src/excel/matrix-generator.d.ts → converters/excel/matrix-converter.d.ts} +4 -2
  12. package/dist/{src/excel/matrix-generator.js → converters/excel/matrix-converter.js} +32 -17
  13. package/dist/converters/excel/matrix-converter.js.map +1 -0
  14. package/dist/{src/excel/tree-generator.d.ts → converters/excel/tree-converter.d.ts} +2 -2
  15. package/dist/{src/excel/tree-generator.js → converters/excel/tree-converter.js} +5 -5
  16. package/dist/converters/excel/tree-converter.js.map +1 -0
  17. package/dist/{src/excel/excel-generator.d.ts → converters/excel-converter.d.ts} +2 -1
  18. package/dist/{src/excel/excel-generator.js → converters/excel-converter.js} +4 -4
  19. package/dist/converters/excel-converter.js.map +1 -0
  20. package/dist/converters/images/charts-generator.d.ts +9 -0
  21. package/dist/converters/images/charts-generator.js +250 -0
  22. package/dist/converters/images/charts-generator.js.map +1 -0
  23. package/dist/converters/pdf/autotable-renderer.d.ts +3 -0
  24. package/dist/converters/pdf/autotable-renderer.js +89 -0
  25. package/dist/converters/pdf/autotable-renderer.js.map +1 -0
  26. package/dist/converters/pdf/cover-renderer.d.ts +1 -0
  27. package/dist/converters/pdf/cover-renderer.js +26 -0
  28. package/dist/converters/pdf/cover-renderer.js.map +1 -0
  29. package/dist/converters/pdf/formulas-helper.d.ts +40 -0
  30. package/dist/converters/pdf/formulas-helper.js +227 -0
  31. package/dist/converters/pdf/formulas-helper.js.map +1 -0
  32. package/dist/converters/pdf/matrix-converter.d.ts +16 -0
  33. package/dist/converters/pdf/matrix-converter.js +198 -0
  34. package/dist/converters/pdf/matrix-converter.js.map +1 -0
  35. package/dist/converters/pdf/pdf-converter.types.d.ts +12 -0
  36. package/dist/converters/pdf/pdf-converter.types.js +2 -0
  37. package/dist/converters/pdf/pdf-converter.types.js.map +1 -0
  38. package/dist/converters/pdf/sch-converter.d.ts +3 -0
  39. package/dist/converters/pdf/sch-converter.js +99 -0
  40. package/dist/converters/pdf/sch-converter.js.map +1 -0
  41. package/dist/converters/pdf-converter.d.ts +8 -0
  42. package/dist/converters/pdf-converter.js +44 -0
  43. package/dist/converters/pdf-converter.js.map +1 -0
  44. package/dist/index.d.ts +7 -4
  45. package/dist/index.js +4 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/types/component.d.ts +53 -0
  48. package/dist/types/component.js +53 -0
  49. package/dist/types/component.js.map +1 -0
  50. package/dist/types/data-structures/smeupDataStructure.d.ts +215 -0
  51. package/dist/types/data-structures/smeupDataStructure.js +99 -0
  52. package/dist/types/data-structures/smeupDataStructure.js.map +1 -0
  53. package/dist/types/data-structures/smeupDataTable.d.ts +116 -0
  54. package/dist/types/data-structures/smeupDataTable.js +43 -0
  55. package/dist/types/data-structures/smeupDataTable.js.map +1 -0
  56. package/dist/types/data-structures/smeupDataTree.d.ts +13 -0
  57. package/dist/types/data-structures/smeupDataTree.js +2 -0
  58. package/dist/types/data-structures/smeupDataTree.js.map +1 -0
  59. package/dist/types/data-structures/smeupSch.d.ts +72 -0
  60. package/dist/types/data-structures/smeupSch.js +11 -0
  61. package/dist/types/data-structures/smeupSch.js.map +1 -0
  62. package/dist/types/dynamism.d.ts +45 -0
  63. package/dist/types/dynamism.js +30 -0
  64. package/dist/types/dynamism.js.map +1 -0
  65. package/dist/types/general.d.ts +22 -0
  66. package/dist/types/general.js +24 -0
  67. package/dist/types/general.js.map +1 -0
  68. package/dist/types/helpers.d.ts +4 -0
  69. package/dist/types/helpers.js +6 -0
  70. package/dist/types/helpers.js.map +1 -0
  71. package/dist/{src/types → types}/index.d.ts +8 -2
  72. package/dist/{src/types → types}/index.js +1 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/dist/utils/commons-utility.d.ts +59 -0
  75. package/dist/{src/utils/generator-utility.js → utils/commons-utility.js} +63 -10
  76. package/dist/utils/commons-utility.js.map +1 -0
  77. package/dist/utils/datastructure-utility.d.ts +2 -0
  78. package/dist/utils/datastructure-utility.js +5 -0
  79. package/dist/utils/datastructure-utility.js.map +1 -0
  80. package/dist/{src/utils → utils}/dates-utility.d.ts +9 -0
  81. package/dist/{src/utils → utils}/dates-utility.js +18 -0
  82. package/dist/utils/dates-utility.js.map +1 -0
  83. package/dist/utils/formatter-utility.d.ts +3 -0
  84. package/dist/utils/formatter-utility.js +36 -0
  85. package/dist/utils/formatter-utility.js.map +1 -0
  86. package/dist/{src/utils → utils}/math-utility.d.ts +1 -0
  87. package/dist/{src/utils → utils}/math-utility.js +10 -0
  88. package/dist/utils/math-utility.js.map +1 -0
  89. package/dist/utils/objects-utility.js.map +1 -0
  90. package/dist/utils/regex-utility.js.map +1 -0
  91. package/package.json +13 -11
  92. package/dist/assets/sample-data.d.ts +0 -48
  93. package/dist/assets/sample-data.js +0 -372
  94. package/dist/assets/sample-data.js.map +0 -1
  95. package/dist/debug.d.ts +0 -1
  96. package/dist/debug.js +0 -29
  97. package/dist/debug.js.map +0 -1
  98. package/dist/src/excel/commons.d.ts +0 -21
  99. package/dist/src/excel/commons.js +0 -120
  100. package/dist/src/excel/commons.js.map +0 -1
  101. package/dist/src/excel/excel-generator.js.map +0 -1
  102. package/dist/src/excel/excel-generator.types.js.map +0 -1
  103. package/dist/src/excel/matrix-generator.js.map +0 -1
  104. package/dist/src/excel/tree-generator.js.map +0 -1
  105. package/dist/src/index.d.ts +0 -1
  106. package/dist/src/index.js +0 -2
  107. package/dist/src/index.js.map +0 -1
  108. package/dist/src/pdf/pdf-generator.d.ts +0 -7
  109. package/dist/src/pdf/pdf-generator.js +0 -28
  110. package/dist/src/pdf/pdf-generator.js.map +0 -1
  111. package/dist/src/types/index.js.map +0 -1
  112. package/dist/src/utils/datastructure-utility.d.ts +0 -2
  113. package/dist/src/utils/datastructure-utility.js +0 -5
  114. package/dist/src/utils/datastructure-utility.js.map +0 -1
  115. package/dist/src/utils/dates-utility.js.map +0 -1
  116. package/dist/src/utils/generator-utility.d.ts +0 -34
  117. package/dist/src/utils/generator-utility.js.map +0 -1
  118. package/dist/src/utils/math-utility.js.map +0 -1
  119. package/dist/src/utils/objects-utility.js.map +0 -1
  120. package/dist/src/utils/regex-utility.js.map +0 -1
  121. package/dist/tests/excel-generator.test.d.ts +0 -1
  122. package/dist/tests/excel-generator.test.js +0 -406
  123. package/dist/tests/excel-generator.test.js.map +0 -1
  124. /package/dist/{src/utils → utils}/objects-utility.d.ts +0 -0
  125. /package/dist/{src/utils → utils}/objects-utility.js +0 -0
  126. /package/dist/{src/utils → utils}/regex-utility.d.ts +0 -0
  127. /package/dist/{src/utils → utils}/regex-utility.js +0 -0
@@ -1,406 +0,0 @@
1
- import { addStyleToExceljsRow, dataTableToExcelWorkbook, getExcelNumFormat, } from "../src/index.js";
2
- import { SupportedExportFormats, } from "../src/types/index.js";
3
- import ExcelJS from "exceljs";
4
- import { data_table_totals_result_sample_1, table_footer_actions, table_sample_1, table_sample_2, totals_sample_1, tree_grid_sample_1, } from "../assets/sample-data.js";
5
- import { smeupFormulaToExcelFormula } from "../src/excel/commons.js";
6
- import { dataTreeToExcelWorkbook } from "../src/excel/tree-generator.js";
7
- const Workbook = ExcelJS.Workbook;
8
- // #region Tests
9
- describe("Export Manager Test", () => {
10
- it("Formula conversion", () => {
11
- const formulaExamples = {
12
- ["[N1]+[N2]"]: "A1+B1", // Row 1
13
- ["1+1"]: "1+1", // Row 2
14
- ["[N1]+[N2]+[N3]+[N4]"]: "A3+B3+C3+D3", // Row 3
15
- ["1,234+1,0001"]: "1.234+1.0001", // Row 4
16
- ["[N1]+[N2]-[N1]-[N2]"]: "A5+B5-A5-B5", // Row 5
17
- ["([N1]+[N2]/[N3]+[N4])/10"]: "(A6+B6/C6+D6)/10", // Row 6
18
- ["[N1]*[N2]"]: "A7*B7", // Row 7
19
- ["[N1]/0"]: "A8/0", // Row 8
20
- ["([N1]+[N2])-[N1]"]: "(A9+B9)-A9", // Row 9
21
- ["([N1]+[N120])"]: "(A10+DP10)", // Row 10
22
- };
23
- Object.keys(formulaExamples).forEach((smeupFormula, i) => {
24
- expect(smeupFormulaToExcelFormula(smeupFormula, i, getColumns(120))).toBe(formulaExamples[smeupFormula]);
25
- });
26
- });
27
- it("Number format creation", () => {
28
- const cellsFormatNumbers = [
29
- {
30
- data: {
31
- decimals: 0,
32
- },
33
- },
34
- {
35
- data: {
36
- decimals: 1,
37
- },
38
- },
39
- {
40
- data: {
41
- decimals: 2,
42
- },
43
- },
44
- {
45
- data: {
46
- decimals: 3,
47
- },
48
- },
49
- {
50
- data: {
51
- decimals: 4,
52
- },
53
- },
54
- ];
55
- cellsFormatNumbers.forEach((cell, index) => {
56
- const format = "0." + `${index > 0 ? "0".repeat(index) : "00"}`;
57
- expect(getExcelNumFormat(cell.data?.decimals ?? 0, cell.data ?? 0)).toBe(format + ";[Red]-" + format);
58
- });
59
- });
60
- describe("SmeupDataTable export", () => {
61
- it("xlsx format", async () => {
62
- const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.XLSX, {});
63
- const worksheet = workbook.getWorksheet(1);
64
- // Test number of columns
65
- expect(worksheet?.columnCount).toBe(8);
66
- // Test number of rows
67
- expect(worksheet?.actualRowCount).toBe(3);
68
- });
69
- it("xlsx with frozen data to ensure immutability does not affect the export", async () => {
70
- const workbook = dataTableToExcelWorkbook(Object.freeze(table_sample_1), SupportedExportFormats.XLSX, {});
71
- const worksheet = workbook.getWorksheet(1);
72
- // Test number of columns
73
- expect(worksheet?.columnCount).toBe(8);
74
- // Test number of rows
75
- expect(worksheet?.actualRowCount).toBe(3);
76
- });
77
- it("csv format", async () => {
78
- const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.CSV, {});
79
- const worksheet = workbook.getWorksheet(1);
80
- // Test number of columns
81
- expect(worksheet?.columnCount).toBe(8);
82
- // Test number of rows
83
- expect(worksheet?.actualRowCount).toBe(3);
84
- });
85
- it("txt format", async () => {
86
- const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.TXT, {});
87
- const worksheet = workbook.getWorksheet(1);
88
- // Test number of columns
89
- expect(worksheet?.columnCount).toBe(8);
90
- // Test number of rows
91
- expect(worksheet?.actualRowCount).toBe(3);
92
- });
93
- it("With groups and outline 2 levels", async () => {
94
- const workbook = dataTableToExcelWorkbook(table_sample_2, SupportedExportFormats.XLSX, {});
95
- const worksheet = workbook.getWorksheet(1);
96
- expect(worksheet?.getRow(2).outlineLevel).toBe(0);
97
- expect(worksheet?.getRow(3).outlineLevel).toBe(1);
98
- expect(worksheet?.getRow(4).outlineLevel).toBe(2);
99
- expect(worksheet?.getRow(5).outlineLevel).toBe(0);
100
- expect(worksheet?.getRow(6).outlineLevel).toBe(1);
101
- expect(worksheet?.getRow(7).outlineLevel).toBe(2);
102
- });
103
- it("With the first group visibility set to false", async () => {
104
- const first_grp_vis_false = JSON.parse(JSON.stringify(table_sample_2));
105
- first_grp_vis_false.props.groups[0].visible = false;
106
- const workbook = dataTableToExcelWorkbook(first_grp_vis_false, SupportedExportFormats.XLSX, {});
107
- const worksheet = workbook.getWorksheet(1);
108
- // The visibility of the first group does not affect the number of columns
109
- expect(worksheet?.columnCount).toBe(3);
110
- });
111
- it("With the visibleColumns set", async () => {
112
- const withVisibleColumns = JSON.parse(JSON.stringify(table_sample_2));
113
- withVisibleColumns.props.visibleColumns = ["DSC", "1"];
114
- const workbook = dataTableToExcelWorkbook(withVisibleColumns, SupportedExportFormats.XLSX, {});
115
- const worksheet = workbook.getWorksheet(1);
116
- expect(worksheet).toBeDefined();
117
- expect(worksheet?.columnCount).toBe(2);
118
- expect(worksheet?.getColumn(1).key).toBe("DSC");
119
- expect(worksheet?.getColumn(2).key).toBe("1");
120
- });
121
- it("With totals", async () => {
122
- const table_totals = JSON.parse(JSON.stringify(table_sample_1));
123
- table_totals.props = {
124
- ...table_totals.props,
125
- totals: totals_sample_1,
126
- };
127
- const workbook = dataTableToExcelWorkbook(table_totals, SupportedExportFormats.XLSX, {});
128
- const worksheet = workbook.getWorksheet(1);
129
- // Test number of columns
130
- expect(worksheet?.columnCount).toBe(8);
131
- // Test number of rows
132
- expect(worksheet?.rowCount).toBe(4);
133
- // Check totals row
134
- worksheet?.getRow(4).eachCell((cell) => {
135
- const columnName = worksheet?.getColumn(cell.col).key;
136
- if (columnName !== undefined) {
137
- expect(cell.formula).toBe(data_table_totals_result_sample_1[columnName]);
138
- }
139
- });
140
- });
141
- it("With groups subtotals correct range and action", () => {
142
- const totalsExpectedFormula = {
143
- Count: "SUBTOTAL(3,C2:C2)",
144
- Sum: "SUBTOTAL(9,C2:C2)",
145
- Max: "SUBTOTAL(4,C2:C2)",
146
- Min: "SUBTOTAL(5,C2:C2)",
147
- Average: "SUBTOTAL(1,C2:C2)",
148
- };
149
- const totalsExpectedSubAction = {
150
- Count: "3",
151
- Sum: "9",
152
- Max: "4",
153
- Min: "5",
154
- Average: "1",
155
- };
156
- Object.keys(totalsExpectedFormula).forEach(async (total) => {
157
- const workbook = dataTableToExcelWorkbook(table_footer_actions(total, [
158
- { column: "1", visible: true },
159
- { column: "2", visible: true },
160
- ], 2, 2), SupportedExportFormats.XLSX, {});
161
- const worksheet = workbook.getWorksheet(1);
162
- const totalKey = total;
163
- expect(worksheet?.getRow(2).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C3:C5)`);
164
- expect(worksheet?.getRow(3).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C4:C5)`);
165
- expect(worksheet?.getRow(6).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C7:C9)`);
166
- expect(worksheet?.getRow(7).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C8:C9)`);
167
- });
168
- });
169
- });
170
- describe("SmeupDataTree export - with levels split", () => {
171
- it("xlsx format - with levels split", async () => {
172
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.XLSX, {}, true);
173
- const worksheet = workbook.getWorksheet(1);
174
- expect(worksheet).toBeTruthy();
175
- // Test number of columns -> all tree nodes are under the same column with indentation
176
- expect(worksheet?.columnCount).toBe(11);
177
- // Test number of rows
178
- expect(worksheet?.actualRowCount).toBe(6);
179
- });
180
- it("xlsx format with split nodes to columns - with levels split", async () => {
181
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.XLSX, {}, true);
182
- const worksheet = workbook.getWorksheet(1);
183
- expect(worksheet).toBeTruthy();
184
- // Test number of columns -> new column for each tree node
185
- expect(worksheet?.columnCount).toBe(11);
186
- // Test number of rows
187
- expect(worksheet?.actualRowCount).toBe(6);
188
- });
189
- it("csv format - with levels split", async () => {
190
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.CSV, {}, true);
191
- const worksheet = workbook.getWorksheet(1);
192
- expect(worksheet).toBeDefined();
193
- expect(worksheet).not.toBeNull();
194
- // Test number of columns -> all tree nodes are under the same column with indentation
195
- expect(worksheet?.columnCount).toBe(11);
196
- // Test number of rows
197
- expect(worksheet?.actualRowCount).toBe(6);
198
- });
199
- it("txt format - with levels split", async () => {
200
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.TXT, {}, true);
201
- const worksheet = workbook.getWorksheet(1);
202
- expect(worksheet).toBeTruthy();
203
- // Test number of columns -> all tree nodes are under the same column with indentation
204
- expect(worksheet?.columnCount).toBe(11);
205
- // Test number of rows
206
- expect(worksheet?.actualRowCount).toBe(6);
207
- });
208
- it("With totals - with levels split", async () => {
209
- const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));
210
- tree_grid_totals.props = {
211
- ...tree_grid_totals.props,
212
- totals: totals_sample_1,
213
- };
214
- const tree_grid_totals_result_sample_1 = {
215
- COL1: "SUBTOTAL(3,D2:D6)",
216
- HIDDEN_COL: "SUBTOTAL(9,F2:F6)",
217
- SUM_COL: "SUBTOTAL(9,G2:G6)",
218
- AVG_COL: "SUBTOTAL(1,H2:H6)",
219
- MIN_COL: "SUBTOTAL(5,I2:I6)",
220
- MAX_COL: "SUBTOTAL(4,J2:J6)",
221
- DIFF_COL: `(F7-G7)`,
222
- };
223
- const workbook = await dataTreeToExcelWorkbook(tree_grid_totals, SupportedExportFormats.XLSX, {}, true);
224
- const worksheet = workbook.getWorksheet(1);
225
- expect(worksheet).toBeTruthy();
226
- // Test number of columns
227
- expect(worksheet?.columnCount).toBe(11);
228
- // Test number of rows
229
- expect(worksheet?.rowCount).toBe(7);
230
- // Check totals row
231
- worksheet?.getRow(7).eachCell((cell) => {
232
- const columnName = worksheet?.getColumn(cell.col).key;
233
- if (columnName) {
234
- expect(cell.formula).toBe(tree_grid_totals_result_sample_1[columnName]);
235
- }
236
- });
237
- });
238
- it("With split nodes to columns and totals", async () => {
239
- const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));
240
- tree_grid_totals.props = {
241
- ...tree_grid_totals.props,
242
- totals: totals_sample_1,
243
- };
244
- const tree_grid_totals_result_sample_1 = {
245
- COL1: "SUBTOTAL(3,D2:D6)",
246
- HIDDEN_COL: "SUBTOTAL(9,F2:F6)",
247
- SUM_COL: "SUBTOTAL(9,G2:G6)",
248
- AVG_COL: "SUBTOTAL(1,H2:H6)",
249
- MIN_COL: "SUBTOTAL(5,I2:I6)",
250
- MAX_COL: "SUBTOTAL(4,J2:J6)",
251
- DIFF_COL: `(F7-G7)`,
252
- };
253
- const workbook = await dataTreeToExcelWorkbook(tree_grid_totals, SupportedExportFormats.XLSX, {}, true);
254
- const worksheet = workbook.getWorksheet(1);
255
- expect(worksheet).toBeTruthy();
256
- // Test number of columns
257
- expect(worksheet?.columnCount).toBe(11);
258
- // Test number of rows
259
- expect(worksheet?.rowCount).toBe(7);
260
- // Check totals row
261
- worksheet?.getRow(7).eachCell((cell) => {
262
- const columnName = worksheet.getColumn(cell.col).key;
263
- expect(columnName).toBeTruthy();
264
- if (columnName) {
265
- expect(cell.formula).toBe(tree_grid_totals_result_sample_1[columnName]);
266
- }
267
- });
268
- });
269
- });
270
- describe("SmeupDataTree export - no levels split", () => {
271
- it("xlsx format - no levels split", async () => {
272
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.XLSX, {}, false);
273
- const worksheet = workbook.getWorksheet(1);
274
- expect(worksheet).toBeTruthy();
275
- // Test number of columns -> all tree nodes are under the same column with indentation
276
- expect(worksheet?.columnCount).toBe(9);
277
- // Test number of rows
278
- expect(worksheet?.actualRowCount).toBe(6);
279
- });
280
- it("xlsx format with split nodes to columns - no levels split", async () => {
281
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.XLSX, {}, false);
282
- const worksheet = workbook.getWorksheet(1);
283
- expect(worksheet).toBeTruthy();
284
- // Test number of columns -> new column for each tree node
285
- expect(worksheet?.columnCount).toBe(9);
286
- // Test number of rows
287
- expect(worksheet?.actualRowCount).toBe(6);
288
- });
289
- it("csv format - no levels split", async () => {
290
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.CSV, {}, false);
291
- const worksheet = workbook.getWorksheet(1);
292
- expect(worksheet).toBeTruthy();
293
- // Test number of columns -> all tree nodes are under the same column with indentation
294
- expect(worksheet?.columnCount).toBe(9);
295
- // Test number of rows
296
- expect(worksheet?.actualRowCount).toBe(6);
297
- });
298
- it("txt format - no levels split", async () => {
299
- const workbook = await dataTreeToExcelWorkbook(tree_grid_sample_1, SupportedExportFormats.TXT, {}, false);
300
- const worksheet = workbook.getWorksheet(1);
301
- expect(worksheet).toBeTruthy();
302
- // Test number of columns -> all tree nodes are under the same column with indentation
303
- expect(worksheet?.columnCount).toBe(9);
304
- // Test number of rows
305
- expect(worksheet?.actualRowCount).toBe(6);
306
- });
307
- it("With totals - no levels split", async () => {
308
- const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));
309
- tree_grid_totals.props = {
310
- ...tree_grid_totals.props,
311
- totals: totals_sample_1,
312
- };
313
- const tree_grid_totals_result_sample_1 = {
314
- COL1: "SUBTOTAL(3,B2:B6)",
315
- HIDDEN_COL: "SUBTOTAL(9,D2:D6)",
316
- SUM_COL: "SUBTOTAL(9,E2:E6)",
317
- AVG_COL: "SUBTOTAL(1,F2:F6)",
318
- MIN_COL: "SUBTOTAL(5,G2:G6)",
319
- MAX_COL: "SUBTOTAL(4,H2:H6)",
320
- DIFF_COL: `(D7-E7)`,
321
- };
322
- const workbook = await dataTreeToExcelWorkbook(tree_grid_totals, SupportedExportFormats.XLSX, {}, false);
323
- const worksheet = workbook.getWorksheet(1);
324
- expect(worksheet).toBeTruthy();
325
- // Test number of columns
326
- expect(worksheet?.columnCount).toBe(9);
327
- // Test number of rows
328
- expect(worksheet?.rowCount).toBe(7);
329
- // Check totals row
330
- worksheet?.getRow(7).eachCell((cell) => {
331
- const columnName = worksheet.getColumn(cell.col).key;
332
- expect(columnName).toBeTruthy();
333
- if (columnName) {
334
- expect(cell.formula).toBe(tree_grid_totals_result_sample_1[columnName]);
335
- }
336
- });
337
- });
338
- });
339
- });
340
- describe("Cell to XLSX Style converter", () => {
341
- const cellStyle = {
342
- fontWeight: "bold",
343
- backgroundColor: "#74c0f2",
344
- color: "#000000",
345
- };
346
- const cellResult = {
347
- fill: {
348
- type: "pattern",
349
- pattern: "solid",
350
- fgColor: { argb: "FF74c0f2" },
351
- },
352
- font: { bold: true, color: { argb: "FF000000" } },
353
- };
354
- it("SmeupDataCell - Style calculations", async () => {
355
- const workbook = new Workbook();
356
- const worksheet = workbook.addWorksheet("Sheet 1");
357
- const row = worksheet.addRow(["Mario Rossi"]);
358
- addStyleToExceljsRow(row, [{ name: "A", title: "A" }], {
359
- cells: {
360
- A: {
361
- value: "",
362
- obj: {
363
- t: "",
364
- p: "",
365
- k: "",
366
- },
367
- style: cellStyle,
368
- },
369
- },
370
- });
371
- expect(row.getCell(1).style).toStrictEqual(cellResult);
372
- });
373
- it("SmeupDataNode - Style calculations", async () => {
374
- const workbook = new Workbook();
375
- const worksheet = workbook.addWorksheet("Sheet 1");
376
- const row = worksheet.addRow(["Mario Rossi"]);
377
- addStyleToExceljsRow(row, [{ name: "A", title: "A" }], {
378
- cells: {
379
- A: {
380
- value: "",
381
- obj: {
382
- t: "",
383
- p: "",
384
- k: "",
385
- },
386
- style: {},
387
- },
388
- },
389
- style: cellStyle,
390
- });
391
- expect(row.getCell(1).style).toStrictEqual(cellResult);
392
- });
393
- });
394
- // #endregion
395
- // #region Assets
396
- const getColumns = (numberColumns) => {
397
- const columns = [];
398
- for (let num = 1; num <= numberColumns; num++) {
399
- columns.push({
400
- name: `N${num}`,
401
- title: "",
402
- });
403
- }
404
- return columns;
405
- };
406
- //# sourceMappingURL=excel-generator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"excel-generator.test.js","sourceRoot":"","sources":["../../tests/excel-generator.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SmeupDataCell,\n SmeupDataRow,\n SmeupDataColumn,\n SmeupDataNode,\n SmeupDataTable,\n} from \"@sme.up/kokos-sdk-node\";\nimport {\n addStyleToExceljsRow,\n dataTableToExcelWorkbook,\n getExcelNumFormat,\n} from \"../src/index.js\";\nimport {\n GenericObject,\n SupportedExportFormats,\n WebupManagerData,\n} from \"../src/types/index.js\";\nimport ExcelJS from \"exceljs\";\nimport {\n data_table_totals_result_sample_1,\n table_footer_actions,\n table_sample_1,\n table_sample_2,\n totals_sample_1,\n tree_grid_sample_1,\n} from \"../assets/sample-data.js\";\nimport { smeupFormulaToExcelFormula } from \"../src/excel/commons.js\";\nimport { dataTreeToExcelWorkbook } from \"../src/excel/tree-generator.js\";\nimport { ColumnGroup } from \"../index.js\";\n\ntype Workbook = ExcelJS.Workbook;\ntype Cell = ExcelJS.Cell;\ntype Row = ExcelJS.Row;\ntype Style = ExcelJS.Style;\nconst Workbook = ExcelJS.Workbook;\n\n// #region Tests\ndescribe(\"Export Manager Test\", () => {\n it(\"Formula conversion\", () => {\n const formulaExamples = {\n [\"[N1]+[N2]\"]: \"A1+B1\", // Row 1\n [\"1+1\"]: \"1+1\", // Row 2\n [\"[N1]+[N2]+[N3]+[N4]\"]: \"A3+B3+C3+D3\", // Row 3\n [\"1,234+1,0001\"]: \"1.234+1.0001\", // Row 4\n [\"[N1]+[N2]-[N1]-[N2]\"]: \"A5+B5-A5-B5\", // Row 5\n [\"([N1]+[N2]/[N3]+[N4])/10\"]: \"(A6+B6/C6+D6)/10\", // Row 6\n [\"[N1]*[N2]\"]: \"A7*B7\", // Row 7\n [\"[N1]/0\"]: \"A8/0\", // Row 8\n [\"([N1]+[N2])-[N1]\"]: \"(A9+B9)-A9\", // Row 9\n [\"([N1]+[N120])\"]: \"(A10+DP10)\", // Row 10\n } as Record<string, string>;\n\n Object.keys(formulaExamples).forEach((smeupFormula, i) => {\n expect(smeupFormulaToExcelFormula(smeupFormula, i, getColumns(120))).toBe(\n formulaExamples[smeupFormula],\n );\n });\n });\n\n it(\"Number format creation\", () => {\n const cellsFormatNumbers: Partial<SmeupDataCell>[] = [\n {\n data: {\n decimals: 0,\n },\n },\n {\n data: {\n decimals: 1,\n },\n },\n {\n data: {\n decimals: 2,\n },\n },\n {\n data: {\n decimals: 3,\n },\n },\n {\n data: {\n decimals: 4,\n },\n },\n ];\n\n cellsFormatNumbers.forEach((cell, index) => {\n const format = \"0.\" + `${index > 0 ? \"0\".repeat(index) : \"00\"}`;\n expect(\n getExcelNumFormat(\n (cell.data?.decimals as number) ?? 0,\n (cell.data as unknown as number) ?? 0,\n ),\n ).toBe(format + \";[Red]-\" + format);\n });\n });\n\n describe(\"SmeupDataTable export\", () => {\n it(\"xlsx format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"xlsx with frozen data to ensure immutability does not affect the export\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n Object.freeze(table_sample_1),\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"csv format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.CSV,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"txt format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.TXT,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"With groups and outline 2 levels\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_2,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet?.getRow(2).outlineLevel).toBe(0);\n expect(worksheet?.getRow(3).outlineLevel).toBe(1);\n expect(worksheet?.getRow(4).outlineLevel).toBe(2);\n expect(worksheet?.getRow(5).outlineLevel).toBe(0);\n expect(worksheet?.getRow(6).outlineLevel).toBe(1);\n expect(worksheet?.getRow(7).outlineLevel).toBe(2);\n });\n\n it(\"With the first group visibility set to false\", async () => {\n const first_grp_vis_false = JSON.parse(\n JSON.stringify(table_sample_2),\n ) as { smeupDataTable: SmeupDataTable; props: GenericObject };\n\n (first_grp_vis_false.props.groups as ColumnGroup[])[0].visible = false;\n\n const workbook: Workbook = dataTableToExcelWorkbook(\n first_grp_vis_false,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // The visibility of the first group does not affect the number of columns\n expect(worksheet?.columnCount).toBe(3);\n });\n\n it(\"With the visibleColumns set\", async () => {\n const withVisibleColumns = JSON.parse(JSON.stringify(table_sample_2)) as {\n smeupDataTable: SmeupDataTable;\n props: GenericObject;\n };\n\n (withVisibleColumns.props.visibleColumns as string[]) = [\"DSC\", \"1\"];\n\n const workbook: Workbook = dataTableToExcelWorkbook(\n withVisibleColumns,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeDefined();\n expect(worksheet?.columnCount).toBe(2);\n expect(worksheet?.getColumn(1).key).toBe(\"DSC\");\n expect(worksheet?.getColumn(2).key).toBe(\"1\");\n });\n\n it(\"With totals\", async () => {\n const table_totals = JSON.parse(JSON.stringify(table_sample_1));\n table_totals.props = {\n ...table_totals.props,\n totals: totals_sample_1,\n };\n\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_totals,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.rowCount).toBe(4);\n // Check totals row\n worksheet?.getRow(4).eachCell((cell: Cell) => {\n const columnName = worksheet?.getColumn(cell.col).key;\n if (columnName !== undefined) {\n expect(cell.formula).toBe(\n data_table_totals_result_sample_1[columnName],\n );\n }\n });\n });\n\n it(\"With groups subtotals correct range and action\", () => {\n const totalsExpectedFormula = {\n Count: \"SUBTOTAL(3,C2:C2)\",\n Sum: \"SUBTOTAL(9,C2:C2)\",\n Max: \"SUBTOTAL(4,C2:C2)\",\n Min: \"SUBTOTAL(5,C2:C2)\",\n Average: \"SUBTOTAL(1,C2:C2)\",\n };\n const totalsExpectedSubAction = {\n Count: \"3\",\n Sum: \"9\",\n Max: \"4\",\n Min: \"5\",\n Average: \"1\",\n };\n\n Object.keys(totalsExpectedFormula).forEach(async total => {\n const workbook: ExcelJS.Workbook = dataTableToExcelWorkbook(\n table_footer_actions(\n total,\n [\n { column: \"1\", visible: true },\n { column: \"2\", visible: true },\n ],\n 2,\n 2,\n ),\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n\n const totalKey = total as keyof typeof totalsExpectedSubAction;\n\n expect(worksheet?.getRow(2).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C3:C5)`,\n );\n expect(worksheet?.getRow(3).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C4:C5)`,\n );\n expect(worksheet?.getRow(6).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C7:C9)`,\n );\n expect(worksheet?.getRow(7).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C8:C9)`,\n );\n });\n });\n });\n\n describe(\"SmeupDataTree export - with levels split\", () => {\n it(\"xlsx format - with levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"xlsx format with split nodes to columns - with levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> new column for each tree node\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"csv format - with levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.CSV,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeDefined();\n expect(worksheet).not.toBeNull();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"txt format - with levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.TXT,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"With totals - with levels split\", async () => {\n const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));\n tree_grid_totals.props = {\n ...tree_grid_totals.props,\n totals: totals_sample_1,\n };\n const tree_grid_totals_result_sample_1: { [key: string]: string } = {\n COL1: \"SUBTOTAL(3,D2:D6)\",\n HIDDEN_COL: \"SUBTOTAL(9,F2:F6)\",\n SUM_COL: \"SUBTOTAL(9,G2:G6)\",\n AVG_COL: \"SUBTOTAL(1,H2:H6)\",\n MIN_COL: \"SUBTOTAL(5,I2:I6)\",\n MAX_COL: \"SUBTOTAL(4,J2:J6)\",\n DIFF_COL: `(F7-G7)`,\n };\n\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_totals,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.rowCount).toBe(7);\n // Check totals row\n worksheet?.getRow(7).eachCell((cell: ExcelJS.Cell) => {\n const columnName = worksheet?.getColumn(cell.col).key;\n if (columnName) {\n expect(cell.formula).toBe(\n tree_grid_totals_result_sample_1[columnName],\n );\n }\n });\n });\n it(\"With split nodes to columns and totals\", async () => {\n const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));\n tree_grid_totals.props = {\n ...tree_grid_totals.props,\n totals: totals_sample_1,\n };\n const tree_grid_totals_result_sample_1: { [key: string]: string } = {\n COL1: \"SUBTOTAL(3,D2:D6)\",\n HIDDEN_COL: \"SUBTOTAL(9,F2:F6)\",\n SUM_COL: \"SUBTOTAL(9,G2:G6)\",\n AVG_COL: \"SUBTOTAL(1,H2:H6)\",\n MIN_COL: \"SUBTOTAL(5,I2:I6)\",\n MAX_COL: \"SUBTOTAL(4,J2:J6)\",\n DIFF_COL: `(F7-G7)`,\n };\n\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_totals,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n true,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns\n expect(worksheet?.columnCount).toBe(11);\n // Test number of rows\n expect(worksheet?.rowCount).toBe(7);\n // Check totals row\n worksheet?.getRow(7).eachCell((cell: ExcelJS.Cell) => {\n const columnName = worksheet.getColumn(cell.col).key;\n expect(columnName).toBeTruthy();\n if (columnName) {\n expect(cell.formula).toBe(\n tree_grid_totals_result_sample_1[columnName],\n );\n }\n });\n });\n });\n\n describe(\"SmeupDataTree export - no levels split\", () => {\n it(\"xlsx format - no levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n false,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(9);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"xlsx format with split nodes to columns - no levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n false,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> new column for each tree node\n expect(worksheet?.columnCount).toBe(9);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"csv format - no levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.CSV,\n {} as WebupManagerData,\n false,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(9);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"txt format - no levels split\", async () => {\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_sample_1,\n SupportedExportFormats.TXT,\n {} as WebupManagerData,\n false,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns -> all tree nodes are under the same column with indentation\n expect(worksheet?.columnCount).toBe(9);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(6);\n });\n\n it(\"With totals - no levels split\", async () => {\n const tree_grid_totals = JSON.parse(JSON.stringify(tree_grid_sample_1));\n tree_grid_totals.props = {\n ...tree_grid_totals.props,\n totals: totals_sample_1,\n };\n const tree_grid_totals_result_sample_1: Record<string, string> = {\n COL1: \"SUBTOTAL(3,B2:B6)\",\n HIDDEN_COL: \"SUBTOTAL(9,D2:D6)\",\n SUM_COL: \"SUBTOTAL(9,E2:E6)\",\n AVG_COL: \"SUBTOTAL(1,F2:F6)\",\n MIN_COL: \"SUBTOTAL(5,G2:G6)\",\n MAX_COL: \"SUBTOTAL(4,H2:H6)\",\n DIFF_COL: `(D7-E7)`,\n };\n\n const workbook: ExcelJS.Workbook = await dataTreeToExcelWorkbook(\n tree_grid_totals,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n false,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet).toBeTruthy();\n\n // Test number of columns\n expect(worksheet?.columnCount).toBe(9);\n // Test number of rows\n expect(worksheet?.rowCount).toBe(7);\n // Check totals row\n worksheet?.getRow(7).eachCell((cell: ExcelJS.Cell) => {\n const columnName = worksheet.getColumn(cell.col).key;\n expect(columnName).toBeTruthy();\n if (columnName) {\n expect(cell.formula).toBe(\n tree_grid_totals_result_sample_1[columnName],\n );\n }\n });\n });\n });\n});\n\ndescribe(\"Cell to XLSX Style converter\", () => {\n const cellStyle = {\n fontWeight: \"bold\",\n backgroundColor: \"#74c0f2\",\n color: \"#000000\",\n };\n const cellResult = {\n fill: {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"FF74c0f2\" },\n },\n font: { bold: true, color: { argb: \"FF000000\" } },\n } as Style;\n\n it(\"SmeupDataCell - Style calculations\", async () => {\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(\"Sheet 1\");\n\n const row: Row = worksheet.addRow([\"Mario Rossi\"]);\n addStyleToExceljsRow(row, [{ name: \"A\", title: \"A\" }], {\n cells: {\n A: {\n value: \"\",\n obj: {\n t: \"\",\n p: \"\",\n k: \"\",\n },\n style: cellStyle,\n },\n },\n } as SmeupDataRow);\n expect(row.getCell(1).style).toStrictEqual(cellResult);\n });\n it(\"SmeupDataNode - Style calculations\", async () => {\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(\"Sheet 1\");\n const row: Row = worksheet.addRow([\"Mario Rossi\"]);\n addStyleToExceljsRow(row, [{ name: \"A\", title: \"A\" }], {\n cells: {\n A: {\n value: \"\",\n obj: {\n t: \"\",\n p: \"\",\n k: \"\",\n },\n style: {},\n },\n },\n style: cellStyle,\n } as unknown as SmeupDataNode);\n expect(row.getCell(1).style).toStrictEqual(cellResult);\n });\n});\n\n// #endregion\n\n// #region Assets\n\nconst getColumns = (numberColumns: number): SmeupDataColumn[] => {\n const columns: SmeupDataColumn[] = [];\n\n for (let num = 1; num <= numberColumns; num++) {\n columns.push({\n name: `N${num}`,\n title: \"\",\n });\n }\n\n return columns;\n};\n"]}
File without changes
File without changes
File without changes
File without changes