summaryrefslogtreecommitdiff
path: root/features/steps/project/source/markdown_render.rb
blob: ada0ff20585be5cbe52da5b65fe578609aa5b374 (plain)
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
# If you need to modify the existing seed repository for your tests,
# it is recommended that you make the changes on the `markdown` branch of the seed project repository,
# which should only be used by tests in this file. See `/spec/factories.rb#project` for more info.
class Spinach::Features::ProjectSourceMarkdownRender < Spinach::FeatureSteps
  include SharedAuthentication
  include SharedPaths
  include SharedMarkdown
  include WaitForAjax

  step 'I own project "Delta"' do
    @project = ::Project.find_by(name: "Delta")
    @project ||= create(:project, :repository, name: "Delta", namespace: @user.namespace)
    @project.team << [@user, :master]
  end

  step 'I should see files from repository in markdown' do
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown")
    expect(page).to have_content "README.md"
    expect(page).to have_content "CHANGELOG"
  end

  step 'I should see rendered README which contains correct links' do
    expect(page).to have_content "Welcome to GitLab GitLab is a free project and repository management application"
    expect(page).to have_link "GitLab API doc"
    expect(page).to have_link "GitLab API website"
    expect(page).to have_link "Rake tasks"
    expect(page).to have_link "backup and restore procedure"
    expect(page).to have_link "GitLab API doc directory"
    expect(page).to have_link "Maintenance"
  end

  step 'I click on Gitlab API in README' do
    click_link "GitLab API doc"
  end

  step 'I should see correct document rendered' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/README.md")
    wait_for_ajax
    expect(page).to have_content "All API requests require authentication"
  end

  step 'I click on Rake tasks in README' do
    click_link "Rake tasks"
  end

  step 'I should see correct directory rendered' do
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown/doc/raketasks")
    expect(page).to have_content "backup_restore.md"
    expect(page).to have_content "maintenance.md"
  end

  step 'I click on GitLab API doc directory in README' do
    click_link "GitLab API doc directory"
  end

  step 'I should see correct doc/api directory rendered' do
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown/doc/api")
    expect(page).to have_content "README.md"
    expect(page).to have_content "users.md"
  end

  step 'I click on Maintenance in README' do
    click_link "Maintenance"
  end

  step 'I should see correct maintenance file rendered' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/raketasks/maintenance.md")
    wait_for_ajax
    expect(page).to have_content "bundle exec rake gitlab:env:info RAILS_ENV=production"
  end

  step 'I click on link "empty" in the README' do
    page.within('.readme-holder') do
      click_link "empty"
    end
  end

  step 'I click on link "id" in the README' do
    page.within('.readme-holder') do
      click_link "#id"
    end
  end

  step 'I navigate to the doc/api/README' do
    page.within '.tree-table' do
      click_link "doc"
    end

    page.within '.tree-table' do
      click_link "api"
    end

    page.within '.tree-table' do
      click_link "README.md"
    end
  end

  step 'I see correct file rendered' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/README.md")
    wait_for_ajax
    expect(page).to have_content "Contents"
    expect(page).to have_link "Users"
    expect(page).to have_link "Rake tasks"
  end

  step 'I click on users in doc/api/README' do
    click_link "Users"
  end

  step 'I should see the correct document file' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/users.md")
    expect(page).to have_content "Get a list of users."
  end

  step 'I click on raketasks in doc/api/README' do
    click_link "Rake tasks"
  end

  # Markdown branch

  When 'I visit markdown branch' do
    visit namespace_project_tree_path(@project.namespace, @project, "markdown")
    wait_for_ajax
  end

  When 'I visit markdown branch "README.md" blob' do
    visit namespace_project_blob_path(@project.namespace, @project, "markdown/README.md")
  end

  When 'I visit markdown branch "d" tree' do
    visit namespace_project_tree_path(@project.namespace, @project, "markdown/d")
  end

  When 'I visit markdown branch "d/README.md" blob' do
    visit namespace_project_blob_path(@project.namespace, @project, "markdown/d/README.md")
  end

  step 'I should see files from repository in markdown branch' do
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown")
    expect(page).to have_content "README.md"
    expect(page).to have_content "CHANGELOG"
  end

  step 'I see correct file rendered in markdown branch' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/README.md")
    wait_for_ajax
    expect(page).to have_content "Contents"
    expect(page).to have_link "Users"
    expect(page).to have_link "Rake tasks"
  end

  step 'I should see correct document rendered for markdown branch' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/README.md")
    wait_for_ajax
    expect(page).to have_content "All API requests require authentication"
  end

  step 'I should see correct directory rendered for markdown branch' do
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown/doc/raketasks")
    expect(page).to have_content "backup_restore.md"
    expect(page).to have_content "maintenance.md"
  end

  step 'I should see the users document file in markdown branch' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/users.md")
    expect(page).to have_content "Get a list of users."
  end

  # Expected link contents

  step 'The link with text "empty" should have url "tree/markdown"' do
    wait_for_ajax
    find('a', text: /^empty$/)['href'] == current_host + namespace_project_tree_path(@project.namespace, @project, "markdown")
  end

  step 'The link with text "empty" should have url "blob/markdown/README.md"' do
    find('a', text: /^empty$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "markdown/README.md")
  end

  step 'The link with text "empty" should have url "tree/markdown/d"' do
    find('a', text: /^empty$/)['href'] == current_host + namespace_project_tree_path(@project.namespace, @project, "markdown/d")
  end

  step 'The link with text "empty" should have '\
       'url "blob/markdown/d/README.md"' do
    find('a', text: /^empty$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "markdown/d/README.md")
  end

  step 'The link with text "ID" should have url "tree/markdownID"' do
    find('a', text: /^#id$/)['href'] == current_host + namespace_project_tree_path(@project.namespace, @project, "markdown") + '#id'
  end

  step 'The link with text "/ID" should have url "tree/markdownID"' do
    find('a', text: /^\/#id$/)['href'] == current_host + namespace_project_tree_path(@project.namespace, @project, "markdown") + '#id'
  end

  step 'The link with text "README.mdID" '\
       'should have url "blob/markdown/README.mdID"' do
    find('a', text: /^README.md#id$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "markdown/README.md") + '#id'
  end

  step 'The link with text "d/README.mdID" should have '\
       'url "blob/markdown/d/README.mdID"' do
    find('a', text: /^d\/README.md#id$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "d/markdown/README.md") + '#id'
  end

  step 'The link with text "ID" should have url "blob/markdown/README.mdID"' do
    wait_for_ajax
    find('a', text: /^#id$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "markdown/README.md") + '#id'
  end

  step 'The link with text "/ID" should have url "blob/markdown/README.mdID"' do
    find('a', text: /^\/#id$/)['href'] == current_host + namespace_project_blob_path(@project.namespace, @project, "markdown/README.md") + '#id'
  end

  # Wiki

  step 'I go to wiki page' do
    click_link "Wiki"
    expect(current_path).to eq namespace_project_wiki_path(@project.namespace, @project, "home")
  end

  step 'I add various links to the wiki page' do
    fill_in "wiki[content]", with: "[test](test)\n[GitLab API doc](api)\n[Rake tasks](raketasks)\n"
    fill_in "wiki[message]", with: "Adding links to wiki"
    page.within '.wiki-form' do
      click_button "Create page"
    end
  end

  step 'Wiki page should have added links' do
    expect(current_path).to eq namespace_project_wiki_path(@project.namespace, @project, "home")
    expect(page).to have_content "test GitLab API doc Rake tasks"
  end

  step 'I add a header to the wiki page' do
    fill_in "wiki[content]", with: "# Wiki header\n"
    fill_in "wiki[message]", with: "Add header to wiki"
    page.within '.wiki-form' do
      click_button "Create page"
    end
  end

  step 'Wiki header should have correct id and link' do
    header_should_have_correct_id_and_link(1, 'Wiki header', 'wiki-header')
  end

  step 'I click on test link' do
    click_link "test"
  end

  step 'I see new wiki page named test' do
    expect(current_path).to eq  namespace_project_wiki_path(@project.namespace, @project, "test")

    page.within(:css, ".nav-text") do
      expect(page).to have_content "Test"
      expect(page).to have_content "Create Page"
    end
  end

  When 'I go back to wiki page home' do
    visit namespace_project_wiki_path(@project.namespace, @project, "home")
    expect(current_path).to eq namespace_project_wiki_path(@project.namespace, @project, "home")
  end

  step 'I click on GitLab API doc link' do
    click_link "GitLab API"
  end

  step 'I see Gitlab API document' do
    expect(current_path).to eq namespace_project_wiki_path(@project.namespace, @project, "api")

    page.within(:css, ".nav-text") do
      expect(page).to have_content "Create"
      expect(page).to have_content "Api"
    end
  end

  step 'I click on Rake tasks link' do
    click_link "Rake tasks"
  end

  step 'I see Rake tasks directory' do
    expect(current_path).to eq namespace_project_wiki_path(@project.namespace, @project, "raketasks")

    page.within(:css, ".nav-text") do
      expect(page).to have_content "Create"
      expect(page).to have_content "Rake"
    end
  end

  step 'I go directory which contains README file' do
    visit namespace_project_tree_path(@project.namespace, @project, "markdown/doc/api")
    expect(current_path).to eq namespace_project_tree_path(@project.namespace, @project, "markdown/doc/api")
  end

  step 'I click on a relative link in README' do
    click_link "Users"
  end

  step 'I should see the correct markdown' do
    expect(current_path).to eq namespace_project_blob_path(@project.namespace, @project, "markdown/doc/api/users.md")
    wait_for_ajax
    expect(page).to have_content "List users"
  end

  step 'Header "Application details" should have correct id and link' do
    wait_for_ajax
    header_should_have_correct_id_and_link(2, 'Application details', 'application-details')
  end

  step 'Header "GitLab API" should have correct id and link' do
    header_should_have_correct_id_and_link(1, 'GitLab API', 'gitlab-api')
  end
end