Skip to content

Instantly share code, notes, and snippets.

@akiko-pusu
Created July 8, 2019 22:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akiko-pusu/b71d960d0001a48a3257da40febf25fe to your computer and use it in GitHub Desktop.
Save akiko-pusu/b71d960d0001a48a3257da40febf25fe to your computer and use it in GitHub Desktop.
deliver_security_notificationの無効(その2)
# frozen_string_literal: true
require_relative '../spec_helper'
require_relative '../support/login_helper'
feature 'IssueBadge', js: true do
include LoginHelper
let(:project) { FactoryBot.create(:project) }
let(:tracker) { FactoryBot.create(:tracker, :with_default_status) }
let(:role) { FactoryBot.create(:role) }
let(:issue_priority) { FactoryBot.create(:priority) }
let(:user) { FactoryBot.create(:user, :password_same_login, login: 'badge_user', language: 'en') }
let(:issues) do
FactoryBot.create_list(:issue, 4,
project_id: project.id,
tracker_id: tracker.id,
priority_id: issue_priority.id,
assigned_to_id: user.id)
end
context 'When Administrator' do
background do
# Prevent to call User.deliver_security_notification when user is created.
# after_saveは有効にしつつ、モック対応の場合はこちら
#allow_any_instance_of(User).to receive(:deliver_security_notification).and_return(true)
project.trackers << tracker
member = Member.new(project: project, user_id: user.id)
member.member_roles << MemberRole.new(role: role)
member.save
issues
# after_saveを一時的に無効にする処理に渡す
skip_after_save do
user.update(admin: true)
end
log_user(user.login, user.login)
visit '/settings/plugin/redmine_issue_badge'
end
scenario 'Badge is displayed if global settings badge option is activated.' do
# Enable Badge
check 'settings_activate_for_all_users'
click_on 'Apply'
expect(page).to have_selector '#content > h2', text: /Redmine Issue Badge plugin/
expect(page).to have_selector('#issue_badge')
end
scenario 'Badge is not displayed if global settings badge option is dectivated.' do
# Enable Badge
uncheck 'settings_activate_for_all_users'
click_on 'Apply'
expect(page).to have_selector '#content >h2', text: /Redmine Issue Badge plugin/
expect(page).not_to have_selector('#issue_badge')
end
end
def wait_for_ajax
Timeout.timeout(Capybara.default_max_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
# ブロックを引数に取り、その間だけ Userのafter_saveでのdeliver_security_notificationを無効にする
def skip_after_save
User.skip_callback(:save, :after, :deliver_security_notification)
yield
User.set_callback(:save, :after, :deliver_security_notification)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment