diff options
author | Shinya Maeda <shinya@gitlab.com> | 2017-06-26 23:42:01 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2017-06-28 21:58:31 +0900 |
commit | ac7ad422812cb3224afb6e1943f9ee22e2488912 (patch) | |
tree | d8488a7f946ca75f480f8ac0138097219503f07d /spec/support/matchers | |
parent | 043f1b8232a0d5a5f0b1427c3ed8038dcf029f53 (diff) | |
download | gitlab-ce-ac7ad422812cb3224afb6e1943f9ee22e2488912.tar.gz |
IMprove access_matchers
Diffstat (limited to 'spec/support/matchers')
-rw-r--r-- | spec/support/matchers/access_matchers_for_controller.rb | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/spec/support/matchers/access_matchers_for_controller.rb b/spec/support/matchers/access_matchers_for_controller.rb index 844464233b8..59c6f528e74 100644 --- a/spec/support/matchers/access_matchers_for_controller.rb +++ b/spec/support/matchers/access_matchers_for_controller.rb @@ -5,8 +5,8 @@ module AccessMatchersForController extend RSpec::Matchers::DSL include Warden::Test::Helpers - EXPECTED_STATUS_CODE_ALLOWED = [200, 302].freeze - EXPECTED_STATUS_CODE_DENIED = [404].freeze + EXPECTED_STATUS_CODE_ALLOWED = [200, 201, 302].freeze + EXPECTED_STATUS_CODE_DENIED = [401, 404].freeze def emulate_user(role, membership = nil) case role @@ -19,18 +19,13 @@ module AccessMatchersForController when :external user = create(:user, external: true) sign_in(user) - when :visitor # rubocop:disable Lint/EmptyWhen - # no-op + when :visitor + user = nil + when User + user = role + sign_in(user) when *Gitlab::Access.sym_options_with_owner.keys # owner, master, developer, reporter, guest - raise ArgumentError, "cannot emulate #{role} without membership parent" unless membership - - if role == :owner && membership.owner - user = membership.owner - else - user = create(:user) - membership.public_send(:"add_#{role}", user) - end - + user = cerate_user_by_membership(role, membership) sign_in(user) else raise ArgumentError, "cannot emulate user #{role}" @@ -39,6 +34,18 @@ module AccessMatchersForController user end + def cerate_user_by_membership(role, membership = nil) + raise ArgumentError, "cannot emulate #{role} without membership parent" unless membership + + if role == :owner && membership.owner + user = membership.owner + else + user = create(:user) + membership.public_send(:"add_#{role}", user) + end + user + end + def description_for(role, type, expected, result) "be #{type} for #{role}." \ " Expected: #{expected.join(',')} Got: #{result}" @@ -47,12 +54,7 @@ module AccessMatchersForController matcher :be_allowed_for do |role| match do |action| user = emulate_user(role, @membership) - begin - action.call(user) - rescue - # Ignore internal exceptions which will be caused in the controller - # In such cases, response.status will be 200. - end + action.call(user) EXPECTED_STATUS_CODE_ALLOWED.include?(response.status) end @@ -68,12 +70,7 @@ module AccessMatchersForController matcher :be_denied_for do |role| match do |action| user = emulate_user(role, @membership) - begin - action.call(user) - rescue - # Ignore internal exceptions which will be caused in the controller - # In such cases, response.status will be 200. - end + action.call(user) EXPECTED_STATUS_CODE_DENIED.include?(response.status) end |