Fix rule schedule interval input invalid values (#137632)

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Jiawei Wu 2022-08-02 17:52:20 -07:00 committed by GitHub
parent 76c55a2d01
commit 871cd980ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 3 deletions

View file

@ -377,6 +377,44 @@ describe('rule_form', () => {
);
});
it('handles schedule interval inputs correctly', async () => {
const getIntervalInput = () => {
return wrapper.find('[data-test-subj="intervalInput"] input').first();
};
await setup();
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: '2' } });
expect(getIntervalInput().props().value).toEqual(2);
getIntervalInput().simulate('change', { target: { value: '20' } });
expect(getIntervalInput().props().value).toEqual(20);
getIntervalInput().simulate('change', { target: { value: '999' } });
expect(getIntervalInput().props().value).toEqual(999);
// Invalid values:
await setup();
getIntervalInput().simulate('change', { target: { value: '0' } });
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: 'INVALID' } });
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: '-123' } });
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: '1.0123' } });
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: '0.0123' } });
expect(getIntervalInput().props().value).toEqual(1);
getIntervalInput().simulate('change', { target: { value: '+123' } });
expect(getIntervalInput().props().value).toEqual(1);
});
it('does not render registered rule type which non editable', async () => {
await setup();
const ruleTypeSelectOptions = wrapper.find(

View file

@ -80,6 +80,8 @@ import { getInitialInterval } from './get_initial_interval';
const ENTER_KEY = 13;
const INTEGER_REGEX = /^[1-9][0-9]*$/;
function getProducerFeatureName(producer: string, kibanaFeatures: KibanaFeature[]) {
return kibanaFeatures.find((featureItem) => featureItem.id === producer)?.name;
}
@ -729,9 +731,11 @@ export const RuleForm = ({
data-test-subj="intervalInput"
onChange={(e) => {
const value = e.target.value;
const interval = value !== '' ? parseInt(value, 10) : undefined;
setRuleInterval(interval);
setScheduleProperty('interval', `${value}${ruleIntervalUnit}`);
if (value === '' || INTEGER_REGEX.test(value)) {
const parsedValue = value === '' ? '' : parseInt(value, 10);
setRuleInterval(parsedValue || undefined);
setScheduleProperty('interval', `${parsedValue}${ruleIntervalUnit}`);
}
}}
/>
</EuiFlexItem>