// @flow
import React from 'react';
import { expect } from 'chai';
import { mount } from 'enzyme';
import sinon from 'sinon';
import { spies } from '@test';
import C from './ParameterCreate.jsx';
describe('', () => {
let wrapper;
const name = 'parameter';
// shortcut for a func to update just the parameter obj, not the name
const _updateParameter = (name, p, oldName) => {
wrapper.setProps({
param: p,
});
};
const params = [];
afterEach(() => {
if(wrapper && wrapper.unmount)
wrapper.unmount();
});
it(`saves the default value of a boolean parameter`, () => {
let param = {
type: '',
default: '',
description: '',
};
const updateParameter = sinon.spy(_updateParameter);
wrapper = mount(
);
// sanity checks
expect(wrapper.find('TypedField')).to.have.prop('name', name);
wrapper.find('Input.custom-select').prop('onChange')( { target: { value: 'bool' }});
wrapper.update();
expect(wrapper.props().param).to.deep.equal(
{
type: 'bool',
default: '',
description: '',
}
);
wrapper.find('input[type="radio"]').at(0).simulate('change', { target: { checked: 'true' }});;
//wrapper.find('input[type="radio"]').at(0).simulate('change', { target: { value: 'true' }});;
wrapper.update();
expect(wrapper.props().param).to.deep.equal({
type: 'bool',
default: true,
description: '',
});
});
describe('regression', () => {
it(`doesnt let min be larger than max in a range parameter`, () => {
let param = {
type: 'int8',
default: '',
description: '',
range: [
1,
2
]
};
const updateParameter = sinon.spy(_updateParameter);
wrapper = mount(
);
// sanity checks
expect(wrapper.find('TypedField')).to.have.prop('name', name);
wrapper.find('Input[step="1"]').at(0).prop('onChange')( { target: { value: 3 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(0);
expect(wrapper.props().param.range).to.deep.equal([1, 2]);
wrapper.find('Input[step="1"]').at(0).prop('onChange')( { target: { value: 2 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(1);
expect(wrapper.props().param.range).to.deep.equal([2, 2]);
});
it(`doesnt let min be larger than max in a range parameter for negative numbers`, () => {
let param = {
type: 'int8',
default: '',
description: '',
range: [
-1,
-2
]
};
const updateParameter = sinon.spy(_updateParameter);
wrapper = mount(
);
// sanity checks
expect(wrapper.find('TypedField')).to.have.prop('name', name);
wrapper.find('Input[step="1"]').at(0).prop('onChange')( { target: { value: -1 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(0);
expect(wrapper.props().param.range).to.deep.equal([-1, -2]);
wrapper.find('Input[step="1"]').at(0).prop('onChange')( { target: { value: -2 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(1);
expect(wrapper.props().param.range).to.deep.equal([-2, -2]);
wrapper.find('Input[step="1"]').at(0).prop('onChange')( { target: { value: -3 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(2);
expect(wrapper.props().param.range).to.deep.equal([-3, -2]);
});
it(`doesnt let max be smaller than min in a range parameter`, () => {
let param = {
type: 'int8',
default: '',
description: '',
range: [
3,
4
]
};
const updateParameter = sinon.spy(_updateParameter);
wrapper = mount(
);
// sanity checks
expect(wrapper.find('TypedField')).to.have.prop('name', name);
wrapper.find('Input[step="1"]').at(1).prop('onChange')( { target: { value: 1 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(0);
expect(wrapper.props().param.range).to.deep.equal([3, 4]);
wrapper.find('Input[step="1"]').at(1).prop('onChange')( { target: { value: 3 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(1);
expect(wrapper.props().param.range).to.deep.equal([3, 3]);
});
it(`doesnt let max be smaller than min in a range parameter for negative numbers`, () => {
let param = {
type: 'int8',
default: '',
description: '',
range: [
-3,
-2
]
};
const updateParameter = sinon.spy(_updateParameter);
wrapper = mount(
);
// sanity checks
expect(wrapper.find('TypedField')).to.have.prop('name', name);
wrapper.find('Input[step="1"]').at(1).prop('onChange')( { target: { value: -5 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(0);
expect(wrapper.props().param.range).to.deep.equal([-3, -2]);
wrapper.find('Input[step="1"]').at(1).prop('onChange')( { target: { value: -3 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(1);
expect(wrapper.props().param.range).to.deep.equal([-3, -3]);
wrapper.find('Input[step="1"]').at(1).prop('onChange')( { target: { value: -1 }});
wrapper.update();
expect(updateParameter.callCount).to.equal(2);
expect(wrapper.props().param.range).to.deep.equal([-3, -1]);
});
});
});