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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
require 'test_helper'
class RevisionsControllerTest < ActionController::TestCase
def setup
Node.root.descendants.destroy_all
@user = User.find_by_login("aaron")
@node = Node.root.children.create!( :slug => "version_me" )
draft = @node.draft
draft.body = "first"
@node.publish_draft!
@node.find_or_create_draft @user
draft = @node.draft
draft.update(:body => "second")
@node.publish_draft!
end
test "setup" do
assert_equal 2, Node.count
assert_equal 2, @node.pages.count
assert_equal ["first", "second"], @node.pages.map {|p| p.body}
end
test "get list of revisions for a given node" do
login_as :quentin
get :index, params: { :node_id => @node.id }
assert_response :success
assert_select ".revision", 2
end
test "showing one revision" do
login_as :quentin
get :show, params: { :node_id => @node.id, :id => @node.pages.last.id }
assert_response :success
assert_select ".node_description", "Body"
assert_select ".node_content", {:count => 1, :text => "second"}
end
test "showing a revision renders real markup in the body, not escaped entities" do
login_as :quentin
node = Node.root.children.create!(:slug => "show_markup_test")
draft = node.draft
draft.body = "<h3>Hello</h3>"
node.publish_draft!
get :show, params: { :node_id => node.id, :id => node.head.id }
assert_response :success
assert_select ".node_content h3", "Hello"
end
test "diffing two revisions" do
login_as :quentin
post(
:diff, params: {
:node_id => @node.id,
:start_revision => @node.pages.first.revision,
:end_revision => @node.pages.last.revision
}
)
assert_response :success
end
test "restoring a revision" do
assert_equal "second", @node.head.body
login_as :aaron
put( :restore, params: { :node_id => @node.id, :id => @node.pages.first.id } )
@node.reload
assert_equal @node.head, @node.pages.first
assert_equal "first", @node.head.reload.body
end
test "diffing two revisions renders real markup with only the changed words marked" do
login_as :quentin
post(
:diff, params: {
:node_id => @node.id,
:start_revision => @node.pages.first.revision,
:end_revision => @node.pages.last.revision
}
)
assert_response :success
assert_select "del", "first"
assert_select "ins", "second"
assert_no_match /</, response.body
end
test "diffing two revisions in side by side view renders two columns" do
login_as :quentin
post(
:diff, params: {
:node_id => @node.id,
:start_revision => @node.pages.first.revision,
:end_revision => @node.pages.last.revision,
:view => "side_by_side"
}
)
assert_response :success
assert_select ".diff_column", 2
end
test "diffing head against draft by name" do
login_as :quentin
@node.find_or_create_draft(@user)
@node.draft.update(:body => "draft body")
post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" })
assert_response :success
end
test "diffing a layer pair that no longer exists redirects with a flash" do
login_as :quentin
post(:diff, params: { :node_id => @node.id, :start_revision => "draft", :end_revision => "autosave" })
assert_redirected_to node_path(@node)
assert flash[:error].present?
end
test "diffing by name shows a clear comparison label instead of a misleading revision picker" do
login_as :quentin
@node.find_or_create_draft(@user)
post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" })
assert_response :success
assert_select "strong", "Head"
assert_select "strong", "Draft"
assert_select "select[name=?]", "start_revision", :count => 0
end
test "pair-switcher buttons carry their params as real hidden fields, not a query string" do
login_as :quentin
@node.find_or_create_draft(@user)
@node.lock_for_editing!(@user)
@node.autosave!({ :body => "unsaved" }, @user)
post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" })
assert_response :success
assert_select "form.computation input[type=hidden][name=start_revision]"
assert_select "form.computation input[type=hidden][name=end_revision]"
end
test "the view toggle is available even when comparing named layers" do
login_as :quentin
@node.find_or_create_draft(@user)
post(:diff, params: { :node_id => @node.id, :start_revision => "head", :end_revision => "draft" })
assert_response :success
assert_select "a", "Side by side"
end
test "diffing two revisions also shows tag, template, and asset changes" do
login_as :quentin
@node.find_or_create_draft(@user)
@node.draft.tag_list = "update"
@node.draft.save!
post(:diff, params: { :node_id => @node.id, :start_revision => @node.pages.first.revision, :end_revision => @node.pages.last.revision })
assert_response :success
assert_select "h3", "Tags"
assert_select "h3", "Template"
assert_select "h3", "Assets"
end
test "revisions#index links back to the node" do
login_as :quentin
get :index, params: { :node_id => @node.id }
assert_response :success
assert_select "a[href=?]", node_path(@node)
end
end
|