diff --git a/app/controllers/import/fogbugz_controller.rb b/app/controllers/import/fogbugz_controller.rb index a37ba682b91..28ead8d44da 100644 --- a/app/controllers/import/fogbugz_controller.rb +++ b/app/controllers/import/fogbugz_controller.rb @@ -11,7 +11,7 @@ class Import::FogbugzController < Import::BaseController def callback begin - res = Gitlab::FogbugzImport::Client.new(import_params.symbolize_keys) + res = Gitlab::FogbugzImport::Client.new(import_params.to_h.symbolize_keys) rescue # If the URI is invalid various errors can occur return redirect_to new_import_fogbugz_path, alert: _('Could not connect to FogBugz, check your URL') @@ -26,7 +26,7 @@ class Import::FogbugzController < Import::BaseController end def create_user_map - user_map = params[:users] + user_map = user_map_params.to_h[:users] unless user_map.is_a?(Hash) && user_map.all? { |k, v| !v[:name].blank? } flash.now[:alert] = _('All users must have a name.') @@ -99,6 +99,10 @@ class Import::FogbugzController < Import::BaseController params.permit(:uri, :email, :password) end + def user_map_params + params.permit(users: %w(name email gitlab_user)) + end + def verify_fogbugz_import_enabled render_404 unless fogbugz_import_enabled? end diff --git a/changelogs/unreleased/sh-fix-fogbugz-import.yml b/changelogs/unreleased/sh-fix-fogbugz-import.yml new file mode 100644 index 00000000000..1ac730fca24 --- /dev/null +++ b/changelogs/unreleased/sh-fix-fogbugz-import.yml @@ -0,0 +1,5 @@ +--- +title: Fix Fogbugz Importer not working +merge_request: 29383 +author: +type: fixed diff --git a/spec/controllers/import/fogbugz_controller_spec.rb b/spec/controllers/import/fogbugz_controller_spec.rb index f1e0923f316..f7c813576aa 100644 --- a/spec/controllers/import/fogbugz_controller_spec.rb +++ b/spec/controllers/import/fogbugz_controller_spec.rb @@ -11,6 +11,44 @@ describe Import::FogbugzController do sign_in(user) end + describe 'POST #callback' do + let(:token) { FFaker::Lorem.characters(8) } + let(:uri) { 'https://example.com' } + let(:xml_response) { %Q() } + + it 'attempts to contact Fogbugz server' do + stub_request(:post, "https://example.com/api.asp").to_return(status: 200, body: xml_response, headers: {}) + + post :callback, params: { uri: uri, email: 'test@example.com', password: 'mypassword' } + + expect(session[:fogbugz_token]).to eq(token) + expect(session[:fogbugz_uri]).to eq(uri) + expect(response).to redirect_to(new_user_map_import_fogbugz_path) + end + end + + describe 'POST #create_user_map' do + let(:user_map) do + { + "2" => { + "name" => "Test User", + "email" => "testuser@example.com", + "gitlab_user" => "3" + } + } + end + + it 'stores the user map in the session' do + client = double(user_map: {}) + expect(controller).to receive(:client).and_return(client) + + post :create_user_map, params: { users: user_map } + + expect(session[:fogbugz_user_map]).to eq(user_map) + expect(response).to redirect_to(status_import_fogbugz_path) + end + end + describe 'GET status' do before do @repo = OpenStruct.new(name: 'vim')