diff options
| -rw-r--r-- | karma.conf.js | 2 | ||||
| -rw-r--r-- | src/settings/components/ui/input.jsx | 5 | ||||
| -rw-r--r-- | test/settings/components/ui/input.test.jsx | 83 | 
3 files changed, 86 insertions, 4 deletions
| diff --git a/karma.conf.js b/karma.conf.js index 859cee0..46a1774 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -7,11 +7,13 @@ module.exports = function (config) {      frameworks: ['mocha'],      files: [        'test/**/*.test.js', +      'test/**/*.test.jsx',        'test/**/*.html'      ],      preprocessors: {        'test/**/*.test.js': [ 'webpack' ], +      'test/**/*.test.jsx': [ 'webpack' ],        'test/**/*.html': ['html2js']      }, diff --git a/src/settings/components/ui/input.jsx b/src/settings/components/ui/input.jsx index 5138411..e99dbc7 100644 --- a/src/settings/components/ui/input.jsx +++ b/src/settings/components/ui/input.jsx @@ -6,10 +6,7 @@ class Input extends Component {    renderText(props) {      let inputClassName = props.error ? 'input-error' : '';      return <div className='settings-ui-input'> -      <label -        type='text' -        htmlFor={props.id} -      >{ props.label }</label> +      <label htmlFor={props.id}>{ props.label }</label>        <input type='text' className={inputClassName} {...props} />      </div>;    } diff --git a/test/settings/components/ui/input.test.jsx b/test/settings/components/ui/input.test.jsx new file mode 100644 index 0000000..98f2cef --- /dev/null +++ b/test/settings/components/ui/input.test.jsx @@ -0,0 +1,83 @@ +import { expect } from 'chai'; +import { h, render } from 'preact'; +import Input from 'settings/components/ui/input' + +describe("settings/ui/Input", () => { +  beforeEach(() => { +    document.body.innerHTML = ''; +  }); + +  context("type=text", () => { +    it('renders text input', () => { +      render(<Input type='text' name='myname' label='myfield' value='myvalue'/>, document.body) + +      let label = document.querySelector('label'); +      let input = document.querySelector('input'); +      expect(label.textContent).to.contain('myfield'); +      expect(input.type).to.contain('text'); +      expect(input.name).to.contain('myname'); +      expect(input.value).to.contain('myvalue'); +    }); + +    it('invoke onChange', (done) => { +      render(<Input type='text' name='myname' label='myfield' value='myvalue' onChange={(e) => { +        expect(e.target.value).to.equal('newvalue'); +        done(); +      }}/>, document.body); + +      let input = document.querySelector('input'); +      input.value = 'newvalue'; +      input.dispatchEvent(new Event('change')) +    }); +  }); + +  context("type=radio", () => { +    it('renders radio button', () => { +      render(<Input type='radio' name='myname' label='myfield' value='myvalue'/>, document.body) + +      let label = document.querySelector('label'); +      let input = document.querySelector('input'); +      expect(label.textContent).to.contain('myfield'); +      expect(input.type).to.contain('radio'); +      expect(input.name).to.contain('myname'); +      expect(input.value).to.contain('myvalue'); +    }); + +    it('invoke onChange', (done) => { +      render(<Input type='text' name='radio' label='myfield' value='myvalue' onChange={(e) => { +        expect(e.target.checked).to.be.true; +        done(); +      }}/>, document.body); + +      let input = document.querySelector('input'); +      input.checked = true; +      input.dispatchEvent(new Event('change')) +    }); +  }); + +  context("type=textarea", () => { +    it('renders textarea button', () => { +      render(<Input type='textarea' name='myname' label='myfield' value='myvalue' error='myerror' />, document.body) + +      let label = document.querySelector('label'); +      let textarea = document.querySelector('textarea'); +      let error = document.querySelector('.settings-ui-input-error'); +      expect(label.textContent).to.contain('myfield'); +      expect(textarea.nodeName).to.contain('TEXTAREA'); +      expect(textarea.name).to.contain('myname'); +      expect(textarea.value).to.contain('myvalue'); +      expect(error.textContent).to.contain('myerror'); +    }); + +    it('invoke onChange', (done) => { +      render(<Input type='textarea' name='myname' label='myfield' value='myvalue' onChange={(e) => { +        expect(e.target.value).to.equal('newvalue'); +        done(); +      }}/>, document.body); + +      let input = document.querySelector('textarea'); +      input.value = 'newvalue' +      input.dispatchEvent(new Event('change')) +    }); +  }); +}); | 
