Skip to content

Commit

Permalink
Accept POST method with _method param. (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
akiko-pusu committed Sep 5, 2019
1 parent 3534aef commit 0da5732
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 3 deletions.
5 changes: 5 additions & 0 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ def issue_badge_version_message(original_message = nil)
'activate_for_all_users' => 'false',
'enabled_polling' => false
}

Rails.configuration.to_prepare do
require_dependency 'my_controller'
MyController.prepend IssueBadge::MyControllerPatch unless MyController.included_modules.include?(IssueBadge::MyControllerPatch)
end
rescue ::Redmine::PluginRequirementError => e
raise ::Redmine::PluginRequirementError.new(issue_badge_version_message(e.message)) # rubocop:disable Style/RaiseArgs
end
Expand Down
13 changes: 10 additions & 3 deletions lib/issue_badge/my_controller_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ module MyControllerPatch

def account
user = User.current

@issue_badge = IssueBadgeUserSetting.find_or_create_by_user_id(user)
if request.put?

if put_request?
begin
logger.info(badge_params)
logger.warn "Can't save IssueBadge." unless @issue_badge.update(badge_params)
Expand All @@ -23,7 +25,12 @@ def account
def badge_params
params.require(:issue_badge).permit(:enabled, :show_assigned_to_group, :badge_order)
end

def put_request?
return true if request.put?
return false if request.method == 'POST'

params[:_method].present? && params[:_method] == 'put'
end
end
end

MyController.prepend IssueBadge::MyControllerPatch
42 changes: 42 additions & 0 deletions spec/requests/my_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# frozen_string_literal: true

require_relative '../spec_helper'

RSpec.describe 'Issue Bage Setting at user preference page', type: :request do
let(:user) { FactoryBot.create(:user, :password_same_login, login: 'test-manager', language: 'en', admin: false) }
let(:issue_badge_user_setting) { IssueBadgeUserSetting.find_by(user_id: user.id) }

before do
end

it 'issue_badge_user_setting is empty when access my account' do
login_request(user.login, user.login)
get '/my/account'
expect(response.status).to eq 200
expect(issue_badge_user_setting.blank?).to be_truthy
end

it 'issue_badge_user_setting is present after put data' do
login_request(user.login, user.login)
put '/my/account',
params: { issue_badge: { enabled: 1 } }
expect(response).to have_http_status(302)
expect(issue_badge_user_setting.present?).to be_truthy
expect(issue_badge_user_setting&.show_assigned_to_group?).to be_falsey
end

it 'issue_badge_user_setting is present after post data with _method param' do
login_request(user.login, user.login)
post '/my/account',
params: { _method: 'put', issue_badge: { enabled: 1, show_assigned_to_group: 1 } }
expect(response).to have_http_status(302)
expect(issue_badge_user_setting.present?).to be_truthy
expect(issue_badge_user_setting&.show_assigned_to_group?).to be_truthy
end

# Test support method

def login_request(login, password)
post '/login', params: { username: login, password: password }
end
end

0 comments on commit 0da5732

Please sign in to comment.