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 ccdcd3c94e7120416da8b7f3b894f6b0bea1b73d..cc46c793bd3dec26be6ff703e67116ba5c4fad10 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 @@ -39,6 +39,14 @@ const initFormField = ({ value, required = true, skipValidation = false }) => ({ feedback: null, }); +function sortNamespaces(namespaces) { + if (!namespaces || !namespaces?.length) { + return namespaces; + } + + return namespaces.sort((a, b) => a.name.localeCompare(b.name)); +} + export default { components: { GlForm, @@ -206,7 +214,7 @@ export default { methods: { async fetchNamespaces() { const { data } = await axios.get(this.endpoint); - this.namespaces = data.namespaces; + this.namespaces = sortNamespaces(data.namespaces); }, isVisibilityLevelDisabled(visibility) { return !this.allowedVisibilityLevels.includes(visibility); 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 f9be07965465218be0fa2d442d7a28c4702f1c4a..9fd9722b922bf3b28516706e8a585e84e8527158 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 @@ -181,6 +181,20 @@ describe('ForkForm component', () => { expect(optionsArray.at(1).text()).toBe(MOCK_NAMESPACES_RESPONSE[0].name); expect(optionsArray.at(2).text()).toBe(MOCK_NAMESPACES_RESPONSE[1].name); }); + + it('set namespaces in alphabetical order', async () => { + const namespace = { + name: 'aaa', + id: 3, + }; + mockGetRequest({ + namespaces: [...MOCK_NAMESPACES_RESPONSE, namespace], + }); + createComponent(); + await axios.waitForAll(); + + expect(wrapper.vm.namespaces).toEqual([namespace, ...MOCK_NAMESPACES_RESPONSE]); + }); }); describe('project slug', () => {