Skip to content
Snippets Groups Projects
Commit 9cc9f231 authored by Tom Robinson's avatar Tom Robinson
Browse files

Fix unit tests

parent 49a0bbca
No related branches found
No related tags found
No related merge requests found
import { getComputedSettingsForSeries } from "metabase/visualizations/lib/settings/visualization";
import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
export function makeCard(card) {
return {
name: "card",
......@@ -160,3 +163,19 @@ export function dispatchUIEvent(element, eventName) {
e.initUIEvent(eventName, true, true, window, 1);
element.dispatchEvent(e);
}
export function renderChart(renderer, element, series, props) {
const chartType = series[0].card.display;
const settings = getComputedSettingsForSeries(series);
return renderer(element, {
chartType,
series,
settings,
...props,
});
}
export function renderLineAreaBar(...args) {
return renderChart(lineAreaBarRenderer, ...args);
}
import "__support__/mocks"; // included explicitly whereas with integrated tests it comes with __support__/integrated_tests
import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
import {
NumberColumn,
StringColumn,
dispatchUIEvent,
renderLineAreaBar,
} from "../__support__/visualizations";
const DEFAULT_SETTINGS = {
......@@ -14,6 +14,7 @@ const DEFAULT_SETTINGS = {
"graph.y_axis.axis_enabled": true,
"graph.colors": ["#00FF00", "#FF0000"],
series: () => ({ display: "bar" }),
column: () => ({ date_style: "MMMM D, YYYY" }),
};
describe("LineAreaBarRenderer-bar", () => {
......@@ -34,109 +35,85 @@ describe("LineAreaBarRenderer-bar", () => {
["area", "bar"].forEach(chartType =>
["stacked", "normalized"].forEach(stack_type =>
it(
"should render a " +
(stack_type || "") +
" " +
chartType +
" chart with 2 series",
function() {
return new Promise((resolve, reject) => {
let hoverCount = 0;
lineAreaBarRenderer(element, {
chartType: chartType,
series: [
{
card: {},
data: {
cols: [
StringColumn({
display_name: "Category",
source: "breakout",
}),
NumberColumn({
display_name: "Sum",
source: "aggregation",
}),
],
rows: [["A", 1]],
},
it(`should render a ${stack_type ||
""} ${chartType} chart with 2 series`, () => {
const onHoverChange = jest.fn();
renderLineAreaBar(
element,
[
{
card: {
display: chartType,
visualization_settings: {
...DEFAULT_SETTINGS,
"stackable.stack_type": stack_type,
},
{
card: {},
data: {
cols: [
StringColumn({
display_name: "Category",
source: "breakout",
}),
NumberColumn({
display_name: "Count",
source: "aggregation",
}),
],
rows: [["A", 2]],
},
},
],
settings: {
...DEFAULT_SETTINGS,
"stackable.stack_type": stack_type,
},
onHoverChange: hover => {
try {
const data =
hover.data &&
hover.data.map(({ key, value }) => ({ key, value }));
let standardDisplay;
let normalizedDisplay;
hoverCount++;
if (hoverCount === 1) {
standardDisplay = [
{ key: "Category", value: "A" },
{ key: "Sum", value: 1 },
];
normalizedDisplay = [
{ key: "Category", value: "A" },
{ key: "% Sum", value: "33%" },
];
expect(data).toEqual(
stack_type === "normalized"
? normalizedDisplay
: standardDisplay,
);
dispatchUIEvent(qsa(".bar, .dot")[1], "mousemove");
} else if (hoverCount === 2) {
standardDisplay = [
{ key: "Category", value: "A" },
{ key: "Count", value: 2 },
];
normalizedDisplay = [
{ key: "Category", value: "A" },
{ key: "% Count", value: "67%" },
];
data: {
cols: [
StringColumn({
display_name: "Category",
source: "breakout",
}),
NumberColumn({
display_name: "Sum",
source: "aggregation",
}),
],
rows: [["A", 1]],
},
},
{
card: {},
data: {
cols: [
StringColumn({
display_name: "Category",
source: "breakout",
}),
NumberColumn({
display_name: "Count",
source: "aggregation",
}),
],
rows: [["A", 2]],
},
},
],
{
onHoverChange,
},
);
expect(data).toEqual(
stack_type === "normalized"
? normalizedDisplay
: standardDisplay,
);
// hover over each bar
dispatchUIEvent(qsa(".bar, .dot")[0], "mousemove");
dispatchUIEvent(qsa(".bar, .dot")[1], "mousemove");
resolve();
}
} catch (e) {
reject(e);
}
},
});
dispatchUIEvent(qsa(".bar, .dot")[0], "mousemove");
});
},
),
const { calls } = onHoverChange.mock;
if (stack_type === "normalized") {
expect(getDataKeyValues(calls[0][0])).toEqual([
{ key: "Category", value: "A" },
{ key: "% Sum", value: "33%" },
]);
expect(getDataKeyValues(calls[1][0])).toEqual([
{ key: "Category", value: "A" },
{ key: "% Count", value: "67%" },
]);
} else {
expect(getDataKeyValues(calls[0][0])).toEqual([
{ key: "Category", value: "A" },
{ key: "Sum", value: 1 },
]);
expect(getDataKeyValues(calls[1][0])).toEqual([
{ key: "Category", value: "A" },
{ key: "Count", value: 2 },
]);
}
}),
),
);
});
function getDataKeyValues(hover) {
return hover.data.map(({ key, value }) => ({ key, value }));
}
......@@ -2,7 +2,11 @@ import "__support__/mocks"; // included explicitly whereas with integrated tests
import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
import { NumberColumn, dispatchUIEvent } from "../__support__/visualizations";
import {
NumberColumn,
dispatchUIEvent,
renderLineAreaBar,
} from "../__support__/visualizations";
const DEFAULT_SETTINGS = {
"graph.x_axis.scale": "linear",
......@@ -11,6 +15,7 @@ const DEFAULT_SETTINGS = {
"graph.y_axis.axis_enabled": true,
"graph.colors": ["#000000"],
series: () => ({ display: "scatter" }),
column: () => ({}),
};
describe("LineAreaBarRenderer-scatter", () => {
......@@ -32,11 +37,14 @@ describe("LineAreaBarRenderer-scatter", () => {
});
it("should render a scatter chart with 2 dimensions", function(done) {
lineAreaBarRenderer(element, {
chartType: "scatter",
series: [
renderLineAreaBar(
element,
[
{
card: {},
card: {
display: "scatter",
visualization_settings: DEFAULT_SETTINGS,
},
data: {
cols: [
NumberColumn({ display_name: "A", source: "breakout" }),
......@@ -46,27 +54,31 @@ describe("LineAreaBarRenderer-scatter", () => {
},
},
],
settings: DEFAULT_SETTINGS,
onHoverChange: hover => {
expect(hover.data.length).toBe(2);
expect(hover.data[0].key).toBe("A");
expect(hover.data[0].value).toBe(1);
expect(hover.data[1].key).toBe("B");
expect(hover.data[1].value).toBe(2);
{
onHoverChange: hover => {
expect(hover.data.length).toBe(2);
expect(hover.data[0].key).toBe("A");
expect(hover.data[0].value).toBe(1);
expect(hover.data[1].key).toBe("B");
expect(hover.data[1].value).toBe(2);
done();
done();
},
},
});
);
dispatchUIEvent(qsa(".bubble")[0], "mousemove");
});
it("should render a scatter chart with 2 dimensions and 1 metric", function(done) {
lineAreaBarRenderer(element, {
chartType: "scatter",
series: [
renderLineAreaBar(
element,
[
{
card: {},
card: {
display: "scatter",
visualization_settings: DEFAULT_SETTINGS,
},
data: {
cols: [
NumberColumn({ display_name: "A", source: "breakout" }),
......@@ -77,18 +89,19 @@ describe("LineAreaBarRenderer-scatter", () => {
},
},
],
settings: DEFAULT_SETTINGS,
onHoverChange: hover => {
expect(hover.data.length).toBe(3);
expect(hover.data[0].key).toBe("A");
expect(hover.data[0].value).toBe(1);
expect(hover.data[1].key).toBe("B");
expect(hover.data[1].value).toBe(2);
expect(hover.data[2].key).toBe("C");
expect(hover.data[2].value).toBe(3);
done();
{
onHoverChange: hover => {
expect(hover.data.length).toBe(3);
expect(hover.data[0].key).toBe("A");
expect(hover.data[0].value).toBe(1);
expect(hover.data[1].key).toBe("B");
expect(hover.data[1].value).toBe(2);
expect(hover.data[2].key).toBe("C");
expect(hover.data[2].value).toBe(3);
done();
},
},
});
);
dispatchUIEvent(qsa(".bubble")[0], "mousemove");
});
......
import "__support__/mocks"; // included explicitly whereas with integrated tests it comes with __support__/integrated_tests
import lineAreaBarRenderer from "metabase/visualizations/lib/LineAreaBarRenderer";
import { formatValue } from "metabase/lib/formatting";
import d3 from "d3";
......@@ -10,6 +9,7 @@ import {
DateTimeColumn,
StringColumn,
dispatchUIEvent,
renderLineAreaBar,
} from "../__support__/visualizations";
let formatTz = offset =>
......@@ -268,46 +268,49 @@ describe("LineAreaBarRenderer", () => {
unit,
settings,
}) => {
lineAreaBarRenderer(element, {
chartType: "line",
series: rowsOfSeries.map(rows => ({
renderLineAreaBar(
element,
rowsOfSeries.map(rows => ({
data: {
cols: [DateTimeColumn({ unit }), NumberColumn()],
rows: rows,
},
card: {},
card: {
display: "line",
visualization_settings: {
"graph.x_axis.scale": "timeseries",
"graph.x_axis.axis_enabled": true,
"graph.colors": ["#000000"],
...settings,
},
},
})),
settings: {
"graph.x_axis.scale": "timeseries",
"graph.x_axis.axis_enabled": true,
"graph.colors": ["#000000"],
series: () => ({ display: "line" }),
...settings,
{
onHoverChange,
},
onHoverChange,
});
);
};
const renderScalarBar = ({ scalars, onHoverChange, unit }) => {
lineAreaBarRenderer(element, {
chartType: "bar",
series: scalars.map(scalar => ({
renderLineAreaBar(
element,
scalars.map(scalar => ({
data: {
cols: [StringColumn(), NumberColumn()],
rows: [scalar],
},
card: {},
card: {
display: "bar",
visualization_settings: {
"bar.scalar_series": true,
"funnel.type": "bar",
"graph.colors": ["#509ee3", "#9cc177", "#a989c5", "#ef8c8c"],
"graph.x_axis.axis_enabled": true,
"graph.x_axis.scale": "ordinal",
},
},
})),
settings: {
"bar.scalar_series": true,
"funnel.type": "bar",
"graph.colors": ["#509ee3", "#9cc177", "#a989c5", "#ef8c8c"],
"graph.x_axis.axis_enabled": true,
"graph.x_axis.scale": "ordinal",
"graph.x_axis._is_numeric": false,
series: () => ({ display: "bar" }),
},
onHoverChange,
});
{ onHoverChange },
);
};
});
......@@ -97,6 +97,7 @@ describe("settings framework", () => {
hidden: false,
props: {},
value: "foo",
set: true,
},
]);
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment