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(); 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(); expect(wrapper.instance().props.filters).deep.equal(defaultFilters); }); describe('getFormDataExtra', () => { let wrapper; let selectedSlice; beforeEach(() => { wrapper = shallow(); 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(); 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); }); }); });