mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
Fix rule schedule interval input invalid values (#137632)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
76c55a2d01
commit
871cd980ec
2 changed files with 45 additions and 3 deletions
|
@ -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(
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue