blob: 95f013f1150801575640b9708c854fb7dccf2743 [file] [log] [blame]
import React from 'react';
import { shallow } from 'enzyme';
import { describe, it } from 'mocha';
import { expect } from 'chai';
import sinon from 'sinon';
import * as dashboardActions from '../../../javascripts/dashboard/actions';
import * as chartActions from '../../../javascripts/chart/chartAction';
import Dashboard from '../../../javascripts/dashboard/components/Dashboard';
import { defaultFilters, dashboard, charts } from './fixtures';
describe('Dashboard', () => {
const mockedProps = {
actions: { ...chartActions, ...dashboardActions },
initMessages: [],
dashboard: dashboard.dashboard,
slices: charts,
filters: dashboard.filters,
datasources: dashboard.datasources,
refresh: false,
timeout: 60,
isStarred: false,
userId: dashboard.userId,
};
it('should render', () => {
const wrapper = shallow(<Dashboard {...mockedProps} />);
expect(wrapper.find('#dashboard-container')).to.have.length(1);
expect(wrapper.instance().getAllSlices()).to.have.length(2);
});
it('should handle metadata default_filters', () => {
const wrapper = shallow(<Dashboard {...mockedProps} />);
expect(wrapper.instance().props.filters).deep.equal(defaultFilters);
});
describe('getFormDataExtra', () => {
let wrapper;
let selectedSlice;
beforeEach(() => {
wrapper = shallow(<Dashboard {...mockedProps} />);
selectedSlice = wrapper.instance().props.dashboard.slices[1];
});
it('should carry default_filters', () => {
const extraFilters = wrapper.instance().getFormDataExtra(selectedSlice).extra_filters;
expect(extraFilters[0]).to.deep.equal({ col: 'region', op: 'in', val: [] });
expect(extraFilters[1]).to.deep.equal({ col: 'country_name', op: 'in', val: ['United States'] });
});
it('should carry updated filter', () => {
wrapper.setProps({
filters: {
256: {
region: [],
country_name: ['France'],
},
},
});
const extraFilters = wrapper.instance().getFormDataExtra(selectedSlice).extra_filters;
expect(extraFilters[1]).to.deep.equal({ col: 'country_name', op: 'in', val: ['France'] });
});
});
describe('refreshExcept', () => {
let wrapper;
let spy;
beforeEach(() => {
wrapper = shallow(<Dashboard {...mockedProps} />);
spy = sinon.spy(wrapper.instance(), 'fetchSlices');
});
afterEach(() => {
spy.restore();
});
it('should not refresh filter slice', () => {
const filterKey = Object.keys(defaultFilters)[0];
wrapper.instance().refreshExcept(filterKey);
expect(spy.callCount).to.equal(1);
expect(spy.getCall(0).args[0].length).to.equal(1);
});
it('should refresh all slices', () => {
wrapper.instance().refreshExcept();
expect(spy.callCount).to.equal(1);
expect(spy.getCall(0).args[0].length).to.equal(2);
});
});
});