| import './index'; |
| import { expect } from 'chai'; |
| import { setUpElementUnderTest } from '../../../infra-sk/modules/test_util'; |
| import { EditIgnoreRuleSk } from './edit-ignore-rule-sk'; |
| import { EditIgnoreRuleSkPO } from './edit-ignore-rule-sk_po'; |
| |
| describe('edit-ignore-rule-sk', () => { |
| const newInstance = setUpElementUnderTest<EditIgnoreRuleSk>( |
| 'edit-ignore-rule-sk' |
| ); |
| |
| // This date is arbitrary |
| const fakeNow = Date.parse('2020-02-01T00:00:00Z'); |
| const regularNow = Date.now; |
| |
| let editIgnoreRuleSk: EditIgnoreRuleSk; |
| let editIgnoreRuleSkPO: EditIgnoreRuleSkPO; |
| |
| beforeEach(() => { |
| editIgnoreRuleSk = newInstance(); |
| // All tests will have the paramset loaded. |
| editIgnoreRuleSk.paramset = { |
| alpha_type: ['Opaque', 'Premul'], |
| arch: ['arm', 'arm64', 'x86', 'x86_64'], |
| }; |
| Date.now = () => fakeNow; |
| editIgnoreRuleSkPO = new EditIgnoreRuleSkPO(editIgnoreRuleSk); |
| }); |
| |
| afterEach(() => { |
| Date.now = regularNow; |
| }); |
| |
| describe('inputs and outputs', () => { |
| it('has no query, note or expires', () => { |
| expect(editIgnoreRuleSk.query).to.equal(''); |
| expect(editIgnoreRuleSk.note).to.equal(''); |
| expect(editIgnoreRuleSk.expires).to.equal(''); |
| }); |
| |
| it('reflects typed in values', async () => { |
| await editIgnoreRuleSkPO.setExpires('2w'); |
| await editIgnoreRuleSkPO.setNote('this is a bug'); |
| expect(editIgnoreRuleSk.expires).to.equal('2w'); |
| expect(editIgnoreRuleSk.note).to.equal('this is a bug'); |
| }); |
| |
| it('reflects interactions with the query-sk element', async () => { |
| const querySkPO = await editIgnoreRuleSkPO.querySkPO; |
| await querySkPO.clickKey('alpha_type'); |
| await querySkPO.clickValue('Opaque'); |
| expect(editIgnoreRuleSk.query).to.equal('alpha_type=Opaque'); |
| }); |
| |
| it('converts future dates to human readable durations', () => { |
| editIgnoreRuleSk.expires = '2020-02-07T06:00:00Z'; |
| // It is ok that the 6 hours gets rounded out. |
| expect(editIgnoreRuleSk.expires).to.equal('6d'); |
| }); |
| |
| it('converts past or invalid dates to nothing (requiring them to be re-input)', () => { |
| editIgnoreRuleSk.expires = '2020-01-07T06:00:00Z'; |
| expect(editIgnoreRuleSk.expires).to.equal(''); |
| editIgnoreRuleSk.expires = 'invalid date'; |
| expect(editIgnoreRuleSk.expires).to.equal(''); |
| }); |
| |
| it('can add a custom key and value', async () => { |
| editIgnoreRuleSk.query = 'arch=arm64'; |
| |
| // Add a new value to an existing param |
| await editIgnoreRuleSkPO.setCustomKey('arch'); |
| await editIgnoreRuleSkPO.setCustomValue('y75'); |
| await editIgnoreRuleSkPO.clickAddCustomParamBtn(); |
| |
| // add a brand new key and value |
| await editIgnoreRuleSkPO.setCustomKey('custom'); |
| await editIgnoreRuleSkPO.setCustomValue('value'); |
| await editIgnoreRuleSkPO.clickAddCustomParamBtn(); |
| |
| expect(editIgnoreRuleSk.query).to.equal( |
| 'arch=arm64&arch=y75&custom=value' |
| ); |
| // ParamSet should be mutated to have the new values |
| expect(editIgnoreRuleSk.paramset.arch).to.deep.equal([ |
| 'arm', |
| 'arm64', |
| 'x86', |
| 'x86_64', |
| 'y75', |
| ]); |
| expect(editIgnoreRuleSk.paramset.custom).to.deep.equal(['value']); |
| }); |
| }); |
| |
| describe('validation', () => { |
| it('has the error msg hidden by default', async () => { |
| expect(await editIgnoreRuleSkPO.isErrorMessageVisible()).to.be.false; |
| }); |
| |
| it('does not validate when query is empty', async () => { |
| editIgnoreRuleSk.query = ''; |
| editIgnoreRuleSk.expires = '2w'; |
| expect(editIgnoreRuleSk.verifyFields()).to.be.false; |
| expect(await editIgnoreRuleSkPO.isErrorMessageVisible()).to.be.true; |
| }); |
| |
| it('does not validate when expires is empty', async () => { |
| editIgnoreRuleSk.query = 'alpha_type=Opaque'; |
| editIgnoreRuleSk.expires = ''; |
| expect(editIgnoreRuleSk.verifyFields()).to.be.false; |
| expect(await editIgnoreRuleSkPO.isErrorMessageVisible()).to.be.true; |
| }); |
| |
| it('does not validate when both expires and query are empty', async () => { |
| editIgnoreRuleSk.query = ''; |
| editIgnoreRuleSk.expires = ''; |
| expect(editIgnoreRuleSk.verifyFields()).to.be.false; |
| expect(await editIgnoreRuleSkPO.isErrorMessageVisible()).to.be.true; |
| }); |
| |
| it('does passes validation when both expires and query are set', async () => { |
| editIgnoreRuleSk.query = 'foo=bar'; |
| await editIgnoreRuleSkPO.setExpires('1w'); |
| expect(editIgnoreRuleSk.verifyFields()).to.be.true; |
| expect(await editIgnoreRuleSkPO.isErrorMessageVisible()).to.be.false; |
| }); |
| |
| it('requires both a custom key and value', async () => { |
| expect(editIgnoreRuleSk.query).to.equal(''); |
| |
| await editIgnoreRuleSkPO.setCustomKey(''); |
| await editIgnoreRuleSkPO.setCustomValue(''); |
| await editIgnoreRuleSkPO.clickAddCustomParamBtn(); |
| |
| expect(await editIgnoreRuleSkPO.getErrorMessage()).to.contain( |
| 'both a key and a value' |
| ); |
| expect(editIgnoreRuleSk.query).to.equal(''); |
| |
| await editIgnoreRuleSkPO.setCustomKey('custom'); |
| await editIgnoreRuleSkPO.setCustomValue(''); |
| await editIgnoreRuleSkPO.clickAddCustomParamBtn(); |
| |
| expect(await editIgnoreRuleSkPO.getErrorMessage()).to.contain( |
| 'both a key and a value' |
| ); |
| expect(editIgnoreRuleSk.query).to.equal(''); |
| |
| await editIgnoreRuleSkPO.setCustomKey(''); |
| await editIgnoreRuleSkPO.setCustomValue('value'); |
| await editIgnoreRuleSkPO.clickAddCustomParamBtn(); |
| |
| expect(await editIgnoreRuleSkPO.getErrorMessage()).to.contain( |
| 'both a key and a value' |
| ); |
| expect(editIgnoreRuleSk.query).to.equal(''); |
| }); |
| }); |
| }); |