diff --git a/app/assets/javascripts/pages/projects/new/index.js b/app/assets/javascripts/pages/projects/new/index.js index d022428df984b2ba844f7a06ed230a53e306ae8d..c2cf729fa8c26ea5a65eba0fb24b4fc80a1216cc 100644 --- a/app/assets/javascripts/pages/projects/new/index.js +++ b/app/assets/javascripts/pages/projects/new/index.js @@ -3,8 +3,10 @@ import { initNewProjectUrlSelect, initDeploymentTargetSelect, } from '~/projects/new'; +import { initNewProjectForm } from '~/projects/new_v2'; import initProjectVisibilitySelector from '~/projects/project_visibility'; +initNewProjectForm(); initProjectVisibilitySelector(); initNewProjectCreation(); initNewProjectUrlSelect(); diff --git a/app/assets/javascripts/projects/new/index.js b/app/assets/javascripts/projects/new/index.js index 4e336c6ec9fa8c2dd02351af3b33ba6973fcb9c4..6e9cb7b3336e2fb939f55d6cc745d247193ee581 100644 --- a/app/assets/javascripts/projects/new/index.js +++ b/app/assets/javascripts/projects/new/index.js @@ -10,6 +10,10 @@ import DeploymentTargetSelect from './components/deployment_target_select.vue'; export function initNewProjectCreation() { const el = document.querySelector('.js-new-project-creation'); + if (!el) { + return null; + } + const { pushToCreateProjectCommand, projectHelpPath, diff --git a/app/assets/javascripts/projects/new_v2/components/app.vue b/app/assets/javascripts/projects/new_v2/components/app.vue new file mode 100644 index 0000000000000000000000000000000000000000..de5114309f1a6f29e3274009afc29751c98ec408 --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/components/app.vue @@ -0,0 +1,215 @@ + + + diff --git a/app/assets/javascripts/projects/new_v2/components/project_destination_select.vue b/app/assets/javascripts/projects/new_v2/components/project_destination_select.vue new file mode 100644 index 0000000000000000000000000000000000000000..7c5a0269aef64d41f95a13368fe52587f5fac971 --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/components/project_destination_select.vue @@ -0,0 +1,214 @@ + + + diff --git a/app/assets/javascripts/projects/new_v2/event_hub.js b/app/assets/javascripts/projects/new_v2/event_hub.js new file mode 100644 index 0000000000000000000000000000000000000000..e31806ad199a1105985ed7045009d84e33856386 --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/event_hub.js @@ -0,0 +1,3 @@ +import createEventHub from '~/helpers/event_hub_factory'; + +export default createEventHub(); diff --git a/app/assets/javascripts/projects/new_v2/index.js b/app/assets/javascripts/projects/new_v2/index.js new file mode 100644 index 0000000000000000000000000000000000000000..92db791b3b6dbc4676c55ea3df743a3e08bec0bd --- /dev/null +++ b/app/assets/javascripts/projects/new_v2/index.js @@ -0,0 +1,61 @@ +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createDefaultClient from '~/lib/graphql'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import NewProjectFormApp from './components/app.vue'; + +export function initNewProjectForm() { + const el = document.getElementById('js-vue-new-project-app'); + + if (!el) { + return null; + } + + const { + pushToCreateProjectCommand, + projectHelpPath, + hasErrors, + isCiCdAvailable, + parentGroupUrl, + parentGroupName, + rootPath, + projectsUrl, + canImportProjects, + importSourcesEnabled, + namespaceFullPath, + namespaceId, + userNamespaceId, + trackLabel, + } = el.dataset; + + const props = { + hasErrors: parseBoolean(hasErrors), + isCiCdAvailable: parseBoolean(isCiCdAvailable), + parentGroupUrl, + parentGroupName, + rootPath, + projectsUrl, + canImportProjects: parseBoolean(canImportProjects), + importSourcesEnabled: parseBoolean(importSourcesEnabled), + namespaceFullPath, + namespaceId, + userNamespaceId, + trackLabel, + }; + + const provide = { + projectHelpPath, + pushToCreateProjectCommand, + }; + + return new Vue({ + el, + apolloProvider: new VueApollo({ + defaultClient: createDefaultClient(), + }), + provide, + render(h) { + return h(NewProjectFormApp, { props }); + }, + }); +} diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 045e547806f8ccc25a93fa96a11cd241f65f8820..50771c19ced7531958c826cbfbe1f6bb11523594 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -5,45 +5,63 @@ - add_page_specific_style 'page_bundles/new_namespace' - add_page_specific_style 'page_bundles/projects' -.project-edit-container - .project-edit-errors - = render 'projects/errors' - - .js-new-project-creation{ data: { - is_ci_cd_available: remote_mirror_setting_enabled?.to_s, +- if Feature.enabled?(:new_project_creation_form, @user) + #js-vue-new-project-app{ data: { + namespace_full_path: GroupFinder.new(current_user).execute(id: namespace_id_from(params))&.full_path || @current_user_group&.full_path, + namespace_id: namespace_id_from(params) || @current_user_group&.id, + user_namespace_id: current_user.namespace_id, has_errors: @project.errors.any?.to_s, new_project_guidelines: brand_new_project_guidelines, push_to_create_project_command: push_to_create_project_command, - project_help_path: help_page_path("user/project/index.md"), root_path: root_path, + projects_url: dashboard_projects_url, parent_group_url: @project.parent && group_url(@project.parent), parent_group_name: @project.parent&.name, - projects_url: dashboard_projects_url, - can_import_projects: params[:namespace_id].presence ? current_user.can?(:import_projects, @namespace).to_s : 'true' } } + project_help_path: help_page_path("user/project/index.md"), + is_ci_cd_available: remote_mirror_setting_enabled?.to_s, + can_import_projects: params[:namespace_id].presence ? current_user.can?(:import_projects, @namespace).to_s : 'true', + import_sources_enabled: import_sources_enabled?.to_s, + track_label: local_assigns.fetch(:track_label, 'blank_project') } } +- else + .project-edit-container + .project-edit-errors + = render 'projects/errors' + + .js-new-project-creation{ data: { + is_ci_cd_available: remote_mirror_setting_enabled?.to_s, + has_errors: @project.errors.any?.to_s, + new_project_guidelines: brand_new_project_guidelines, + push_to_create_project_command: push_to_create_project_command, + project_help_path: help_page_path("user/project/index.md"), + root_path: root_path, + parent_group_url: @project.parent && group_url(@project.parent), + parent_group_name: @project.parent&.name, + projects_url: dashboard_projects_url, + can_import_projects: params[:namespace_id].presence ? current_user.can?(:import_projects, @namespace).to_s : 'true' } } - .row{ 'v-cloak': true } - #blank-project-pane.tab-pane.active - = gitlab_ui_form_for @project, html: { class: 'new_project gl-mt-3' } do |f| - = render 'new_project_fields', f: f, project_name_id: "blank-project-name", include_description: false + .row{ 'v-cloak': true } + #blank-project-pane.tab-pane.active + = gitlab_ui_form_for @project, html: { class: 'new_project gl-mt-3' } do |f| + = render 'new_project_fields', f: f, project_name_id: "blank-project-name", include_description: false - #create-from-template-pane.tab-pane - = render Pajamas::CardComponent.new(card_options: { class: 'gl-my-5' }) do |c| - - c.with_body do - %div - - link = link_to('', 'https://gitlab.com/gitlab-org/project-templates/contributing', target: '_blank', rel: 'noopener noreferrer') - = safe_format(_('Learn how to %{link_start}contribute to the built-in templates%{link_end}'), tag_pair(link, :link_start, :link_end)) - = gitlab_ui_form_for @project, html: { class: 'new_project' } do |f| - .project-template - .form-group + #create-from-template-pane.tab-pane + = render Pajamas::CardComponent.new(card_options: { class: 'gl-my-5' }) do |c| + - c.with_body do %div - = render 'project_templates', f: f, project: @project + - link = link_to('', 'https://gitlab.com/gitlab-org/project-templates/contributing', target: '_blank', rel: 'noopener noreferrer') + = safe_format(_('Learn how to %{link_start}contribute to the built-in templates%{link_end}'), tag_pair(link, :link_start, :link_end)) + = gitlab_ui_form_for @project, html: { class: 'new_project' } do |f| + .project-template + .form-group + %div + = render 'project_templates', f: f, project: @project - #import-project-pane.tab-pane.js-toggle-container - - if import_sources_enabled? - = render 'import_project_pane', destination_namespace_id: @namespace&.id - - else - .nothing-here-block - %h4= s_('ProjectsNew|No import options available') - %p= s_('ProjectsNew|Contact an administrator to enable options for importing your project.') + #import-project-pane.tab-pane.js-toggle-container + - if import_sources_enabled? + = render 'import_project_pane', destination_namespace_id: @namespace&.id + - else + .nothing-here-block + %h4= s_('ProjectsNew|No import options available') + %p= s_('ProjectsNew|Contact an administrator to enable options for importing your project.') - = render_if_exists 'projects/new_ci_cd_only_project_pane' + = render_if_exists 'projects/new_ci_cd_only_project_pane' diff --git a/config/feature_flags/wip/new_project_creation_form.yml b/config/feature_flags/wip/new_project_creation_form.yml new file mode 100644 index 0000000000000000000000000000000000000000..f80d4004093945172fd8b78d10a129f100f9a9c2 --- /dev/null +++ b/config/feature_flags/wip/new_project_creation_form.yml @@ -0,0 +1,9 @@ +--- +name: new_project_creation_form +feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/514700 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/178859 +rollout_issue_url: +milestone: '17.9' +group: group::import and integrate +type: wip +default_enabled: false diff --git a/ee/spec/controllers/projects_controller_spec.rb b/ee/spec/controllers/projects_controller_spec.rb index bb41078eb5b74ebfd647e485060951afee0b232a..e8ee04fce9d77537149407f28868b35d4dc2300c 100644 --- a/ee/spec/controllers/projects_controller_spec.rb +++ b/ee/spec/controllers/projects_controller_spec.rb @@ -11,6 +11,7 @@ let_it_be(:public_project) { create(:project, :public, :repository, namespace: group) } before do + stub_feature_flags(new_project_creation_form: false) project.add_maintainer(user) sign_in(user) end diff --git a/ee/spec/features/admin/admin_audit_logs_spec.rb b/ee/spec/features/admin/admin_audit_logs_spec.rb index 859af8899376ce03eefd7e837a5383aa0e0febab..837c715f18a369904198959eb8d0254bbc239b2d 100644 --- a/ee/spec/features/admin/admin_audit_logs_spec.rb +++ b/ee/spec/features/admin/admin_audit_logs_spec.rb @@ -212,6 +212,10 @@ end describe 'impersonated events' do + before do + stub_feature_flags(new_project_creation_form: false) + end + it 'show impersonation details' do visit admin_user_path(user) diff --git a/ee/spec/features/groups/compliance_framework_report_spec.rb b/ee/spec/features/groups/compliance_framework_report_spec.rb index d7a0951d85082ee8fb48a2259043ffaf634b664f..8943c0baa0d73d585d99805e2bcbbea7c44e1690 100644 --- a/ee/spec/features/groups/compliance_framework_report_spec.rb +++ b/ee/spec/features/groups/compliance_framework_report_spec.rb @@ -34,6 +34,7 @@ end before do + stub_feature_flags(new_project_creation_form: false) sign_in(admin_user) end diff --git a/ee/spec/features/groups/group_projects_spec.rb b/ee/spec/features/groups/group_projects_spec.rb index b8b0318f19f68bb5f54449bd7f66a3923a5cc654..ccf1981031c8ce456bbe62267efb88cd8ca404db 100644 --- a/ee/spec/features/groups/group_projects_spec.rb +++ b/ee/spec/features/groups/group_projects_spec.rb @@ -7,6 +7,7 @@ let(:group) { create :group } before do + stub_feature_flags(new_project_creation_form: false) group.add_owner(user) sign_in(user) diff --git a/ee/spec/features/projects/custom_projects_template_spec.rb b/ee/spec/features/projects/custom_projects_template_spec.rb index 48b1ccb8f812d8d251f992e630556d138e5969f5..8023c40ad4e0d72e64976c83e612c66e7e626f05 100644 --- a/ee/spec/features/projects/custom_projects_template_spec.rb +++ b/ee/spec/features/projects/custom_projects_template_spec.rb @@ -9,6 +9,7 @@ let_it_be(:projects) { create_list(:project, 3, :public, :metrics_dashboard_enabled, namespace: group) } before do + stub_feature_flags(new_project_creation_form: false) stub_ee_application_setting(custom_project_templates_group_id: group.id) end @@ -135,6 +136,7 @@ let!(:template) { create(:project, namespace: template_subgroup) } before do + stub_feature_flags(new_project_creation_form: false) stub_licensed_features(custom_project_templates: true) group.add_owner(user) group.update!(custom_project_templates_group_id: template_subgroup.id) diff --git a/ee/spec/features/projects/new_project_from_template_spec.rb b/ee/spec/features/projects/new_project_from_template_spec.rb index 98a7820cb3a812086e474ae738a70422e7ce22d1..5d576eeaca3001b4a4db5cab3f29fcb7cf6b2d6a 100644 --- a/ee/spec/features/projects/new_project_from_template_spec.rb +++ b/ee/spec/features/projects/new_project_from_template_spec.rb @@ -6,6 +6,7 @@ let(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) stub_licensed_features(custom_project_templates: true) sign_in(user) diff --git a/ee/spec/features/projects/new_project_spec.rb b/ee/spec/features/projects/new_project_spec.rb index 35605b353e7cddbd26c3e3d65759b9200cabc0a7..919a5da213fad284642e2983d96b33d83c2b6601 100644 --- a/ee/spec/features/projects/new_project_spec.rb +++ b/ee/spec/features/projects/new_project_spec.rb @@ -9,6 +9,7 @@ let(:premium_plan) { create(:license, plan: License::PREMIUM_PLAN) } before do + stub_feature_flags(new_project_creation_form: false) stub_application_setting(import_sources: Gitlab::ImportSources.values) sign_in(user) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 9cce41428badb564392ebb21e246b5665e5c8f32..c1206526f8cc4cb7b143737580f6b84e3fa99784 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -16847,6 +16847,9 @@ msgstr "" msgid "Create new label" msgstr "" +msgid "Create new project" +msgstr "" + msgid "Create new..." msgstr "" @@ -41385,6 +41388,9 @@ msgstr "" msgid "Personal access tokens" msgstr "" +msgid "Personal namespaces" +msgstr "" + msgid "Personal projects" msgstr "" @@ -44474,6 +44480,9 @@ msgstr "" msgid "ProjectMaintenance|You will receive an email notification when the process is complete. To remove old versions from the repository, run housekeeping." msgstr "" +msgid "ProjectNew|What do you want to create?" +msgstr "" + msgid "ProjectOverview|Create new fork" msgstr "" @@ -45481,6 +45490,12 @@ msgstr[1] "" msgid "ProjectsNew|(optional)" msgstr "" +msgid "ProjectsNew|A personal project" +msgstr "" + +msgid "ProjectsNew|A project within a group" +msgstr "" + msgid "ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository." msgstr "" @@ -45490,9 +45505,18 @@ msgstr "" msgid "ProjectsNew|Analyze your source code for known security vulnerabilities." msgstr "" +msgid "ProjectsNew|Available only for projects within groups" +msgstr "" + +msgid "ProjectsNew|Choose a group" +msgstr "" + msgid "ProjectsNew|Connect your external repository to GitLab CI/CD." msgstr "" +msgid "ProjectsNew|Contact an administrator to enable options for importing your project" +msgstr "" + msgid "ProjectsNew|Contact an administrator to enable options for importing your project." msgstr "" @@ -45517,6 +45541,9 @@ msgstr "" msgid "ProjectsNew|Description format" msgstr "" +msgid "ProjectsNew|Direct transfer projects with a top-level Group" +msgstr "" + msgid "ProjectsNew|Enable Static Application Security Testing (SAST)" msgstr "" @@ -45547,6 +45574,9 @@ msgstr "" msgid "ProjectsNew|Migrate your data from an external source like GitHub, Bitbucket, or another instance of GitLab." msgstr "" +msgid "ProjectsNew|Migrate your data from another GitLab instance." +msgstr "" + msgid "ProjectsNew|More templates are available after sign-up." msgstr "" diff --git a/qa/qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb b/qa/qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb index 314c844219247e60889d82d033a2b50e1f6b7872..828b3724b0bbd08f931ecad18913051c864a4857 100644 --- a/qa/qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb +++ b/qa/qa/specs/features/browser_ui/9_data_stores/project/create_project_spec.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module QA - RSpec.describe 'Data Stores', :smoke, product_group: :tenant_scale do + RSpec.describe 'Data Stores', :smoke, product_group: :tenant_scale, feature_flag: { + name: 'new_project_creation_form' + } do describe 'Project' do shared_examples 'successful project creation' do it 'creates a new project' do @@ -13,6 +15,7 @@ module QA end before do + Runtime::Feature.disable(:new_project_creation_form) Flow::Login.sign_in project end diff --git a/qa/qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb b/qa/qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb index a7884ac1b46140f7aec4a338f74173cd0ec48e6c..515a3041cf9c21e9dc849587e9f2f1dfa498f3f9 100644 --- a/qa/qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb +++ b/qa/qa/specs/features/ee/browser_ui/10_govern/project/project_audit_logs_spec.rb @@ -3,7 +3,10 @@ module QA RSpec.describe( 'Govern', - product_group: :compliance + product_group: :compliance, + feature_flag: { + name: 'new_project_creation_form' + } ) do shared_examples 'audit event' do |expected_events| it 'logs audit events for UI operations' do @@ -21,6 +24,7 @@ module QA let(:user) { Runtime::User::Store.additional_test_user } before do + Runtime::Feature.disable(:new_project_creation_form) sign_in end diff --git a/qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb b/qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb index 8f78e2af49edc523dc6d6ca84f8cf62dd84711c8..02dc45bdc19d02a7be96bc0b62c6641029ed8d64 100644 --- a/qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb +++ b/qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb @@ -2,7 +2,9 @@ module QA RSpec.describe 'Create' do - describe 'Project templates', product_group: :source_code do + describe 'Project templates', product_group: :source_code, feature_flag: { + name: 'new_project_creation_form' + } do let!(:group) { create(:group) } let(:sandbox) { group.sandbox } @@ -32,6 +34,7 @@ module QA end before do + Runtime::Feature.disable(:new_project_creation_form) Resource::Repository::ProjectPush.fabricate! do |push| push.project = template_project push.files = files diff --git a/spec/features/admin/admin_appearance_spec.rb b/spec/features/admin/admin_appearance_spec.rb index bff88c0270d7c406466672c53b5e6664c21a7311..c676124e0ef53f1cb1c70fed0bd06dc2334e0491 100644 --- a/spec/features/admin/admin_appearance_spec.rb +++ b/spec/features/admin/admin_appearance_spec.rb @@ -11,6 +11,7 @@ let(:project) { create(:project, group: group) } before do + stub_feature_flags(new_project_creation_form: false) stub_feature_flags(edit_user_profile_vue: false) end diff --git a/spec/features/projects/import_export/import_file_spec.rb b/spec/features/projects/import_export/import_file_spec.rb index f4ed0728402a6571bd5881bc0c14295de501ab3c..7c75b58bfe6b2674459a978a43dc0e35a6785f36 100644 --- a/spec/features/projects/import_export/import_file_spec.rb +++ b/spec/features/projects/import_export/import_file_spec.rb @@ -10,6 +10,7 @@ before do stub_application_setting(import_sources: ['gitlab_project']) stub_uploads_object_storage(FileUploader) + stub_feature_flags(new_project_creation_form: false) allow_next_instance_of(Gitlab::ImportExport) do |instance| allow(instance).to receive(:storage_path).and_return(export_path) end diff --git a/spec/features/projects/new_project_from_template_spec.rb b/spec/features/projects/new_project_from_template_spec.rb index 8e2016ce17e196752087e9252ee040fe7f414b78..d7df977a949ab12780e3151ac915cd9497a24bbd 100644 --- a/spec/features/projects/new_project_from_template_spec.rb +++ b/spec/features/projects/new_project_from_template_spec.rb @@ -6,6 +6,7 @@ let(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) sign_in(user) visit new_project_path diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb index 2bfd9435c8913fdcbf29c3677f8e00b6ac8a7c87..c840a5115fcf9ee8cedb81f5f0fa2a9c8fcd5fcb 100644 --- a/spec/features/projects/new_project_spec.rb +++ b/spec/features/projects/new_project_spec.rb @@ -7,6 +7,7 @@ before do stub_application_setting(import_sources: Gitlab::ImportSources.values) + stub_feature_flags(new_project_creation_form: false) end shared_examples 'shows correct navigation' do @@ -35,6 +36,7 @@ let_it_be(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) sign_in(user) end @@ -102,6 +104,7 @@ shared_examples '"New project" page' do before do + stub_feature_flags(new_project_creation_form: false) sign_in(user) end @@ -557,6 +560,7 @@ shared_examples 'has instructions to enable OAuth' do context 'when OAuth is not configured' do before do + stub_feature_flags(new_project_creation_form: false) sign_in(user) allow(Gitlab::Auth::OAuth::Provider).to receive(:enabled?).and_call_original diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb index b715733ca20710d2c4be0e1a03270716b732f633..4f58a5ef48bc8b43b6ded83edf6fb142a9b05688 100644 --- a/spec/features/projects/user_creates_project_spec.rb +++ b/spec/features/projects/user_creates_project_spec.rb @@ -8,6 +8,7 @@ let(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) sign_in(user) create(:personal_key, user: user) end diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index 0da46359fc9e24e32b99d072c229e0c978f6433f..a6f3cd339277583eddd5f637dcbc6cafcd3b8778 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -10,6 +10,7 @@ let(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) sign_in user visit new_project_path end @@ -81,6 +82,7 @@ let(:user) { create(:user) } before do + stub_feature_flags(new_project_creation_form: false) sign_in user visit new_project_path end diff --git a/spec/frontend/projects/new_v2/components/app_spec.js b/spec/frontend/projects/new_v2/components/app_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..b53adfdab4608d57a56f7e8ca884d5f59c614edc --- /dev/null +++ b/spec/frontend/projects/new_v2/components/app_spec.js @@ -0,0 +1,41 @@ +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import App from '~/projects/new_v2/components/app.vue'; +import MultiStepFormTemplate from '~/vue_shared/components/multi_step_form_template.vue'; + +describe('New project creation app', () => { + let wrapper; + + const createComponent = (props = {}) => { + wrapper = shallowMountExtended(App, { + propsData: { + rootPath: '/', + projectsUrl: '/dashboard/projects', + userNamespaceId: '1', + ...props, + }, + }); + }; + + const findMultyStepForm = () => wrapper.findComponent(MultiStepFormTemplate); + + it('renders a form', () => { + createComponent(); + + expect(findMultyStepForm().exists()).toBe(true); + }); + + describe('personal namespace project', () => { + beforeEach(() => { + createComponent(); + }); + + it('starts with personal namespace when no namespaceId provided', () => { + expect(wrapper.findByTestId('personal-namespace-button').props('selected')).toBe(true); + expect(wrapper.findByTestId('group-namespace-button').props('selected')).toBe(false); + }); + + it('does not renders a group select', () => { + expect(wrapper.findByTestId('group-selector').exists()).toBe(false); + }); + }); +});