diff options
Diffstat (limited to 'spec/frontend/feature_flags/components/strategies/percent_rollout_spec.js')
-rw-r--r-- | spec/frontend/feature_flags/components/strategies/percent_rollout_spec.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/spec/frontend/feature_flags/components/strategies/percent_rollout_spec.js b/spec/frontend/feature_flags/components/strategies/percent_rollout_spec.js new file mode 100644 index 00000000000..de0b439f1c5 --- /dev/null +++ b/spec/frontend/feature_flags/components/strategies/percent_rollout_spec.js @@ -0,0 +1,78 @@ +import { mount } from '@vue/test-utils'; +import { GlFormInput } from '@gitlab/ui'; +import PercentRollout from '~/feature_flags/components/strategies/percent_rollout.vue'; +import ParameterFormGroup from '~/feature_flags/components/strategies/parameter_form_group.vue'; +import { PERCENT_ROLLOUT_GROUP_ID } from '~/feature_flags/constants'; +import { percentRolloutStrategy } from '../../mock_data'; + +const DEFAULT_PROPS = { + strategy: percentRolloutStrategy, +}; + +describe('~/feature_flags/components/strategies/percent_rollout.vue', () => { + let wrapper; + let input; + let formGroup; + + const factory = (props = {}) => + mount(PercentRollout, { propsData: { ...DEFAULT_PROPS, ...props } }); + + afterEach(() => { + if (wrapper?.destroy) { + wrapper.destroy(); + } + + wrapper = null; + }); + + describe('with valid percentage', () => { + beforeEach(() => { + wrapper = factory(); + + input = wrapper.find(GlFormInput); + formGroup = wrapper.find(ParameterFormGroup); + }); + + it('displays the current value', () => { + expect(input.element.value).toBe(percentRolloutStrategy.parameters.percentage); + }); + + it('emits a change when the value changes', async () => { + input.setValue('75'); + await wrapper.vm.$nextTick(); + expect(wrapper.emitted('change')).toEqual([ + [{ parameters: { percentage: '75', groupId: PERCENT_ROLLOUT_GROUP_ID } }], + ]); + }); + + it('does not show errors', () => { + expect(formGroup.attributes('state')).toBe('true'); + }); + }); + + describe('with percentage that is out of range', () => { + beforeEach(() => { + wrapper = factory({ strategy: { parameters: { percentage: '101' } } }); + + input = wrapper.find(GlFormInput); + formGroup = wrapper.find(ParameterFormGroup); + }); + + it('shows errors', () => { + expect(formGroup.attributes('state')).toBeUndefined(); + }); + }); + + describe('with percentage that is not a whole number', () => { + beforeEach(() => { + wrapper = factory({ strategy: { parameters: { percentage: '3.14' } } }); + + input = wrapper.find(GlFormInput); + formGroup = wrapper.find(ParameterFormGroup); + }); + + it('shows errors', () => { + expect(formGroup.attributes('state')).toBeUndefined(); + }); + }); +}); |