2020-03-13 08:09:22 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Projects::Import::JiraController do
|
|
|
|
let_it_be(:user) { create(:user) }
|
|
|
|
let_it_be(:project) { create(:project) }
|
|
|
|
|
|
|
|
context 'with anonymous user' do
|
|
|
|
before do
|
|
|
|
stub_feature_flags(jira_issue_import: true)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'get show' do
|
|
|
|
it 'redirects to issues page' do
|
|
|
|
get :show, params: { namespace_id: project.namespace, project_id: project }
|
|
|
|
|
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
|
|
|
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: 'Test' }
|
|
|
|
|
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'with logged in user' do
|
|
|
|
before do
|
|
|
|
sign_in(user)
|
|
|
|
project.add_maintainer(user)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when feature flag not enabled' do
|
|
|
|
before do
|
|
|
|
stub_feature_flags(jira_issue_import: false)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'get show' do
|
|
|
|
it 'redirects to issues page' do
|
|
|
|
get :show, params: { namespace_id: project.namespace, project_id: project }
|
|
|
|
|
|
|
|
expect(response).to redirect_to(project_issues_path(project))
|
|
|
|
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: 'Test' }
|
|
|
|
|
|
|
|
expect(response).to redirect_to(project_issues_path(project))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when feature flag enabled' do
|
|
|
|
before do
|
|
|
|
stub_feature_flags(jira_issue_import: true)
|
2020-04-07 08:09:34 -04:00
|
|
|
stub_feature_flags(jira_issue_import_vue: false)
|
2020-03-13 08:09:22 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'when jira service is enabled for the project' do
|
|
|
|
let_it_be(:jira_service) { create(:jira_service, project: project) }
|
|
|
|
|
|
|
|
context 'when running jira import first time' do
|
|
|
|
context 'get show' do
|
2020-04-03 17:09:56 -04:00
|
|
|
before do
|
|
|
|
allow(JIRA::Resource::Project).to receive(:all).and_return(jira_projects)
|
|
|
|
|
2020-03-13 08:09:22 -04:00
|
|
|
expect(project.import_state).to be_nil
|
|
|
|
|
|
|
|
get :show, params: { namespace_id: project.namespace.to_param, project_id: project }
|
2020-04-03 17:09:56 -04:00
|
|
|
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 everything is ok' do
|
|
|
|
let(:jira_projects) { [double(name: 'FOO project', key: 'FOO')] }
|
2020-03-13 08:09:22 -04:00
|
|
|
|
2020-04-03 17:09:56 -04:00
|
|
|
it 'renders show template' do
|
|
|
|
expect(response).to render_template(:show)
|
|
|
|
end
|
2020-03-13 08:09:22 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'post import' do
|
2020-04-06 20:09:33 -04:00
|
|
|
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: '' }
|
2020-03-13 08:09:22 -04:00
|
|
|
|
2020-04-06 20:09:33 -04:00
|
|
|
expect(response).to redirect_to(project_import_jira_path(project))
|
|
|
|
expect(flash[:alert]).to eq('No jira project key has been provided.')
|
|
|
|
end
|
|
|
|
end
|
2020-03-13 08:09:22 -04:00
|
|
|
|
2020-04-06 20:09:33 -04:00
|
|
|
context 'when everything is ok' do
|
|
|
|
it 'creates import state' do
|
2020-04-09 08:09:24 -04:00
|
|
|
expect(project.latest_jira_import).to be_nil
|
2020-03-13 08:09:22 -04:00
|
|
|
|
2020-04-06 20:09:33 -04:00
|
|
|
post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' }
|
|
|
|
|
|
|
|
project.reload
|
|
|
|
|
2020-04-09 08:09:24 -04:00
|
|
|
jira_import = project.latest_jira_import
|
2020-04-06 20:09:33 -04:00
|
|
|
expect(project.import_type).to eq 'jira'
|
2020-04-09 08:09:24 -04:00
|
|
|
expect(jira_import.status).to eq 'scheduled'
|
|
|
|
expect(jira_import.jira_project_key).to eq 'Test'
|
2020-04-06 20:09:33 -04:00
|
|
|
expect(response).to redirect_to(project_import_jira_path(project))
|
|
|
|
end
|
2020-03-13 08:09:22 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when import state is scheduled' do
|
2020-04-09 08:09:24 -04:00
|
|
|
let_it_be(:jira_import_state) { create(:jira_import_state, :scheduled, project: project) }
|
2020-03-13 08:09:22 -04:00
|
|
|
|
|
|
|
context 'get show' do
|
|
|
|
it 'renders import status' do
|
|
|
|
get :show, params: { namespace_id: project.namespace.to_param, project_id: project }
|
|
|
|
|
2020-04-09 08:09:24 -04:00
|
|
|
jira_import = project.latest_jira_import
|
|
|
|
expect(jira_import.status).to eq 'scheduled'
|
2020-03-13 08:09:22 -04:00
|
|
|
expect(flash.now[:notice]).to eq 'Import scheduled'
|
|
|
|
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' }
|
|
|
|
|
2020-03-30 14:08:07 -04:00
|
|
|
expect(flash[:notice]).to eq('Jira import is already running.')
|
2020-03-13 08:09:22 -04:00
|
|
|
expect(response).to redirect_to(project_import_jira_path(project))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when jira import ran before' do
|
2020-04-09 08:09:24 -04:00
|
|
|
let_it_be(:jira_import_state) { create(:jira_import_state, :finished, project: project, jira_project_key: 'Test') }
|
2020-03-13 08:09:22 -04:00
|
|
|
|
|
|
|
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 }
|
|
|
|
|
2020-04-09 08:09:24 -04:00
|
|
|
expect(project.latest_jira_import.status).to eq 'finished'
|
2020-03-13 08:09:22 -04:00
|
|
|
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
|
2020-04-09 08:09:24 -04:00
|
|
|
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 'Test'
|
|
|
|
expect(project.jira_imports.last.jira_project_key).to eq 'New Project'
|
2020-03-13 08:09:22 -04:00
|
|
|
expect(response).to redirect_to(project_import_jira_path(project))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|