react-pivottable-plus 1.0.18 → 1.1.1
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.
- package/README.md +110 -16
- package/dist/PivotTable.js +6 -28
- package/dist/PivotTable.js.map +1 -1
- package/dist/PivotTableUI.js +153 -159
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/TableRenderers.js +616 -490
- package/dist/TableRenderers.js.map +1 -1
- package/dist/Utilities.js +50 -55
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/Modules.test.js +227 -0
- package/dist/__tests__/Modules.test.js.map +1 -0
- package/dist/__tests__/PivotEngine.test.js +176 -0
- package/dist/__tests__/PivotEngine.test.js.map +1 -0
- package/dist/__tests__/PivotTableUI-test.js +4 -175
- package/dist/__tests__/PivotTableUI-test.js.map +1 -1
- package/dist/core/PivotCore.js +3 -252
- package/dist/core/PivotCore.js.map +1 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _PivotEngine = require("../core/PivotEngine");
|
|
4
|
+
var _FilterModule = require("../modules/FilterModule");
|
|
5
|
+
var _PaginationModule = require("../modules/PaginationModule");
|
|
6
|
+
var _SortModule = require("../modules/SortModule");
|
|
7
|
+
var testData = [{
|
|
8
|
+
Country: 'USA',
|
|
9
|
+
Year: '2020',
|
|
10
|
+
Sales: 100,
|
|
11
|
+
Profit: 50
|
|
12
|
+
}, {
|
|
13
|
+
Country: 'USA',
|
|
14
|
+
Year: '2021',
|
|
15
|
+
Sales: 150,
|
|
16
|
+
Profit: 70
|
|
17
|
+
}, {
|
|
18
|
+
Country: 'Canada',
|
|
19
|
+
Year: '2020',
|
|
20
|
+
Sales: 80,
|
|
21
|
+
Profit: 30
|
|
22
|
+
}, {
|
|
23
|
+
Country: 'Canada',
|
|
24
|
+
Year: '2021',
|
|
25
|
+
Sales: 120,
|
|
26
|
+
Profit: 55
|
|
27
|
+
}, {
|
|
28
|
+
Country: 'Mexico',
|
|
29
|
+
Year: '2020',
|
|
30
|
+
Sales: 60,
|
|
31
|
+
Profit: 20
|
|
32
|
+
}, {
|
|
33
|
+
Country: 'Mexico',
|
|
34
|
+
Year: '2021',
|
|
35
|
+
Sales: 90,
|
|
36
|
+
Profit: 40
|
|
37
|
+
}];
|
|
38
|
+
describe('PivotEngine', function () {
|
|
39
|
+
var engine;
|
|
40
|
+
beforeEach(function () {
|
|
41
|
+
engine = new _PivotEngine.PivotEngine({
|
|
42
|
+
data: testData,
|
|
43
|
+
rows: ['Country'],
|
|
44
|
+
cols: ['Year'],
|
|
45
|
+
aggregatorName: 'Count',
|
|
46
|
+
modules: [_FilterModule.FilterModule, _PaginationModule.PaginationModule, _SortModule.SortModule]
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
afterEach(function () {
|
|
50
|
+
engine.destroy();
|
|
51
|
+
});
|
|
52
|
+
describe('Inicialización', function () {
|
|
53
|
+
it('crea el engine con datos válidos', function () {
|
|
54
|
+
expect(engine).toBeDefined();
|
|
55
|
+
expect(engine.gridApi).toBeDefined();
|
|
56
|
+
expect(engine.columnApi).toBeDefined();
|
|
57
|
+
});
|
|
58
|
+
it('materializa los datos correctamente', function () {
|
|
59
|
+
var materialized = engine.gridApi.getMaterializedData();
|
|
60
|
+
expect(materialized).toHaveLength(6);
|
|
61
|
+
expect(materialized[0]).toHaveProperty('Country');
|
|
62
|
+
expect(materialized[0]).toHaveProperty('Year');
|
|
63
|
+
});
|
|
64
|
+
it('extrae attrValues correctamente', function () {
|
|
65
|
+
var attrValues = engine.gridApi.getAttrValues();
|
|
66
|
+
expect(Object.keys(attrValues)).toContain('Country');
|
|
67
|
+
expect(Object.keys(attrValues)).toContain('Year');
|
|
68
|
+
expect(Object.keys(attrValues)).toContain('Sales');
|
|
69
|
+
});
|
|
70
|
+
it('devuelve el config inicial correcto', function () {
|
|
71
|
+
var config = engine.gridApi.getConfig();
|
|
72
|
+
expect(config.rows).toEqual(['Country']);
|
|
73
|
+
expect(config.cols).toEqual(['Year']);
|
|
74
|
+
expect(config.aggregatorName).toBe('Count');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe('Snapshot y suscripción', function () {
|
|
78
|
+
it('devuelve un snapshot válido', function () {
|
|
79
|
+
var snapshot = engine.getSnapshot();
|
|
80
|
+
expect(snapshot).toBeDefined();
|
|
81
|
+
expect(snapshot).toHaveProperty('props');
|
|
82
|
+
expect(snapshot).toHaveProperty('state');
|
|
83
|
+
});
|
|
84
|
+
it('notifica a los suscriptores cuando cambia el estado', function () {
|
|
85
|
+
var listener = jest.fn();
|
|
86
|
+
engine.subscribe(listener);
|
|
87
|
+
engine.gridApi.updateConfig({
|
|
88
|
+
aggregatorName: 'Sum'
|
|
89
|
+
});
|
|
90
|
+
expect(listener).toHaveBeenCalled();
|
|
91
|
+
});
|
|
92
|
+
it('permite desuscribirse', function () {
|
|
93
|
+
var listener = jest.fn();
|
|
94
|
+
var unsub = engine.subscribe(listener);
|
|
95
|
+
unsub();
|
|
96
|
+
engine.gridApi.updateConfig({
|
|
97
|
+
aggregatorName: 'Sum'
|
|
98
|
+
});
|
|
99
|
+
expect(listener).not.toHaveBeenCalled();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('GridApi — Config', function () {
|
|
103
|
+
it('actualiza config con updateConfig', function () {
|
|
104
|
+
engine.gridApi.updateConfig({
|
|
105
|
+
aggregatorName: 'Sum',
|
|
106
|
+
vals: ['Sales']
|
|
107
|
+
});
|
|
108
|
+
var config = engine.gridApi.getConfig();
|
|
109
|
+
expect(config.aggregatorName).toBe('Sum');
|
|
110
|
+
expect(config.vals).toEqual(['Sales']);
|
|
111
|
+
});
|
|
112
|
+
it('setAggregator actualiza nombre y vals', function () {
|
|
113
|
+
engine.gridApi.setAggregator('Sum', ['Sales']);
|
|
114
|
+
var config = engine.gridApi.getConfig();
|
|
115
|
+
expect(config.aggregatorName).toBe('Sum');
|
|
116
|
+
expect(config.vals).toEqual(['Sales']);
|
|
117
|
+
});
|
|
118
|
+
it('setRenderer actualiza el nombre del renderer', function () {
|
|
119
|
+
engine.gridApi.setRenderer('Table Heatmap');
|
|
120
|
+
expect(engine.gridApi.getConfig().rendererName).toBe('Table Heatmap');
|
|
121
|
+
});
|
|
122
|
+
it('setRows actualiza filas y remueve duplicados de cols', function () {
|
|
123
|
+
engine.gridApi.setCols(['Country', 'Year']);
|
|
124
|
+
engine.gridApi.setRows(['Year']);
|
|
125
|
+
var config = engine.gridApi.getConfig();
|
|
126
|
+
expect(config.rows).toEqual(['Year']);
|
|
127
|
+
// 'Year' ya no debe estar en cols
|
|
128
|
+
expect(config.cols).not.toContain('Year');
|
|
129
|
+
});
|
|
130
|
+
it('setCols actualiza columnas y remueve duplicados de rows', function () {
|
|
131
|
+
engine.gridApi.setRows(['Country', 'Year']);
|
|
132
|
+
engine.gridApi.setCols(['Country']);
|
|
133
|
+
var config = engine.gridApi.getConfig();
|
|
134
|
+
expect(config.cols).toEqual(['Country']);
|
|
135
|
+
expect(config.rows).not.toContain('Country');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('GridApi — Data', function () {
|
|
139
|
+
it('setRowData actualiza los datos y rematerializa', function () {
|
|
140
|
+
var newData = [{
|
|
141
|
+
Country: 'UK',
|
|
142
|
+
Year: '2022',
|
|
143
|
+
Sales: 200
|
|
144
|
+
}];
|
|
145
|
+
engine.gridApi.setRowData(newData);
|
|
146
|
+
var materialized = engine.gridApi.getMaterializedData();
|
|
147
|
+
expect(materialized).toHaveLength(1);
|
|
148
|
+
expect(materialized[0].Country).toBe('UK');
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
describe('GridApi — Row Model', function () {
|
|
152
|
+
it('processData devuelve resultados de pivot', function () {
|
|
153
|
+
var result = engine.gridApi.processData();
|
|
154
|
+
expect(result).toHaveProperty('pivotData');
|
|
155
|
+
expect(result).toHaveProperty('allRowKeys');
|
|
156
|
+
expect(result).toHaveProperty('allColKeys');
|
|
157
|
+
expect(result.allRowKeys.length).toBeGreaterThan(0);
|
|
158
|
+
expect(result.allColKeys.length).toBeGreaterThan(0);
|
|
159
|
+
});
|
|
160
|
+
it('getRowCount devuelve el número correcto de filas', function () {
|
|
161
|
+
engine.gridApi.processData();
|
|
162
|
+
expect(engine.gridApi.getRowCount()).toBe(3); // USA, Canada, Mexico
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
describe('Events', function () {
|
|
166
|
+
it('addEventListener recibe eventos', function () {
|
|
167
|
+
var callback = jest.fn();
|
|
168
|
+
engine.gridApi.addEventListener('dataChanged', callback);
|
|
169
|
+
engine.gridApi.setRowData(testData);
|
|
170
|
+
expect(callback).toHaveBeenCalledWith(expect.objectContaining({
|
|
171
|
+
data: testData
|
|
172
|
+
}));
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=PivotEngine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PivotEngine.test.js","names":["_PivotEngine","require","_FilterModule","_PaginationModule","_SortModule","testData","Country","Year","Sales","Profit","describe","engine","beforeEach","PivotEngine","data","rows","cols","aggregatorName","modules","FilterModule","PaginationModule","SortModule","afterEach","destroy","it","expect","toBeDefined","gridApi","columnApi","materialized","getMaterializedData","toHaveLength","toHaveProperty","attrValues","getAttrValues","Object","keys","toContain","config","getConfig","toEqual","toBe","snapshot","getSnapshot","listener","jest","fn","subscribe","updateConfig","toHaveBeenCalled","unsub","not","vals","setAggregator","setRenderer","rendererName","setCols","setRows","newData","setRowData","result","processData","allRowKeys","length","toBeGreaterThan","allColKeys","getRowCount","callback","addEventListener","toHaveBeenCalledWith","objectContaining"],"sources":["../../src/__tests__/PivotEngine.test.js"],"sourcesContent":["import { PivotEngine } from '../core/PivotEngine';\nimport { FilterModule } from '../modules/FilterModule';\nimport { PaginationModule } from '../modules/PaginationModule';\nimport { SortModule } from '../modules/SortModule';\n\nconst testData = [\n { Country: 'USA', Year: '2020', Sales: 100, Profit: 50 },\n { Country: 'USA', Year: '2021', Sales: 150, Profit: 70 },\n { Country: 'Canada', Year: '2020', Sales: 80, Profit: 30 },\n { Country: 'Canada', Year: '2021', Sales: 120, Profit: 55 },\n { Country: 'Mexico', Year: '2020', Sales: 60, Profit: 20 },\n { Country: 'Mexico', Year: '2021', Sales: 90, Profit: 40 },\n];\n\ndescribe('PivotEngine', () => {\n let engine;\n\n beforeEach(() => {\n engine = new PivotEngine({\n data: testData,\n rows: ['Country'],\n cols: ['Year'],\n aggregatorName: 'Count',\n modules: [FilterModule, PaginationModule, SortModule],\n });\n });\n\n afterEach(() => {\n engine.destroy();\n });\n\n describe('Inicialización', () => {\n it('crea el engine con datos válidos', () => {\n expect(engine).toBeDefined();\n expect(engine.gridApi).toBeDefined();\n expect(engine.columnApi).toBeDefined();\n });\n\n it('materializa los datos correctamente', () => {\n const materialized = engine.gridApi.getMaterializedData();\n expect(materialized).toHaveLength(6);\n expect(materialized[0]).toHaveProperty('Country');\n expect(materialized[0]).toHaveProperty('Year');\n });\n\n it('extrae attrValues correctamente', () => {\n const attrValues = engine.gridApi.getAttrValues();\n expect(Object.keys(attrValues)).toContain('Country');\n expect(Object.keys(attrValues)).toContain('Year');\n expect(Object.keys(attrValues)).toContain('Sales');\n });\n\n it('devuelve el config inicial correcto', () => {\n const config = engine.gridApi.getConfig();\n expect(config.rows).toEqual(['Country']);\n expect(config.cols).toEqual(['Year']);\n expect(config.aggregatorName).toBe('Count');\n });\n });\n\n describe('Snapshot y suscripción', () => {\n it('devuelve un snapshot válido', () => {\n const snapshot = engine.getSnapshot();\n expect(snapshot).toBeDefined();\n expect(snapshot).toHaveProperty('props');\n expect(snapshot).toHaveProperty('state');\n });\n\n it('notifica a los suscriptores cuando cambia el estado', () => {\n const listener = jest.fn();\n engine.subscribe(listener);\n engine.gridApi.updateConfig({ aggregatorName: 'Sum' });\n expect(listener).toHaveBeenCalled();\n });\n\n it('permite desuscribirse', () => {\n const listener = jest.fn();\n const unsub = engine.subscribe(listener);\n unsub();\n engine.gridApi.updateConfig({ aggregatorName: 'Sum' });\n expect(listener).not.toHaveBeenCalled();\n });\n });\n\n describe('GridApi — Config', () => {\n it('actualiza config con updateConfig', () => {\n engine.gridApi.updateConfig({ aggregatorName: 'Sum', vals: ['Sales'] });\n const config = engine.gridApi.getConfig();\n expect(config.aggregatorName).toBe('Sum');\n expect(config.vals).toEqual(['Sales']);\n });\n\n it('setAggregator actualiza nombre y vals', () => {\n engine.gridApi.setAggregator('Sum', ['Sales']);\n const config = engine.gridApi.getConfig();\n expect(config.aggregatorName).toBe('Sum');\n expect(config.vals).toEqual(['Sales']);\n });\n\n it('setRenderer actualiza el nombre del renderer', () => {\n engine.gridApi.setRenderer('Table Heatmap');\n expect(engine.gridApi.getConfig().rendererName).toBe('Table Heatmap');\n });\n\n it('setRows actualiza filas y remueve duplicados de cols', () => {\n engine.gridApi.setCols(['Country', 'Year']);\n engine.gridApi.setRows(['Year']);\n const config = engine.gridApi.getConfig();\n expect(config.rows).toEqual(['Year']);\n // 'Year' ya no debe estar en cols\n expect(config.cols).not.toContain('Year');\n });\n\n it('setCols actualiza columnas y remueve duplicados de rows', () => {\n engine.gridApi.setRows(['Country', 'Year']);\n engine.gridApi.setCols(['Country']);\n const config = engine.gridApi.getConfig();\n expect(config.cols).toEqual(['Country']);\n expect(config.rows).not.toContain('Country');\n });\n });\n\n describe('GridApi — Data', () => {\n it('setRowData actualiza los datos y rematerializa', () => {\n const newData = [\n { Country: 'UK', Year: '2022', Sales: 200 },\n ];\n engine.gridApi.setRowData(newData);\n const materialized = engine.gridApi.getMaterializedData();\n expect(materialized).toHaveLength(1);\n expect(materialized[0].Country).toBe('UK');\n });\n });\n\n describe('GridApi — Row Model', () => {\n it('processData devuelve resultados de pivot', () => {\n const result = engine.gridApi.processData();\n expect(result).toHaveProperty('pivotData');\n expect(result).toHaveProperty('allRowKeys');\n expect(result).toHaveProperty('allColKeys');\n expect(result.allRowKeys.length).toBeGreaterThan(0);\n expect(result.allColKeys.length).toBeGreaterThan(0);\n });\n\n it('getRowCount devuelve el número correcto de filas', () => {\n engine.gridApi.processData();\n expect(engine.gridApi.getRowCount()).toBe(3); // USA, Canada, Mexico\n });\n });\n\n describe('Events', () => {\n it('addEventListener recibe eventos', () => {\n const callback = jest.fn();\n engine.gridApi.addEventListener('dataChanged', callback);\n engine.gridApi.setRowData(testData);\n expect(callback).toHaveBeenCalledWith(expect.objectContaining({ data: testData }));\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,177 +1,6 @@
|
|
|
1
|
+
// Tests originales de PivotTableUI eliminados.
|
|
2
|
+
// El componente fue convertido de clase a funcional; los tests referenciaban
|
|
3
|
+
// métodos de instancia (handleDuplicates, sendPropUpdate) que ya no existen.
|
|
4
|
+
// Ver: src/__tests__/PivotEngine.test.js para los nuevos tests del core.
|
|
1
5
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var _react = _interopRequireDefault(require("react"));
|
|
4
|
-
var _PivotTableUI = _interopRequireDefault(require("../PivotTableUI"));
|
|
5
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
6
|
-
describe('PivotTableUI', function () {
|
|
7
|
-
describe('handleDuplicates', function () {
|
|
8
|
-
// Create a minimal instance of PivotTableUI for testing
|
|
9
|
-
var getInstance = function getInstance() {
|
|
10
|
-
var pivotTableUI = new _PivotTableUI["default"]({
|
|
11
|
-
onChange: function onChange() {},
|
|
12
|
-
renderers: {},
|
|
13
|
-
aggregators: {},
|
|
14
|
-
rows: [],
|
|
15
|
-
cols: [],
|
|
16
|
-
rendererName: '',
|
|
17
|
-
aggregatorName: '',
|
|
18
|
-
vals: [],
|
|
19
|
-
valueFilter: {},
|
|
20
|
-
rowOrder: 'key_a_to_z',
|
|
21
|
-
colOrder: 'key_a_to_z',
|
|
22
|
-
derivedAttributes: {},
|
|
23
|
-
data: []
|
|
24
|
-
});
|
|
25
|
-
return pivotTableUI;
|
|
26
|
-
};
|
|
27
|
-
it('returns existingAttributes when newAttributes is null or undefined', function () {
|
|
28
|
-
var instance = getInstance();
|
|
29
|
-
expect(instance.handleDuplicates(null, ['a', 'b'])).toEqual(['a', 'b']);
|
|
30
|
-
expect(instance.handleDuplicates(undefined, ['a', 'b'])).toEqual(['a', 'b']);
|
|
31
|
-
});
|
|
32
|
-
it('returns empty array when both inputs are null or undefined', function () {
|
|
33
|
-
var instance = getInstance();
|
|
34
|
-
expect(instance.handleDuplicates(null, null)).toEqual([]);
|
|
35
|
-
expect(instance.handleDuplicates(undefined, undefined)).toEqual([]);
|
|
36
|
-
});
|
|
37
|
-
it('returns existingAttributes when there are no duplicates', function () {
|
|
38
|
-
var instance = getInstance();
|
|
39
|
-
var newAttributes = ['a', 'b', 'c'];
|
|
40
|
-
var existingAttributes = ['d', 'e', 'f'];
|
|
41
|
-
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(existingAttributes);
|
|
42
|
-
});
|
|
43
|
-
it('removes duplicates from existingAttributes', function () {
|
|
44
|
-
var instance = getInstance();
|
|
45
|
-
var newAttributes = ['a', 'b', 'c'];
|
|
46
|
-
var existingAttributes = ['b', 'c', 'd'];
|
|
47
|
-
// 'b' and 'c' are duplicates and should be removed
|
|
48
|
-
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(['d']);
|
|
49
|
-
});
|
|
50
|
-
it('handles empty newAttributes', function () {
|
|
51
|
-
var instance = getInstance();
|
|
52
|
-
var newAttributes = [];
|
|
53
|
-
var existingAttributes = ['a', 'b', 'c'];
|
|
54
|
-
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual(existingAttributes);
|
|
55
|
-
});
|
|
56
|
-
it('handles empty existingAttributes', function () {
|
|
57
|
-
var instance = getInstance();
|
|
58
|
-
var newAttributes = ['a', 'b', 'c'];
|
|
59
|
-
var existingAttributes = [];
|
|
60
|
-
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual([]);
|
|
61
|
-
});
|
|
62
|
-
it('handles case with all attributes being duplicates', function () {
|
|
63
|
-
var instance = getInstance();
|
|
64
|
-
var newAttributes = ['a', 'b', 'c'];
|
|
65
|
-
var existingAttributes = ['a', 'b', 'c'];
|
|
66
|
-
expect(instance.handleDuplicates(newAttributes, existingAttributes)).toEqual([]);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('propUpdater', function () {
|
|
70
|
-
// We'll use a mock to check if sendPropUpdate is called with the right arguments
|
|
71
|
-
var mockSendPropUpdate;
|
|
72
|
-
var instance;
|
|
73
|
-
beforeEach(function () {
|
|
74
|
-
instance = new _PivotTableUI["default"]({
|
|
75
|
-
onChange: function onChange() {},
|
|
76
|
-
renderers: {},
|
|
77
|
-
aggregators: {},
|
|
78
|
-
rows: ['gender', 'age'],
|
|
79
|
-
cols: ['country', 'year'],
|
|
80
|
-
rendererName: '',
|
|
81
|
-
aggregatorName: '',
|
|
82
|
-
vals: [],
|
|
83
|
-
valueFilter: {},
|
|
84
|
-
rowOrder: 'key_a_to_z',
|
|
85
|
-
colOrder: 'key_a_to_z',
|
|
86
|
-
derivedAttributes: {},
|
|
87
|
-
data: []
|
|
88
|
-
});
|
|
89
|
-
// Mock the sendPropUpdate method
|
|
90
|
-
mockSendPropUpdate = jest.spyOn(instance, 'sendPropUpdate').mockImplementation(function () {});
|
|
91
|
-
// Mock the handleDuplicates method to control its return value
|
|
92
|
-
jest.spyOn(instance, 'handleDuplicates');
|
|
93
|
-
});
|
|
94
|
-
afterEach(function () {
|
|
95
|
-
mockSendPropUpdate.mockRestore();
|
|
96
|
-
instance.handleDuplicates.mockRestore();
|
|
97
|
-
});
|
|
98
|
-
it('calls handleDuplicates when key is "rows"', function () {
|
|
99
|
-
var newRows = ['gender', 'name'];
|
|
100
|
-
var updater = instance.propUpdater('rows');
|
|
101
|
-
|
|
102
|
-
// Set up the mock to return the same cols (no duplicates found)
|
|
103
|
-
instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);
|
|
104
|
-
updater(newRows);
|
|
105
|
-
expect(instance.handleDuplicates).toHaveBeenCalledWith(newRows, instance.props.cols);
|
|
106
|
-
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
107
|
-
rows: {
|
|
108
|
-
$set: newRows
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
it('calls handleDuplicates when key is "cols"', function () {
|
|
113
|
-
var newCols = ['country', 'city'];
|
|
114
|
-
var updater = instance.propUpdater('cols');
|
|
115
|
-
|
|
116
|
-
// Set up the mock to return the same rows (no duplicates found)
|
|
117
|
-
instance.handleDuplicates.mockReturnValueOnce(instance.props.rows);
|
|
118
|
-
updater(newCols);
|
|
119
|
-
expect(instance.handleDuplicates).toHaveBeenCalledWith(newCols, instance.props.rows);
|
|
120
|
-
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
121
|
-
cols: {
|
|
122
|
-
$set: newCols
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
it('updates cols when duplicate is found in rows update', function () {
|
|
127
|
-
var newRows = ['gender', 'country']; // 'country' is duplicate
|
|
128
|
-
var updater = instance.propUpdater('rows');
|
|
129
|
-
|
|
130
|
-
// 'country' is removed from cols
|
|
131
|
-
var updatedCols = ['year'];
|
|
132
|
-
instance.handleDuplicates.mockReturnValueOnce(updatedCols);
|
|
133
|
-
updater(newRows);
|
|
134
|
-
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
135
|
-
rows: {
|
|
136
|
-
$set: newRows
|
|
137
|
-
},
|
|
138
|
-
cols: {
|
|
139
|
-
$set: updatedCols
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
it('updates rows when duplicate is found in cols update', function () {
|
|
144
|
-
var newCols = ['country', 'gender']; // 'gender' is duplicate
|
|
145
|
-
var updater = instance.propUpdater('cols');
|
|
146
|
-
|
|
147
|
-
// 'gender' is removed from rows
|
|
148
|
-
var updatedRows = ['age'];
|
|
149
|
-
instance.handleDuplicates.mockReturnValueOnce(updatedRows);
|
|
150
|
-
updater(newCols);
|
|
151
|
-
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
152
|
-
cols: {
|
|
153
|
-
$set: newCols
|
|
154
|
-
},
|
|
155
|
-
rows: {
|
|
156
|
-
$set: updatedRows
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
it('does not update the other attribute if no duplicates found', function () {
|
|
161
|
-
var newRows = ['gender', 'name'];
|
|
162
|
-
var updater = instance.propUpdater('rows');
|
|
163
|
-
|
|
164
|
-
// No change to cols (same array reference)
|
|
165
|
-
instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);
|
|
166
|
-
updater(newRows);
|
|
167
|
-
expect(mockSendPropUpdate).toHaveBeenCalledWith({
|
|
168
|
-
rows: {
|
|
169
|
-
$set: newRows
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
// We shouldn't have cols in the update
|
|
173
|
-
expect(mockSendPropUpdate.mock.calls[0][0].cols).toBeUndefined();
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
6
|
//# sourceMappingURL=PivotTableUI-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotTableUI-test.js","names":["_react","_interopRequireDefault","require","_PivotTableUI","e","__esModule","describe","getInstance","pivotTableUI","PivotTableUI","onChange","renderers","aggregators","rows","cols","rendererName","aggregatorName","vals","valueFilter","rowOrder","colOrder","derivedAttributes","data","it","instance","expect","handleDuplicates","toEqual","undefined","newAttributes","existingAttributes","mockSendPropUpdate","beforeEach","jest","spyOn","mockImplementation","afterEach","mockRestore","newRows","updater","propUpdater","mockReturnValueOnce","props","toHaveBeenCalledWith","$set","newCols","updatedCols","updatedRows","mock","calls","toBeUndefined"],"sources":["../../src/__tests__/PivotTableUI-test.js"],"sourcesContent":["import React from 'react';\nimport PivotTableUI from '../PivotTableUI';\n\ndescribe('PivotTableUI', () => {\n describe('handleDuplicates', () => {\n // Create a minimal instance of PivotTableUI for testing\n const getInstance = () => {\n const pivotTableUI = new PivotTableUI({\n onChange: () => {},\n renderers: {},\n aggregators: {},\n rows: [],\n cols: [],\n rendererName: '',\n aggregatorName: '',\n vals: [],\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n derivedAttributes: {},\n data: []\n });\n return pivotTableUI;\n };\n\n it('returns existingAttributes when newAttributes is null or undefined', () => {\n const instance = getInstance();\n expect(instance.handleDuplicates(null, ['a', 'b'])).toEqual(['a', 'b']);\n expect(instance.handleDuplicates(undefined, ['a', 'b'])).toEqual(['a', 'b']);\n });\n\n it('returns empty array when both inputs are null or undefined', () => {\n const instance = getInstance();\n expect(instance.handleDuplicates(null, null)).toEqual([]);\n expect(instance.handleDuplicates(undefined, undefined)).toEqual([]);\n });\n\n it('returns existingAttributes when there are no duplicates', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['d', 'e', 'f'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(existingAttributes);\n });\n\n it('removes duplicates from existingAttributes', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['b', 'c', 'd'];\n // 'b' and 'c' are duplicates and should be removed\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(['d']);\n });\n\n it('handles empty newAttributes', () => {\n const instance = getInstance();\n const newAttributes = [];\n const existingAttributes = ['a', 'b', 'c'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual(existingAttributes);\n });\n\n it('handles empty existingAttributes', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = [];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual([]);\n });\n\n it('handles case with all attributes being duplicates', () => {\n const instance = getInstance();\n const newAttributes = ['a', 'b', 'c'];\n const existingAttributes = ['a', 'b', 'c'];\n expect(instance.handleDuplicates(newAttributes, existingAttributes))\n .toEqual([]);\n });\n });\n\n describe('propUpdater', () => {\n // We'll use a mock to check if sendPropUpdate is called with the right arguments\n let mockSendPropUpdate;\n let instance;\n\n beforeEach(() => {\n instance = new PivotTableUI({\n onChange: () => {},\n renderers: {},\n aggregators: {},\n rows: ['gender', 'age'],\n cols: ['country', 'year'],\n rendererName: '',\n aggregatorName: '',\n vals: [],\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n derivedAttributes: {},\n data: []\n });\n // Mock the sendPropUpdate method\n mockSendPropUpdate = jest.spyOn(instance, 'sendPropUpdate').mockImplementation(() => {});\n // Mock the handleDuplicates method to control its return value\n jest.spyOn(instance, 'handleDuplicates');\n });\n\n afterEach(() => {\n mockSendPropUpdate.mockRestore();\n instance.handleDuplicates.mockRestore();\n });\n\n it('calls handleDuplicates when key is \"rows\"', () => {\n const newRows = ['gender', 'name'];\n const updater = instance.propUpdater('rows');\n \n // Set up the mock to return the same cols (no duplicates found)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);\n \n updater(newRows);\n \n expect(instance.handleDuplicates).toHaveBeenCalledWith(newRows, instance.props.cols);\n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows }\n });\n });\n\n it('calls handleDuplicates when key is \"cols\"', () => {\n const newCols = ['country', 'city'];\n const updater = instance.propUpdater('cols');\n \n // Set up the mock to return the same rows (no duplicates found)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.rows);\n \n updater(newCols);\n \n expect(instance.handleDuplicates).toHaveBeenCalledWith(newCols, instance.props.rows);\n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n cols: { $set: newCols }\n });\n });\n\n it('updates cols when duplicate is found in rows update', () => {\n const newRows = ['gender', 'country']; // 'country' is duplicate\n const updater = instance.propUpdater('rows');\n \n // 'country' is removed from cols\n const updatedCols = ['year'];\n instance.handleDuplicates.mockReturnValueOnce(updatedCols);\n \n updater(newRows);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows },\n cols: { $set: updatedCols }\n });\n });\n\n it('updates rows when duplicate is found in cols update', () => {\n const newCols = ['country', 'gender']; // 'gender' is duplicate\n const updater = instance.propUpdater('cols');\n \n // 'gender' is removed from rows\n const updatedRows = ['age'];\n instance.handleDuplicates.mockReturnValueOnce(updatedRows);\n \n updater(newCols);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n cols: { $set: newCols },\n rows: { $set: updatedRows }\n });\n });\n\n it('does not update the other attribute if no duplicates found', () => {\n const newRows = ['gender', 'name'];\n const updater = instance.propUpdater('rows');\n \n // No change to cols (same array reference)\n instance.handleDuplicates.mockReturnValueOnce(instance.props.cols);\n \n updater(newRows);\n \n expect(mockSendPropUpdate).toHaveBeenCalledWith({\n rows: { $set: newRows }\n });\n // We shouldn't have cols in the update\n expect(mockSendPropUpdate.mock.calls[0][0].cols).toBeUndefined();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PivotTableUI-test.js","names":[],"sources":["../../src/__tests__/PivotTableUI-test.js"],"sourcesContent":["// Tests originales de PivotTableUI eliminados.\n// El componente fue convertido de clase a funcional; los tests referenciaban\n// métodos de instancia (handleDuplicates, sendPropUpdate) que ya no existen.\n// Ver: src/__tests__/PivotEngine.test.js para los nuevos tests del core.\n"],"mappings":"AAAA;AACA;AACA;AACA;AAAA","ignoreList":[]}
|