diff --git a/app/assets/javascripts/projects/new_v2/components/shared_project_creation_fields.vue b/app/assets/javascripts/projects/new_v2/components/shared_project_creation_fields.vue index b66eabdc53de313556b440a08b7616c3582cfe44..a480eba1063bebad9fa7e78acb5b1964acbe66a8 100644 --- a/app/assets/javascripts/projects/new_v2/components/shared_project_creation_fields.vue +++ b/app/assets/javascripts/projects/new_v2/components/shared_project_creation_fields.vue @@ -1,13 +1,18 @@ @@ -71,17 +85,21 @@ export default {
+
- + + + + + + + + + diff --git a/app/assets/javascripts/projects/new_v2/form_constants.js b/app/assets/javascripts/projects/new_v2/form_constants.js new file mode 100644 index 0000000000000000000000000000000000000000..e0000e26344061e91822d6b67e376be6e0cdfa62 --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/form_constants.js @@ -0,0 +1,64 @@ +import { s__ } from '~/locale'; + +export const K8S_OPTION = { + value: 'kubernetes', + text: s__('DeploymentTarget|Kubernetes (GKE, EKS, OpenShift, and so on)'), +}; + +export const DEPLOYMENT_TARGET_SELECTIONS = [ + K8S_OPTION, + { + value: 'managed_container_runtime', + text: s__('DeploymentTarget|Managed container runtime (Fargate, Cloud Run, DigitalOcean App)'), + }, + { + value: 'self_managed_container_runtime', + text: s__( + 'DeploymentTarget|Self-managed container runtime (Podman, Docker Swarm, Docker Compose)', + ), + }, + { + value: 'heroku', + text: s__('DeploymentTarget|Heroku'), + }, + { + value: 'virtual_machine', + text: s__('DeploymentTarget|Virtual machine (for example, EC2)'), + }, + { + value: 'mobile_app_store', + text: s__('DeploymentTarget|Mobile app store'), + }, + { + value: 'registry', + text: s__('DeploymentTarget|Registry (package or container)'), + }, + { + value: 'infrastructure_provider', + text: s__('DeploymentTarget|Infrastructure provider (Terraform, Cloudformation, and so on)'), + }, + { + value: 'serverless_backend', + text: s__('DeploymentTarget|Serverless backend (Lambda, Cloud functions)'), + }, + { + value: 'edge_computing', + text: s__('DeploymentTarget|Edge Computing (e.g. Cloudflare Workers)'), + }, + { + value: 'web_deployment_platform', + text: s__('DeploymentTarget|Web Deployment Platform (Netlify, Vercel, Gatsby)'), + }, + { + value: 'gitlab_pages', + text: s__('DeploymentTarget|GitLab Pages'), + }, + { + value: 'other_hosting_service', + text: s__('DeploymentTarget|Other hosting service'), + }, + { + value: 'no_deployment', + text: s__('DeploymentTarget|No deployment planned'), + }, +]; diff --git a/spec/frontend/projects/new_v2/components/shared_project_creation_fields_spec.js b/spec/frontend/projects/new_v2/components/shared_project_creation_fields_spec.js index 03b7626f06d1ed1caf77349eaf2ba20e1201f75e..3ea8a1b4bd7febfa1ed873deeb87b0881d67cb01 100644 --- a/spec/frontend/projects/new_v2/components/shared_project_creation_fields_spec.js +++ b/spec/frontend/projects/new_v2/components/shared_project_creation_fields_spec.js @@ -1,8 +1,9 @@ import { nextTick } from 'vue'; -import { GlFormInput } from '@gitlab/ui'; +import { GlFormInput, GlFormSelect } from '@gitlab/ui'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import SharedProjectCreationFields from '~/projects/new_v2/components/shared_project_creation_fields.vue'; import NewProjectDestinationSelect from '~/projects/new_v2/components/project_destination_select.vue'; +import { DEPLOYMENT_TARGET_SELECTIONS } from '~/projects/new_v2/form_constants'; describe('Project creation form fields component', () => { let wrapper; @@ -23,6 +24,7 @@ describe('Project creation form fields component', () => { }, stubs: { GlFormInput, + GlFormSelect, }, }); }; @@ -34,6 +36,19 @@ describe('Project creation form fields component', () => { const findProjectNameInput = () => wrapper.findByTestId('project-name-input'); const findProjectSlugInput = () => wrapper.findByTestId('project-slug-input'); const findNamespaceSelect = () => wrapper.findComponent(NewProjectDestinationSelect); + const findDeploymentTargetSelect = () => wrapper.findByTestId('deployment-target-select'); + const findKubernetesHelpLink = () => wrapper.findByTestId('kubernetes-help-link'); + + describe('target select', () => { + it('renders the optional deployment target select', () => { + expect(findDeploymentTargetSelect().exists()).toBe(true); + expect(findKubernetesHelpLink().exists()).toBe(false); + }); + + it('has all the options', () => { + expect(findDeploymentTargetSelect().props('options')).toEqual(DEPLOYMENT_TARGET_SELECTIONS); + }); + }); it('updates project slug according to a project name', async () => { // NOTE: vue3 test needs the .setValue(value) and the vm.$emit('input'),