d2-ui
Version:
55 lines (40 loc) • 2.22 kB
JavaScript
import React from 'react';
import {getStubContext} from '../../config/inject-theme';
import DataElementOperandSelector from '../../src/indicator-expression-manager/DataElementOperandSelector.component';
import ListSelectAsync from '../../src/list-select/ListSelectAsync.component';
import {shallow} from 'enzyme';
import LinearProgress from 'material-ui/LinearProgress/LinearProgress';
describe('DataElementOperandSelector component', () => {
let dataElementOperandSelectorComponent;
let onItemDoubleClickSpy;
function renderComponent(props = {}) {
return shallow(<DataElementOperandSelector {...props} />, {
context: getStubContext(),
});
}
beforeEach(() => {
onItemDoubleClickSpy = spy();
dataElementOperandSelectorComponent = renderComponent({onItemDoubleClick: onItemDoubleClickSpy});
});
it('should have the component name as a class', () => {
expect(dataElementOperandSelectorComponent.hasClass('data-element-operand-selector')).to.be.true;
});
it('should render a ListSelectAsync', () => {
expect(dataElementOperandSelectorComponent.find(ListSelectAsync)).to.have.length(1);
});
it('should pass the dataElementOperandStore mapped source to the async list', () => {
const asyncListSelect = dataElementOperandSelectorComponent.find(ListSelectAsync);
expect(asyncListSelect.props().source).to.equal(dataElementOperandSelectorComponent.instance().storeObservable);
});
it('should pass the onItemDoubleClick prop down to the asynclist', () => {
const asyncListSelect = dataElementOperandSelectorComponent.find(ListSelectAsync);
expect(asyncListSelect.props().onItemDoubleClick).to.equal(onItemDoubleClickSpy);
});
it('should render a progress bar when the component is loading', () => {
expect(dataElementOperandSelectorComponent.find(LinearProgress)).to.have.length(1);
});
it('should hide the loading bar if the status isLoading is set to false', () => {
dataElementOperandSelectorComponent.setState({isLoading: false});
expect(dataElementOperandSelectorComponent.find(LinearProgress)).to.have.length(0);
});
});