-
-
Notifications
You must be signed in to change notification settings - Fork 457
/
deny_access_matcher.rb
93 lines (78 loc) · 2.18 KB
/
deny_access_matcher.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
require 'clearance/testing/assertion_error'
module Clearance
module Testing
module Matchers
def deny_access(opts = {})
DenyAccessMatcher.new(self, opts)
end
class DenyAccessMatcher
attr_reader :failure_message, :failure_message_when_negated
def initialize(context, opts)
@context = context
@flash = opts[:flash]
@url = opts[:redirect]
@failure_message = ''
@failure_message_when_negated = ''
end
def description
'deny access'
end
def matches?(controller)
@controller = controller
sets_the_flash? && redirects_to_url?
end
def failure_message_for_should
failure_message
end
def failure_message_for_should_not
failure_message_when_negated
end
private
def denied_access_url
if @controller.signed_in?
'/'
else
@controller.sign_in_url
end
end
def flash_notice
@controller.flash[:notice]
end
def flash_notice_value
if flash_notice.respond_to?(:values)
flash_notice.values.first
else
flash_notice
end
end
def redirects_to_url?
@url ||= denied_access_url
begin
@context.send(:assert_redirected_to, @url)
@failure_message_when_negated <<
"Didn't expect to redirect to #{@url}."
true
rescue Clearance::Testing::AssertionError
@failure_message << "Expected to redirect to #{@url} but did not."
false
end
end
def sets_the_flash?
if @flash.blank?
true
else
if flash_notice_value == @flash
@failure_message_when_negated <<
"Didn't expect to set the flash to #{@flash}"
true
else
@failure_message << "Expected the flash to be set to #{@flash} "\
"but was #{flash_notice_value}"
false
end
end
end
end
end
end
end