diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/controllers/projects/import | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) | |
download | gitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/controllers/projects/import')
-rw-r--r-- | spec/controllers/projects/import/jira_controller_spec.rb | 245 |
1 files changed, 58 insertions, 187 deletions
diff --git a/spec/controllers/projects/import/jira_controller_spec.rb b/spec/controllers/projects/import/jira_controller_spec.rb index d1b0a086576..b82735a56b3 100644 --- a/spec/controllers/projects/import/jira_controller_spec.rb +++ b/spec/controllers/projects/import/jira_controller_spec.rb @@ -2,230 +2,101 @@ require 'spec_helper' -describe Projects::Import::JiraController do +RSpec.describe Projects::Import::JiraController do include JiraServiceHelper let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } let_it_be(:jira_project_key) { 'Test' } - context 'with anonymous user' do - before do - stub_feature_flags(jira_issue_import: true) - end + def ensure_correct_config + sign_in(user) + project.add_maintainer(user) + stub_feature_flags(jira_issue_import: true) + stub_jira_service_test + end - context 'get show' do - it 'redirects to issues page' do - get :show, params: { namespace_id: project.namespace, project_id: project } + shared_examples 'redirect with error' do |error| + it 'redirects to project issues path' do + subject - expect(response).to redirect_to(new_user_session_path) - end + expect(response).to redirect_to(project_issues_path(project)) end - context 'post import' do - it 'redirects to issues page' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } + it 'renders a correct error' do + subject - expect(response).to redirect_to(new_user_session_path) - end + expect(flash[:notice]).to eq(error) end end - context 'with logged in user' do - before do - sign_in(user) - project.add_maintainer(user) - end + shared_examples 'template with no message' do + it 'does not set any message' do + subject - context 'when feature flag not enabled' do - before do - stub_feature_flags(jira_issue_import: false) - end + expect(flash).to be_empty + end - context 'get show' do - it 'redirects to issues page' do - get :show, params: { namespace_id: project.namespace, project_id: project } + it 'renders show template' do + subject - expect(response).to redirect_to(project_issues_path(project)) - end - end + expect(response).to render_template(template) + end + end - context 'post import' do - it 'redirects to issues page' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } + shared_examples 'users without permissions' do + context 'with anonymous user' do + it 'redirects to new user page' do + subject - expect(response).to redirect_to(project_issues_path(project)) - end + expect(response).to redirect_to(new_user_session_path) end end - context 'when feature flag enabled' do + context 'when loged user is a developer' do before do - stub_feature_flags(jira_issue_import: true) - stub_feature_flags(jira_issue_import_vue: false) + create(:jira_service, project: project) stub_jira_service_test - end - - context 'when Jira service is enabled for the project' do - let_it_be(:jira_service) { create(:jira_service, project: project) } - - context 'when user is developer' do - let_it_be(:dev) { create(:user) } - - before do - sign_in(dev) - project.add_developer(dev) - end - - context 'get show' do - before do - get :show, params: { namespace_id: project.namespace.to_param, project_id: project } - end - - it 'does not query Jira service' do - expect(project).not_to receive(:jira_service) - end - - it 'renders show template' do - expect(response).to render_template(:show) - expect(assigns(:jira_projects)).not_to be_present - end - end - - context 'post import' do - it 'returns 404' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } - expect(response).to have_gitlab_http_status(:not_found) - end - end - end - - context 'when issues disabled' do - let_it_be(:disabled_issues_project) { create(:project, :public, :issues_disabled) } - - context 'get show' do - it 'returs 404' do - get :show, params: { namespace_id: project.namespace.to_param, project_id: disabled_issues_project } - - expect(response).to have_gitlab_http_status(:not_found) - end - end - - context 'post import' do - it 'returs 404' do - post :import, params: { namespace_id: disabled_issues_project.namespace, project_id: disabled_issues_project, jira_project_key: jira_project_key } - - expect(response).to have_gitlab_http_status(:not_found) - end - end - end - - context 'when running Jira import first time' do - context 'get show' do - before do - allow(JIRA::Resource::Project).to receive(:all).and_return(jira_projects) - - expect(project.jira_imports).to be_empty - - get :show, params: { namespace_id: project.namespace.to_param, project_id: project } - end - - context 'when no projects have been retrieved from Jira' do - let(:jira_projects) { [] } - - it 'render an error message' do - expect(flash[:alert]).to eq('No projects have been returned from Jira. Please check your Jira configuration.') - expect(response).to render_template(:show) - end - end - - context 'when projects retrieved from Jira' do - let(:jira_projects) { [double(name: 'FOO project', key: 'FOO')] } - - it 'renders show template' do - expect(response).to render_template(:show) - end - end - end + sign_in(user) + project.add_developer(user) + end - context 'post import' do - context 'when Jira project key is empty' do - it 'redirects back to show with an error' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: '' } + it_behaves_like 'redirect with error', 'You do not have permissions to run the import.' + end + end - expect(response).to redirect_to(project_import_jira_path(project)) - expect(flash[:alert]).to eq('No Jira project key has been provided.') - end - end + describe 'GET #show' do + let(:template) { 'show' } - context 'when everything is ok' do - it 'creates import state' do - expect(project.latest_jira_import).to be_nil + subject { get :show, params: { namespace_id: project.namespace, project_id: project } } - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } + it_behaves_like 'users without permissions' - project.reload + context 'jira service configuration' do + before do + sign_in(user) + project.add_maintainer(user) + stub_feature_flags(jira_issue_import: true) + end - jira_import = project.latest_jira_import - expect(project.import_type).to eq 'jira' - expect(jira_import.status).to eq 'scheduled' - expect(jira_import.jira_project_key).to eq jira_project_key - expect(response).to redirect_to(project_import_jira_path(project)) - end - end - end + context 'when Jira service is not enabled for the project' do + it 'does not query Jira service' do + expect(project).not_to receive(:jira_service) end - context 'when import state is scheduled' do - let_it_be(:jira_import_state) { create(:jira_import_state, :scheduled, project: project) } - - context 'get show' do - it 'renders import status' do - get :show, params: { namespace_id: project.namespace.to_param, project_id: project } - - jira_import = project.latest_jira_import - expect(jira_import.status).to eq 'scheduled' - expect(flash.now[:notice]).to eq 'Import scheduled' - end - end + it_behaves_like 'template with no message' + end - context 'post import' do - it 'uses the existing import data' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'New Project' } + context 'when Jira service is not configured correctly for the project' do + let_it_be(:jira_service) { create(:jira_service, project: project) } - expect(flash[:notice]).to eq('Jira import is already running.') - expect(response).to redirect_to(project_import_jira_path(project)) - end - end + before do + WebMock.stub_request(:get, 'https://jira.example.com/rest/api/2/serverInfo') + .to_raise(JIRA::HTTPError.new(double(message: 'Some failure.'))) end - context 'when Jira import ran before' do - let_it_be(:jira_import_state) { create(:jira_import_state, :finished, project: project, jira_project_key: jira_project_key) } - - context 'get show' do - it 'renders import status' do - allow(JIRA::Resource::Project).to receive(:all).and_return([]) - get :show, params: { namespace_id: project.namespace.to_param, project_id: project } - - expect(project.latest_jira_import.status).to eq 'finished' - expect(flash.now[:notice]).to eq 'Import finished' - end - end - - context 'post import' do - it 'uses the existing import data' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'New Project' } - - project.reload - expect(project.latest_jira_import.status).to eq 'scheduled' - expect(project.jira_imports.size).to eq 2 - expect(project.jira_imports.first.jira_project_key).to eq jira_project_key - expect(project.jira_imports.last.jira_project_key).to eq 'New Project' - expect(response).to redirect_to(project_import_jira_path(project)) - end - end - end + it_behaves_like 'template with no message' end end end |