ldx-widgets
Version:
widgets
377 lines (265 loc) • 10.5 kB
text/coffeescript
describe 'SelectPvrOption', ->
SelectPvrOption = React.createFactory require('../../src/components/select_pvr_option')
#--------------------------------------------------------------------- Default Props
it 'Should have default props', ->
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {}
defaultProps = selectPvrOption.props
expect(defaultProps.hasSubLabel).to.equal(no)
expect(defaultProps.isSelected).to.equal(no)
expect(defaultProps.noWrapOptions).to.equal(no)
expect(defaultProps.option.disabled).to.equal(no)
expect(defaultProps.option.isSubHeader).to.equal(no)
expect(defaultProps.option.isIndented).to.equal(no)
#--------------------------------------------------------------------- Render
it 'Should Render the appropriate CSS class when isSelected property is true', ->
isSelected = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
isSelected: isSelected
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, "is-selected"
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when noWrapOptions property is true', ->
noWrapOptions = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
noWrapOptions: noWrapOptions
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, "no-wrap"
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.disabled property is true', ->
disabled = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
disabled: disabled
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, "is-disabled"
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.isSubHeader property is true', ->
isSubHeader = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
isSubHeader: isSubHeader
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, "is-sub-header"
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.isIndented property is true', ->
isIndented = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
isIndented: isIndented
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, "is-indented"
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.customClass property is defined', ->
customClass = 'custom-class'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
customClass: customClass
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, customClass
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when hasSubLabel property is true', ->
hasSubLabel = yes
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
hasSubLabel: hasSubLabel
}
mainDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, 'has-sublabel'
expect(mainDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.info property is defined and option.label is defined', ->
info = 'Info'
label = 'Label'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
info: info
label: label
}
labelDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, 'has-info'
expect(labelDiv.length).to.equal(1)
it 'Should Render the appropriate CSS class when option.info property is not defined and option.label is defined', ->
label = 'Label'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
label: label
}
labelHasInfoDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, 'has-info'
labelDiv = TestUtils.scryRenderedDOMComponentsWithClass selectPvrOption, 'label'
expect(labelHasInfoDiv.length).to.equal(0)
expect(labelDiv.length).to.equal(1)
it 'Should Render the info when option.info property is defined', ->
info = 'Info'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
info: info
}
infoDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'info'
expect(infoDiv.innerText).to.equal(info)
it 'Should Render the label when option.label property is defined', ->
label = 'Label Text'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
label: label
}
labelDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'label'
expect(labelDiv.innerText).to.equal(label)
it 'Should Render the subLabel when option.subLabel property is defined', ->
subLabel = 'Sub Label'
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
option:
subLabel: subLabel
}
subLabelDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'sub-label'
expect(subLabelDiv.innerText).to.equal(subLabel)
it 'Should set the div height to the optionHeight property', ->
optionHeight = 10
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
optionHeight: optionHeight
}
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'main-label'
expect(mainDiv.style['height']).to.equal("#{optionHeight}px")
it 'Should set the div line-height to the optionHeight property when hasSubLabel property is false', ->
optionHeight = 10
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
optionHeight: optionHeight
hasSubLabel: false
}
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'main-label'
expect(mainDiv.style['line-height']).to.equal("#{optionHeight}px")
it 'Should set the div line-height to the optionHeight divided 2 property when hasSubLabel property is true', ->
optionHeight = 10
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
optionHeight: optionHeight
hasSubLabel: true
}
lineHeight = optionHeight/2
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'main-label'
expect(mainDiv.style['line-height']).to.equal("#{lineHeight}px")
# --------------------------------------------------------------------- onClick
it 'Should call the props.handleChange when clicked if disabled is false or (isSelected is false and canDeselect is true)', ->
handleChange = sinon.spy()
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
handleChange: handleChange
isSelected: false
canDeselect: true
option:
disabled: no
}
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'select-pvr-option'
TestUtils.Simulate.click mainDiv, {}
expect(handleChange.called).to.equal(true)
it 'Should NOT call props.handleChange when clicked if disabled', ->
handleChange = sinon.spy()
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
handleChange: handleChange
option:
disabled: yes
}
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'select-pvr-option'
TestUtils.Simulate.click mainDiv, {}
expect(handleChange.called).to.equal(false)
it 'Should NOT call props.handleChange when clicked if isSelected is true and canDeselect is false', ->
handleChange = sinon.spy()
selectPvrOption = TestUtils.renderIntoDocument SelectPvrOption {
isSelected: true
canDeselect: false
}
mainDiv = TestUtils.findRenderedDOMComponentWithClass selectPvrOption, 'select-pvr-option'
TestUtils.Simulate.click mainDiv, {}
expect(handleChange.called).to.equal(false)
it 'should render children into a collapsible section', ->
sOpts = [
{
value: 1
label: 'Value 1'
}
{
value: 2
label: 'Value 2'
}
]
comp = TestUtils.renderIntoDocument SelectPvrOption {
option:
label: 'item with suboptions'
}, [
SelectPvrOption {
key: 1
option: sOpts[0]
}
SelectPvrOption {
key: 2
option: sOpts[1]
}
]
el = scryRenderedDOMComponentsWithClass(comp, 'sub-options')
opts = scryRenderedDOMComponentsWithClass(comp, 'select-pvr-option')
assert.equal(el.length, 1, 'suboptions container')
assert.equal(opts.length - 1, sOpts.length, 'suboptions items')
it 'should add proper CSS classes when suboptions present', ->
sOpts = [
{
value: 1
label: 'Value 1'
}
{
value: 2
label: 'Value 2'
}
]
comp = TestUtils.renderIntoDocument SelectPvrOption {
option:
label: 'item with suboptions'
isOpen: true
}, [
SelectPvrOption {
key: 1
option: sOpts[0]
}
SelectPvrOption {
key: 2
option: sOpts[1]
}
]
el = scryRenderedDOMComponentsWithClass(comp, 'has-sub-options sub-options-open')
assert.equal(el.length, 1)
it 'should render suboption container with the proper height value when expanded', ->
soSpy = sinon.spy()
sOpts = [
{
value: 1
label: 'Value 1'
}
{
value: 2
label: 'Value 2'
}
{
value: 3
label: 'Value 3'
}
]
comp = TestUtils.renderIntoDocument SelectPvrOption {
option:
label: 'item with suboptions'
optionHeight: 32
setOpenSubOptions: soSpy
}, [
SelectPvrOption {
key: 1
optionHeight: 12
option: sOpts[0]
}
SelectPvrOption {
key: 2
optionHeight: 71
option: sOpts[1]
}
SelectPvrOption {
key: 3
optionHeight: 42
option: sOpts[2]
}
]
el = findRenderedDOMComponentWithClass(comp, 'has-sub-options')
Simulate.click el
# check combined option height plus border height
combinedOptionHeight = 125
combinedBorderSize = 3
assert.equal(combinedOptionHeight + combinedBorderSize, soSpy.lastCall.args[1])