import {assert} from 'chai'; import {ColumnsToMap, mapColumnNames, mapColumnNamesBack} from 'app/plugin/grist-plugin-api'; describe('PluginApi', function () { it('should map columns according to configuration', function () { const columns: ColumnsToMap = ['Foo', {name: 'Bar', allowMultiple: true}, {name: 'Baz', optional: true}]; let mappings: any = {Foo: null, Bar: ['A', 'B'], Baz: null}; const record = {A: 1, B: 2, id: 1}; // When there are not mappings, it should return original data. assert.deepEqual( record, mapColumnNames(record) ); assert.deepEqual( record, mapColumnNamesBack(record) ); // Foo is not mapped, should be null. assert.isNull( mapColumnNames(record, { mappings, columns, }) ); assert.isNull( mapColumnNames([record], { mappings, columns, }) ); // Map Foo to A mappings = {...mappings, Foo: 'A'}; // Should map as Foo is mapped assert.deepEqual(mapColumnNames(record, {mappings, columns}), {id: 1, Foo: 1, Bar: [1, 2]}); assert.deepEqual(mapColumnNames([record], {mappings, columns}), [{id: 1, Foo: 1, Bar: [1, 2]}]); assert.deepEqual(mapColumnNamesBack([{id: 1, Foo: 1, Bar: [1, 2]}], {mappings, columns}), [record]); // Map Baz mappings = {...mappings, Baz: 'B'}; assert.deepEqual(mapColumnNames(record, {mappings, columns}), {id: 1, Foo: 1, Bar: [1, 2], Baz: 2}); assert.deepEqual(mapColumnNames([record], {mappings, columns}), [{id: 1, Foo: 1, Bar: [1, 2], Baz: 2}]); assert.deepEqual(mapColumnNamesBack([{id: 1, Foo: 1, Bar: [1, 2], Baz: 5}], {mappings, columns}), [{id: 1, A: 1, B: 5}]); }); it('should ignore when there are not mappings requested', function () { const columns: ColumnsToMap|undefined = undefined; const mappings: any = undefined; const record = {A: 1, B: 2, id: 1}; assert.deepEqual( mapColumnNames(record, { mappings, columns, }), record ); }); });