From 125b155fc625ff918343fdb3703bfbf70521ae60 Mon Sep 17 00:00:00 2001 From: zjyhhhher <1059752643@qq.com> Date: Tue, 27 May 2025 16:06:26 +0800 Subject: [PATCH 1/3] test: add test case of getChartSpecWithContext when chartType is Venn --- .../unit/getChartSpecWithContext_Venn.test.ts | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts diff --git a/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts new file mode 100644 index 00000000..f5c82787 --- /dev/null +++ b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts @@ -0,0 +1,89 @@ +import { Dict } from '@visactor/vutils'; +import { getChartSpecWithContext } from '../../src/atom/chartGenerator/spec'; +import type { GenerateChartCellContext } from '../../src/atom/chartGenerator/type'; +import { ChartType } from '../../src/types'; + +const CHART_TYPE_LIST = [ + 'Bar Chart', + 'Line Chart', + 'Area Chart', + 'Pie Chart', + 'Scatter Plot', + 'Word Cloud', + 'Rose Chart', + 'Radar Chart', + 'Sankey Chart', + 'Funnel Chart', + 'Dual Axis Chart', + 'Waterfall Chart', + 'Box Plot', + 'Linear Progress chart', + 'Circular Progress chart', + 'Liquid Chart', + 'Bubble Circle Packing', + 'Map Chart', + 'Range Column Chart', + 'Sunburst Chart', + 'Treemap Chart', + 'Gauge Chart', + 'Basic Heat Map', + 'Venn Chart', + 'Dynamic Bar Chart' +]; + +const dataTable = [ + // 单元素集合(A, B, C) + { group: 'A', category: 'A', size: 8 }, + { group: 'B', category: 'B', size: 10 }, + { group: 'C', category: 'C', size: 12 }, + + // 两元素交集(A∩B, A∩C, B∩C) + { group: 'A∩B', category: 'A', size: 4 }, + { group: 'A∩B', category: 'B', size: 4 }, + + { group: 'A∩C', category: 'A', size: 4 }, + { group: 'A∩C', category: 'C', size: 4 }, + + { group: 'B∩C', category: 'B', size: 4 }, + { group: 'B∩C', category: 'C', size: 4 }, + + // 三元素交集(A∩B∩C) + { group: 'A∩B∩C', category: 'A', size: 2 }, + { group: 'A∩B∩C', category: 'B', size: 2 }, + { group: 'A∩B∩C', category: 'C', size: 2 } +]; + +const datatemplate = { + values: [ + { sets: ['A'], value: 8 }, + { sets: ['B'], value: 10 }, + { sets: ['C'], value: 12 }, + { sets: ['A', 'B'], value: 4 }, + { sets: ['A', 'C'], value: 4 }, + { sets: ['B', 'C'], value: 4 }, + { sets: ['A', 'B', 'C'], value: 2 } + ] +}; + +const color = ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e']; + +describe('getChartSpecWithContext', () => { + it('should generate correct basic Venn Chart spec', () => { + //console.log("data",data); + const context = { + chartTypeList: CHART_TYPE_LIST, + transpose: false, + command: 'Generate a Venn chart', + cell: { size: 'size', color: ['group', 'category'] }, + dataTable: dataTable, + chartType: ChartType.VennChart.toUpperCase(), + colors: color + }; + const { chartType, spec } = getChartSpecWithContext(context); + //console.log("basic spec", JSON.stringify(spec, null, 2)); + expect(chartType).toBe(ChartType.VennChart); + expect(spec.type).toBe('venn'); + expect(spec.data).toEqual(datatemplate); + expect(spec.color).toEqual(color); + }); +}); From e71638c8f5fc827a49e305efbbab1a3a09258af4 Mon Sep 17 00:00:00 2001 From: zjyhhhher <1059752643@qq.com> Date: Tue, 3 Jun 2025 00:15:45 +0800 Subject: [PATCH 2/3] test: add test case of getChartSpecWithContext when chartType is Venn (more comprehensive version) --- .../unit/getChartSpecWithContext_Venn.test.ts | 301 +++++++++++++++--- 1 file changed, 254 insertions(+), 47 deletions(-) diff --git a/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts index f5c82787..44141a5e 100644 --- a/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts +++ b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts @@ -1,37 +1,65 @@ -import { Dict } from '@visactor/vutils'; +import { builtinThemeMap } from '../../src/atom/chartGenerator/const'; +import { BuiltinThemeType } from '../../src/atom/chartGenerator/const'; import { getChartSpecWithContext } from '../../src/atom/chartGenerator/spec'; +import { COLOR_THEMES } from '../../src/atom/chartGenerator/spec/constants'; import type { GenerateChartCellContext } from '../../src/atom/chartGenerator/type'; -import { ChartType } from '../../src/types'; - -const CHART_TYPE_LIST = [ - 'Bar Chart', - 'Line Chart', - 'Area Chart', - 'Pie Chart', - 'Scatter Plot', - 'Word Cloud', - 'Rose Chart', - 'Radar Chart', - 'Sankey Chart', - 'Funnel Chart', - 'Dual Axis Chart', - 'Waterfall Chart', - 'Box Plot', - 'Linear Progress chart', - 'Circular Progress chart', - 'Liquid Chart', - 'Bubble Circle Packing', - 'Map Chart', - 'Range Column Chart', - 'Sunburst Chart', - 'Treemap Chart', - 'Gauge Chart', - 'Basic Heat Map', - 'Venn Chart', - 'Dynamic Bar Chart' +import { ChartType, DataCell } from '../../src/types'; + +const dataTable_1 = [ + { group: 'A', category: 'A', size: 8 }, + { group: 'B', category: 'B', size: 10 }, + { group: 'C', category: 'C', size: 12 } +]; + +const datatemplate_1 = { + values: [ + { sets: ['A'], value: 8 }, + { sets: ['B'], value: 10 }, + { sets: ['C'], value: 12 } + ] +}; + +const dataTable_2 = [ + { group: 'A', category: 'A', size: 8 }, + { group: 'B', category: 'B', size: 10 }, + { group: 'C', category: 'C', size: 12 }, + { group: 'A∩B', category: 'A', size: 4 }, + { group: 'A∩B', category: 'B', size: 4 } +]; + +const datatemplate_2 = { + values: [ + { sets: ['A'], value: 8 }, + { sets: ['B'], value: 10 }, + { sets: ['C'], value: 12 }, + { sets: ['A', 'B'], value: 4 } + ] +}; + +const dataTable_3 = [ + { group: 'A', category: 'A', size: 8 }, + { group: 'B', category: 'B', size: 10 }, + { group: 'C', category: 'C', size: 12 }, + { group: 'A∩B', category: 'A', size: 4 }, + { group: 'A∩B', category: 'B', size: 4 }, + { group: 'A∩C', category: 'A', size: 4 }, + { group: 'A∩C', category: 'C', size: 4 }, + { group: 'B∩C', category: 'B', size: 4 }, + { group: 'B∩C', category: 'C', size: 4 } ]; -const dataTable = [ +const datatemplate_3 = { + values: [ + { sets: ['A'], value: 8 }, + { sets: ['B'], value: 10 }, + { sets: ['C'], value: 12 }, + { sets: ['A', 'B'], value: 4 }, + { sets: ['A', 'C'], value: 4 }, + { sets: ['B', 'C'], value: 4 } + ] +}; + +const dataTable_4 = [ // 单元素集合(A, B, C) { group: 'A', category: 'A', size: 8 }, { group: 'B', category: 'B', size: 10 }, @@ -53,7 +81,7 @@ const dataTable = [ { group: 'A∩B∩C', category: 'C', size: 2 } ]; -const datatemplate = { +const datatemplate_4 = { values: [ { sets: ['A'], value: 8 }, { sets: ['B'], value: 10 }, @@ -65,25 +93,204 @@ const datatemplate = { ] }; -const color = ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e']; +describe('getChartSpecWithContext - Venn Chart', () => { + it('should generate full spec for venn chart with diverse inputs', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_4, + chartTheme: 'semiThemeLight', + cell: { + color: ['group', 'category'], + size: 'size' + }, + colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'], + totalTime: 5, + simpleVChartSpec: { + type: 'venn', + legends: [ + { type: 'discrete', orient: 'top' }, + { type: 'discrete', orient: 'bottom' } + ], + title: [ + { text: 'Venn Chart-1', orient: 'top' }, + { text: 'Venn Chart-2', orient: 'left' } + ], + label: [{ position: 'top', style: { fill: 'black' } }], + indicator: [ + { + title: 'Cluster A', + content: ['Overlap A'] + } + ], + palette: ['#123456', '#abcdef'], + background: '#ffffff' + } + }; + + const result = getChartSpecWithContext(context); + //console.log("basic spec", JSON.stringify(result.spec, null, 2)); + + expect(result.spec).toBeDefined(); + expect(result.spec.type).toBe('venn'); + expect(result.spec.data).toEqual(datatemplate_4); + expect(result.spec.color).toEqual(['#123456', '#abcdef']); + expect(result.spec.background).toEqual('#ffffff'); + expect(result.spec.legends).toEqual([ + { type: 'discrete', orient: 'top' }, + { type: 'discrete', orient: 'bottom' } + ]); + expect(result.spec.title).toEqual([ + { text: 'Venn Chart-1', orient: 'top' }, + { text: 'Venn Chart-2', orient: 'left' } + ]); + expect(result.spec.label).toEqual([{ position: 'top', style: { fill: 'black' }, visible: true }]); + expect(result.spec.indicator).toEqual([ + { + title: { style: { text: 'Cluster A' } }, + content: [{ style: { text: 'Overlap A' } }] + } + ]); + expect(result.spec.valueField).toEqual('value'); + expect(result.spec.categoryField).toEqual('sets'); + expect(result.spec.seriesField).toEqual('sets'); + expect(result.spec.theme).toEqual(builtinThemeMap[BuiltinThemeType.SemiThemeLight]); + }); + + it('should apply default colors if colors and palette are not given', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_1, + cell: { + color: ['group', 'category'], + size: 'size' + } + }; + + const result = getChartSpecWithContext(context); + + expect(result.spec.color).toBeDefined(); + expect(result.spec.color).toEqual(COLOR_THEMES.default); + }); + + it('test different dataTable - dataTable2', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_2, + cell: { + color: ['group', 'category'], + size: 'size' + } + }; + + const result = getChartSpecWithContext(context); + expect(result.spec).toBeDefined(); + expect(result.spec.type).toBe('venn'); + expect(result.spec.data).toEqual(datatemplate_2); + }); + + it('test different dataTable - dataTable3', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_3, + cell: { + color: ['group', 'category'], + size: 'size' + } + }; + + const result = getChartSpecWithContext(context); + expect(result.spec).toBeDefined(); + expect(result.spec.type).toBe('venn'); + expect(result.spec.data).toEqual(datatemplate_3); + }); + + it('should apply custom colors if colors are given', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_1, + cell: { + color: ['group', 'category'], + size: 'size' + }, + colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] + }; + + const result = getChartSpecWithContext(context); + + expect(result.spec.color).toBeDefined(); + expect(result.spec.color).toEqual([ + '#f57c6e', + '#f2b56f', + '#f2a7da', + '#84c3b7', + '#88d8db', + '#71b7ed', + '#b8aeeb', + '#f2a7da', + '#fae69e' + ]); + }); + + it('should apply string theme and colors are undefined', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + dataTable: dataTable_1, + cell: { + color: ['group', 'category'], + size: 'size' + }, + chartTheme: 'semiThemeLight', + colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] + }; + + const result = getChartSpecWithContext(context); + expect(result.spec.theme).toEqual(builtinThemeMap[BuiltinThemeType.SemiThemeLight]); + expect(result.spec.color).toBeUndefined(); + }); -describe('getChartSpecWithContext', () => { - it('should generate correct basic Venn Chart spec', () => { - //console.log("data",data); + it('should apply custom object theme and colors are undefined', () => { const context = { - chartTypeList: CHART_TYPE_LIST, - transpose: false, - command: 'Generate a Venn chart', - cell: { size: 'size', color: ['group', 'category'] }, - dataTable: dataTable, chartType: ChartType.VennChart.toUpperCase(), - colors: color + dataTable: dataTable_1, + cell: { + color: ['group', 'category'], + size: 'size' + }, + chartTheme: { colorScheme: ['#1a2b3c'] }, + colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] }; - const { chartType, spec } = getChartSpecWithContext(context); - //console.log("basic spec", JSON.stringify(spec, null, 2)); - expect(chartType).toBe(ChartType.VennChart); - expect(spec.type).toBe('venn'); - expect(spec.data).toEqual(datatemplate); - expect(spec.color).toEqual(color); + + const result = getChartSpecWithContext(context); + expect(result.spec.theme).toEqual({ colorScheme: ['#1a2b3c'] }); + expect(result.spec.color).toBeUndefined(); }); + + it('should handle missing dataTable fields gracefully', () => { + const context = { + chartType: ChartType.VennChart.toUpperCase(), + cell: { + color: ['group', 'category'], + size: 'size' + }, + dataTable: [{}] + }; + + const result = getChartSpecWithContext(context); + //console.log("basic spec", JSON.stringify(result.spec, null, 2)); + expect(result.spec).toBeDefined(); + expect(result.spec.type).toBe('venn'); + }); + + // it('should handle missing cell fields gracefully', () => { + // const context= { + // chartType: ChartType.VennChart.toUpperCase(), + // dataTable: dataTable_1, + // cell: {} + // }; + + // const result = getChartSpecWithContext(context); + // console.log("basic spec", JSON.stringify(result.spec, null, 2)); + // expect(result.spec).toBeDefined(); + // expect(result.spec.type).toBe('venn'); + // }); }); From c19e5747f00b753d823f3483259c3b5fbc2ed974 Mon Sep 17 00:00:00 2001 From: zjyhhhher <1059752643@qq.com> Date: Thu, 5 Jun 2025 21:56:31 +0800 Subject: [PATCH 3/3] test: add test case of getChartSpecWithContext when chartType is Venn (add specific test for functions in venn.ts) --- .../unit/getChartSpecWithContext_Venn.test.ts | 215 +++--------------- 1 file changed, 28 insertions(+), 187 deletions(-) diff --git a/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts index 44141a5e..f45f8947 100644 --- a/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts +++ b/packages/vmind/__tests__/unit/getChartSpecWithContext_Venn.test.ts @@ -1,71 +1,24 @@ -import { builtinThemeMap } from '../../src/atom/chartGenerator/const'; -import { BuiltinThemeType } from '../../src/atom/chartGenerator/const'; import { getChartSpecWithContext } from '../../src/atom/chartGenerator/spec'; -import { COLOR_THEMES } from '../../src/atom/chartGenerator/spec/constants'; -import type { GenerateChartCellContext } from '../../src/atom/chartGenerator/type'; -import { ChartType, DataCell } from '../../src/types'; +import { ChartType } from '../../src/types'; +import * as vChart from '@visactor/vchart'; -const dataTable_1 = [ - { group: 'A', category: 'A', size: 8 }, - { group: 'B', category: 'B', size: 10 }, - { group: 'C', category: 'C', size: 12 } -]; - -const datatemplate_1 = { - values: [ - { sets: ['A'], value: 8 }, - { sets: ['B'], value: 10 }, - { sets: ['C'], value: 12 } - ] -}; +jest.mock('@visactor/vchart', () => ({ + registerVennChart: jest.fn() +})); const dataTable_2 = [ { group: 'A', category: 'A', size: 8 }, - { group: 'B', category: 'B', size: 10 }, - { group: 'C', category: 'C', size: 12 }, + { group: 'B', size: 10 }, + { group: 'C', category: 'C', size: null }, { group: 'A∩B', category: 'A', size: 4 }, { group: 'A∩B', category: 'B', size: 4 } ]; -const datatemplate_2 = { - values: [ - { sets: ['A'], value: 8 }, - { sets: ['B'], value: 10 }, - { sets: ['C'], value: 12 }, - { sets: ['A', 'B'], value: 4 } - ] -}; - -const dataTable_3 = [ - { group: 'A', category: 'A', size: 8 }, - { group: 'B', category: 'B', size: 10 }, - { group: 'C', category: 'C', size: 12 }, - { group: 'A∩B', category: 'A', size: 4 }, - { group: 'A∩B', category: 'B', size: 4 }, - { group: 'A∩C', category: 'A', size: 4 }, - { group: 'A∩C', category: 'C', size: 4 }, - { group: 'B∩C', category: 'B', size: 4 }, - { group: 'B∩C', category: 'C', size: 4 } -]; - -const datatemplate_3 = { - values: [ - { sets: ['A'], value: 8 }, - { sets: ['B'], value: 10 }, - { sets: ['C'], value: 12 }, - { sets: ['A', 'B'], value: 4 }, - { sets: ['A', 'C'], value: 4 }, - { sets: ['B', 'C'], value: 4 } - ] -}; - const dataTable_4 = [ - // 单元素集合(A, B, C) { group: 'A', category: 'A', size: 8 }, { group: 'B', category: 'B', size: 10 }, { group: 'C', category: 'C', size: 12 }, - // 两元素交集(A∩B, A∩C, B∩C) { group: 'A∩B', category: 'A', size: 4 }, { group: 'A∩B', category: 'B', size: 4 }, @@ -75,7 +28,6 @@ const dataTable_4 = [ { group: 'B∩C', category: 'B', size: 4 }, { group: 'B∩C', category: 'C', size: 4 }, - // 三元素交集(A∩B∩C) { group: 'A∩B∩C', category: 'A', size: 2 }, { group: 'A∩B∩C', category: 'B', size: 2 }, { group: 'A∩B∩C', category: 'C', size: 2 } @@ -94,104 +46,60 @@ const datatemplate_4 = { }; describe('getChartSpecWithContext - Venn Chart', () => { - it('should generate full spec for venn chart with diverse inputs', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should transform data to venn format', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), dataTable: dataTable_4, - chartTheme: 'semiThemeLight', cell: { color: ['group', 'category'], size: 'size' - }, - colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'], - totalTime: 5, - simpleVChartSpec: { - type: 'venn', - legends: [ - { type: 'discrete', orient: 'top' }, - { type: 'discrete', orient: 'bottom' } - ], - title: [ - { text: 'Venn Chart-1', orient: 'top' }, - { text: 'Venn Chart-2', orient: 'left' } - ], - label: [{ position: 'top', style: { fill: 'black' } }], - indicator: [ - { - title: 'Cluster A', - content: ['Overlap A'] - } - ], - palette: ['#123456', '#abcdef'], - background: '#ffffff' } }; const result = getChartSpecWithContext(context); - //console.log("basic spec", JSON.stringify(result.spec, null, 2)); expect(result.spec).toBeDefined(); expect(result.spec.type).toBe('venn'); expect(result.spec.data).toEqual(datatemplate_4); - expect(result.spec.color).toEqual(['#123456', '#abcdef']); - expect(result.spec.background).toEqual('#ffffff'); - expect(result.spec.legends).toEqual([ - { type: 'discrete', orient: 'top' }, - { type: 'discrete', orient: 'bottom' } - ]); - expect(result.spec.title).toEqual([ - { text: 'Venn Chart-1', orient: 'top' }, - { text: 'Venn Chart-2', orient: 'left' } - ]); - expect(result.spec.label).toEqual([{ position: 'top', style: { fill: 'black' }, visible: true }]); - expect(result.spec.indicator).toEqual([ - { - title: { style: { text: 'Cluster A' } }, - content: [{ style: { text: 'Overlap A' } }] - } - ]); - expect(result.spec.valueField).toEqual('value'); - expect(result.spec.categoryField).toEqual('sets'); - expect(result.spec.seriesField).toEqual('sets'); - expect(result.spec.theme).toEqual(builtinThemeMap[BuiltinThemeType.SemiThemeLight]); }); - it('should apply default colors if colors and palette are not given', () => { + it('should set correct venn diagram fields', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_1, + dataTable: dataTable_4, cell: { color: ['group', 'category'], size: 'size' } }; - const result = getChartSpecWithContext(context); - expect(result.spec.color).toBeDefined(); - expect(result.spec.color).toEqual(COLOR_THEMES.default); + expect(result.spec.valueField).toBe('value'); + expect(result.spec.categoryField).toBe('sets'); + expect(result.spec.seriesField).toBe('sets'); }); - it('test different dataTable - dataTable2', () => { + it('should register venn chart when type is venn', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_2, + dataTable: dataTable_4, cell: { color: ['group', 'category'], size: 'size' } }; - const result = getChartSpecWithContext(context); - expect(result.spec).toBeDefined(); - expect(result.spec.type).toBe('venn'); - expect(result.spec.data).toEqual(datatemplate_2); + expect(result).toBeDefined(); + expect(vChart.registerVennChart).toHaveBeenCalled(); }); - it('test different dataTable - dataTable3', () => { + it('should handle missing values in dataTable gracefully', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_3, + dataTable: dataTable_2, cell: { color: ['group', 'category'], size: 'size' @@ -200,97 +108,30 @@ describe('getChartSpecWithContext - Venn Chart', () => { const result = getChartSpecWithContext(context); expect(result.spec).toBeDefined(); - expect(result.spec.type).toBe('venn'); - expect(result.spec.data).toEqual(datatemplate_3); - }); - - it('should apply custom colors if colors are given', () => { - const context = { - chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_1, - cell: { - color: ['group', 'category'], - size: 'size' - }, - colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] - }; - - const result = getChartSpecWithContext(context); - - expect(result.spec.color).toBeDefined(); - expect(result.spec.color).toEqual([ - '#f57c6e', - '#f2b56f', - '#f2a7da', - '#84c3b7', - '#88d8db', - '#71b7ed', - '#b8aeeb', - '#f2a7da', - '#fae69e' - ]); - }); - - it('should apply string theme and colors are undefined', () => { - const context = { - chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_1, - cell: { - color: ['group', 'category'], - size: 'size' - }, - chartTheme: 'semiThemeLight', - colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] - }; - - const result = getChartSpecWithContext(context); - expect(result.spec.theme).toEqual(builtinThemeMap[BuiltinThemeType.SemiThemeLight]); - expect(result.spec.color).toBeUndefined(); }); - it('should apply custom object theme and colors are undefined', () => { + it('should handle missing dataTable fields gracefully', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), - dataTable: dataTable_1, cell: { color: ['group', 'category'], size: 'size' }, - chartTheme: { colorScheme: ['#1a2b3c'] }, - colors: ['#f57c6e', '#f2b56f', '#f2a7da', '#84c3b7', '#88d8db', '#71b7ed', '#b8aeeb', '#f2a7da', '#fae69e'] + dataTable: [{}] }; const result = getChartSpecWithContext(context); - expect(result.spec.theme).toEqual({ colorScheme: ['#1a2b3c'] }); - expect(result.spec.color).toBeUndefined(); + expect(result.spec).toBeDefined(); }); - it('should handle missing dataTable fields gracefully', () => { + it('should handle missing cell fields gracefully', () => { const context = { chartType: ChartType.VennChart.toUpperCase(), - cell: { - color: ['group', 'category'], - size: 'size' - }, - dataTable: [{}] + dataTable: dataTable_2, + cell: {} }; const result = getChartSpecWithContext(context); - //console.log("basic spec", JSON.stringify(result.spec, null, 2)); expect(result.spec).toBeDefined(); - expect(result.spec.type).toBe('venn'); }); - - // it('should handle missing cell fields gracefully', () => { - // const context= { - // chartType: ChartType.VennChart.toUpperCase(), - // dataTable: dataTable_1, - // cell: {} - // }; - - // const result = getChartSpecWithContext(context); - // console.log("basic spec", JSON.stringify(result.spec, null, 2)); - // expect(result.spec).toBeDefined(); - // expect(result.spec.type).toBe('venn'); - // }); });