This repository has been archived by the owner on Sep 25, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 39
/
assertions.rb
46 lines (39 loc) · 1.69 KB
/
assertions.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
module Turbolinks
module Assertions
TURBOLINKS_VISIT = /Turbolinks\.visit\("([^"]+)", {"action":"([^"]+)"}\)/
def assert_redirected_to(options = {}, message = nil)
if turbolinks_request?
assert_turbolinks_visited(options, message)
else
super
end
end
def assert_turbolinks_visited(options = {}, message = nil)
assert_response(:ok, message)
assert_equal("text/javascript", response.try(:media_type) || response.content_type)
visit_location, _ = turbolinks_visit_location_and_action
redirect_is = normalize_argument_to_redirection(visit_location)
redirect_expected = normalize_argument_to_redirection(options)
message ||= "Expected response to be a Turbolinks visit to <#{redirect_expected}> but was a visit to <#{redirect_is}>"
assert_operator redirect_expected, :===, redirect_is, message
end
# Rough heuristic to detect whether this was a Turbolinks request:
# non-GET request with a text/javascript response.
#
# Technically we'd check that Turbolinks-Referrer request header is
# also set, but that'd require us to pass the header from post/patch/etc
# test methods by overriding them to provide a `turbolinks:` option.
#
# We can't check `request.xhr?` here, either, since the X-Requested-With
# header is cleared after controller action processing to prevent it
# from leaking into subsequent requests.
def turbolinks_request?
!request.get? && (response.try(:media_type) || response.content_type) == "text/javascript"
end
def turbolinks_visit_location_and_action
if response.body =~ TURBOLINKS_VISIT
[ $1, $2 ]
end
end
end
end