diff --git a/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue b/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue index 292a70cd69ad8ab9a5a81a4ba454401ea7668457..90b906268ba88f451548d8c9822dd4573469940b 100644 --- a/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue +++ b/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue @@ -111,9 +111,7 @@ export default { required: false, skipValidation: true, }), - visibility: initFormField({ - value: this.projectVisibility, - }), + visibility: initFormField({ value: this.projectVisibility }), }, }; return { @@ -165,12 +163,8 @@ export default { }, watch: { // eslint-disable-next-line func-names - 'form.fields.namespace.value': function (newVal) { - const { visibility } = newVal; - - if (this.projectAllowedVisibility.includes(visibility)) { - this.form.fields.visibility.value = visibility; - } + 'form.fields.namespace.value': function () { + this.form.fields.visibility.value = PRIVATE_VISIBILITY; }, // eslint-disable-next-line func-names 'form.fields.name.value': function (newVal) { diff --git a/spec/frontend/pages/projects/forks/new/components/fork_form_spec.js b/spec/frontend/pages/projects/forks/new/components/fork_form_spec.js index 79a0ab006dae61d33ee322e71b6179d2e49bb7bb..03338b1930c905465964f6168ca5e5f670bfcce7 100644 --- a/spec/frontend/pages/projects/forks/new/components/fork_form_spec.js +++ b/spec/frontend/pages/projects/forks/new/components/fork_form_spec.js @@ -1,4 +1,4 @@ -import { GlFormInputGroup, GlFormInput, GlForm, GlFormRadio } from '@gitlab/ui'; +import { GlFormInputGroup, GlFormInput, GlForm, GlFormRadio, GlFormSelect } from '@gitlab/ui'; import { mount, shallowMount } from '@vue/test-utils'; import axios from 'axios'; import AxiosMockAdapter from 'axios-mock-adapter'; @@ -89,6 +89,7 @@ describe('ForkForm component', () => { axiosMock.restore(); }); + const findFormSelect = () => wrapper.find(GlFormSelect); const findPrivateRadio = () => wrapper.find('[data-testid="radio-private"]'); const findInternalRadio = () => wrapper.find('[data-testid="radio-internal"]'); const findPublicRadio = () => wrapper.find('[data-testid="radio-public"]'); @@ -229,6 +230,37 @@ describe('ForkForm component', () => { expect(wrapper.findAll(GlFormRadio)).toHaveLength(3); }); + it('resets the visibility to default "private" when the namespace is changed', async () => { + const namespaces = [ + { + visibility: 'private', + }, + { + visibility: 'internal', + }, + { + visibility: 'public', + }, + ]; + + mockGetRequest(); + createComponent( + { + projectVisibility: 'public', + }, + { + namespaces, + }, + ); + + expect(wrapper.vm.form.fields.visibility.value).toBe('public'); + findFormSelect().vm.$emit('input', namespaces[1]); + + await wrapper.vm.$nextTick(); + + expect(wrapper.vm.form.fields.visibility.value).toBe('private'); + }); + it.each` project | namespace | privateIsDisabled | internalIsDisabled | publicIsDisabled ${'private'} | ${'private'} | ${undefined} | ${'true'} | ${'true'} @@ -324,7 +356,6 @@ describe('ForkForm component', () => { await submitForm(); - expect(wrapper.find('[name="visibility"]:checked').exists()).toBe(false); expect(axios.post).not.toHaveBeenCalled(); }); });