Skip to content
Snippets Groups Projects
Commit d310fcac authored by Jonathan Eatherly's avatar Jonathan Eatherly
Browse files

add toggle fields test for ChartSettingOrderedFields

parent 12a70624
Branches
Tags
No related merge requests found
......@@ -258,7 +258,7 @@ export default class Visualization extends Component {
}
render() {
const { actionButtons, className, showTitle, isDashboard, width, height, isSlow, expectedDuration, replacementContent } = this.props;
const { actionButtons, className, showTitle, isDashboard, width, height, errorIcon, isSlow, expectedDuration, replacementContent } = this.props;
const { series, CardVisualization } = this.state;
const small = width < 330;
......@@ -270,7 +270,6 @@ export default class Visualization extends Component {
}
let error = this.props.error || this.state.error;
let errorIcon = this.props.errorIcon || this.state.errorIcon;
let loading = !(series && series.length > 0 && _.every(series, (s) => s.data));
let noResults = false;
......@@ -288,22 +287,17 @@ export default class Visualization extends Component {
}
} catch (e) {
error = e.message || "Could not display this chart with this data.";
if (e instanceof ChartSettingsError) {
if (this.props.onOpenChartSettings) {
error = (
<div>
<div>{error}</div>
<div className="mt2">
<button className="Button Button--primary Button--medium" onClick={this.props.onOpenChartSettings}>
{e.buttonText}
</button>
</div>
if (e instanceof ChartSettingsError && this.props.onOpenChartSettings) {
error = (
<div>
<div>{error}</div>
<div className="mt2">
<button className="Button Button--primary Button--medium" onClick={this.props.onOpenChartSettings}>
{e.buttonText}
</button>
</div>
);
}
if (e.section === "Columns") {
errorIcon = 'empty';
}
</div>
);
} else if (e instanceof MinRowsError) {
noResults = true;
}
......
......@@ -43,7 +43,7 @@ export default class Table extends Component {
return true;
}
static checkRenderable([{ data: { cols, rows} }], settings) {
static checkRenderable([{ data: { cols, rows} }]) {
// scalar can always be rendered, nothing needed here
}
......
......@@ -2,7 +2,7 @@ import "__support__/integrated_tests";
import React from "react";
import ChartSettingOrderedFields from "metabase/visualizations/components/Visualization";
import Visualization from "metabase/visualizations/components/Visualization";
import LegendHeader from "metabase/visualizations/components/LegendHeader";
import LegendItem from "metabase/visualizations/components/LegendItem";
......
import "__support__/integrated_tests";
import React from "react";
import ChartSettingOrderedFields from "metabase/visualizations/components/settings/ChartSettingOrderedFields";
import { ScalarCard } from "../__support__/visualizations";
import { mount } from "enzyme";
function renderVisualization(props) {
return mount(<ChartSettingOrderedFields className="spread" {...props} />);
function renderChartSettingOrderedFields(props) {
return mount(<ChartSettingOrderedFields {...props} onChange={(() => {})} />);
}
function getScalarTitles (scalarComponent) {
return scalarComponent.find('.Scalar-title').map((title) => title.text())
}
function getTitles(viz) {
return viz.find(LegendHeader).map(header =>
header.find(LegendItem).map((item) => item.props().title)
)
}
describe("Visualization", () => {
describe("not in dashboard", () => {
describe("scalar card", () => {
it("should not render title", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo")] });
expect(getScalarTitles(viz)).toEqual([]);
describe("ChartSettingOrderedFields", () => {
describe("isAnySelected", () => {
describe("when on or more fields are enabled", () => {
it("should be true", () => {
const chartSettings = renderChartSettingOrderedFields({
columnNames: {id: "ID", text: "Text"},
value: [{name: 'id', enabled: true}, {name: 'text', enabled: false}]
});
expect(chartSettings.instance().isAnySelected()).toEqual(true);
});
});
describe("line card", () => {
it("should not render card title", () => {
let viz = renderVisualization({ series: [LineCard("Foo")] });
expect(getTitles(viz)).toEqual([]);
});
it("should not render setting title", () => {
let viz = renderVisualization({ series: [LineCard("Foo", { card: { visualization_settings: { "card.title": "Foo_title" }}})] });
expect(getTitles(viz)).toEqual([]);
});
it("should render breakout multiseries titles", () => {
let viz = renderVisualization({ series: [MultiseriesLineCard("Foo")] });
expect(getTitles(viz)).toEqual([
["Foo_cat1", "Foo_cat2"]
]);
describe("when no fields are enabled", () => {
it("should be false", () => {
const chartSettings = renderChartSettingOrderedFields({
columnNames: {id: "ID", text: "Text"},
value: [{name: 'id', enabled: false}, {name: 'text', enabled: false}]
});
expect(chartSettings.instance().isAnySelected()).toEqual(false);
});
});
});
describe("in dashboard", () => {
describe("scalar card", () => {
it("should render a scalar title, not a legend title", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo")], showTitle: true, isDashboard: true });
expect(getTitles(viz)).toEqual([]);
expect(getScalarTitles(viz).length).toEqual(1);
});
it("should render title when loading", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo", { data: null })], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name"]
]);
});
it("should render title when there's an error", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo")], showTitle: true, error: "oops" });
expect(getTitles(viz)).toEqual([
["Foo_name"]
]);
});
it("should not render scalar title", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo")], showTitle: true });
expect(getTitles(viz)).toEqual([]);
});
it("should render multi scalar titles", () => {
let viz = renderVisualization({ series: [ScalarCard("Foo"), ScalarCard("Bar")], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name", "Bar_name"]
]);
describe("toggleAll", () => {
describe("when passed false", () => {
it("should mark all fields as enabled", () => {
const chartSettings = renderChartSettingOrderedFields({
columnNames: {id: "ID", text: "Text"},
value: [{name: 'id', enabled: false}, {name: 'text', enabled: false}]
});
const chartSettingsInstance = chartSettings.instance();
chartSettingsInstance.toggleAll(false);
expect(chartSettingsInstance.state.data.items).toEqual([{name: 'id', enabled: true}, {name: 'text', enabled: true}]);
});
});
describe("line card", () => {
it("should render normal title", () => {
let viz = renderVisualization({ series: [LineCard("Foo")], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name"]
]);
});
it("should render normal title and breakout multiseries titles", () => {
let viz = renderVisualization({ series: [MultiseriesLineCard("Foo")], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name"],
["Foo_cat1", "Foo_cat2"]
]);
});
it("should render dashboard multiseries titles", () => {
let viz = renderVisualization({ series: [LineCard("Foo"), LineCard("Bar")], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name", "Bar_name"]
]);
});
it("should render dashboard multiseries titles and chart setting title", () => {
let viz = renderVisualization({ series: [
LineCard("Foo", { card: { visualization_settings: { "card.title": "Foo_title" }}}),
LineCard("Bar")
], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_title"],
["Foo_name", "Bar_name"]
]);
});
it("should render multiple breakout multiseries titles (with both card titles and breakout values)", () => {
let viz = renderVisualization({ series: [MultiseriesLineCard("Foo"), MultiseriesLineCard("Bar")], showTitle: true });
expect(getTitles(viz)).toEqual([
["Foo_name: Foo_cat1", "Foo_name: Foo_cat2", "Bar_name: Bar_cat1", "Bar_name: Bar_cat2"]
]);
describe("when passed true", () => {
it("should mark all fields as disabled", () => {
const chartSettings = renderChartSettingOrderedFields({
columnNames: {id: "ID", text: "Text"},
value: [{name: 'id', enabled: true}, {name: 'text', enabled: true}]
});
const chartSettingsInstance = chartSettings.instance();
chartSettingsInstance.toggleAll(true);
expect(chartSettingsInstance.state.data.items).toEqual([{name: 'id', enabled: false}, {name: 'text', enabled: false}]);
});
});
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment