Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
d40912bb
Commit
d40912bb
authored
Feb 07, 2018
by
Francisco Javier López
Committed by
Sean McGivern
Feb 07, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removing gitaly flags
parent
683984f2
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
406 additions
and
368 deletions
+406
-368
lib/gitlab/git/wiki.rb
lib/gitlab/git/wiki.rb
+2
-4
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
+156
-148
spec/features/projects/wiki/user_views_wiki_page_spec.rb
spec/features/projects/wiki/user_views_wiki_page_spec.rb
+107
-98
spec/lib/gitlab/git/wiki_spec.rb
spec/lib/gitlab/git/wiki_spec.rb
+17
-13
spec/models/wiki_page_spec.rb
spec/models/wiki_page_spec.rb
+124
-105
No files found.
lib/gitlab/git/wiki.rb
View file @
d40912bb
...
@@ -25,9 +25,8 @@ module Gitlab
...
@@ -25,9 +25,8 @@ module Gitlab
@repository
.
exists?
@repository
.
exists?
end
end
# Disabled because of https://gitlab.com/gitlab-org/gitaly/merge_requests/539
def
write_page
(
name
,
format
,
content
,
commit_details
)
def
write_page
(
name
,
format
,
content
,
commit_details
)
@repository
.
gitaly_migrate
(
:wiki_write_page
,
status:
Gitlab
::
GitalyClient
::
MigrationStatus
::
DISABLED
)
do
|
is_enabled
|
@repository
.
gitaly_migrate
(
:wiki_write_page
)
do
|
is_enabled
|
if
is_enabled
if
is_enabled
gitaly_write_page
(
name
,
format
,
content
,
commit_details
)
gitaly_write_page
(
name
,
format
,
content
,
commit_details
)
gollum_wiki
.
clear_cache
gollum_wiki
.
clear_cache
...
@@ -48,9 +47,8 @@ module Gitlab
...
@@ -48,9 +47,8 @@ module Gitlab
end
end
end
end
# Disable because of https://gitlab.com/gitlab-org/gitlab-ce/issues/42094
def
update_page
(
page_path
,
title
,
format
,
content
,
commit_details
)
def
update_page
(
page_path
,
title
,
format
,
content
,
commit_details
)
@repository
.
gitaly_migrate
(
:wiki_update_page
,
status:
Gitlab
::
GitalyClient
::
MigrationStatus
::
DISABLED
)
do
|
is_enabled
|
@repository
.
gitaly_migrate
(
:wiki_update_page
)
do
|
is_enabled
|
if
is_enabled
if
is_enabled
gitaly_update_page
(
page_path
,
title
,
format
,
content
,
commit_details
)
gitaly_update_page
(
page_path
,
title
,
format
,
content
,
commit_details
)
gollum_wiki
.
clear_cache
gollum_wiki
.
clear_cache
...
...
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
View file @
d40912bb
require
'spec_helper'
require
'spec_helper'
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages
describe
'User updates wiki page'
do
describe
'User updates wiki page'
,
:skip_gitaly_mock
do
shared_examples
'wiki page user update'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
before
do
project
.
add_master
(
user
)
sign_in
(
user
)
end
context
'when wiki is empty'
do
before
do
before
do
visit
(
project_wikis_path
(
project
))
project
.
add_master
(
user
)
sign_in
(
user
)
end
end
context
'in a user namespace'
do
context
'when wiki is empty'
do
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
before
do
visit
(
project_wikis_path
(
project
))
it
'redirects back to the home edit page'
do
page
.
within
(
:css
,
'.wiki-form .form-actions'
)
do
click_on
(
'Cancel'
)
end
expect
(
current_path
).
to
eq
project_wiki_path
(
project
,
:home
)
end
end
it
'updates a page that has a path'
,
:js
do
context
'in a user namespace'
do
click_on
(
'New page'
)
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
page
.
within
(
'#modal-new-wiki'
)
do
it
'redirects back to the home edit page'
do
fill_in
(
:new_wiki_path
,
with:
'one/two/three-test'
)
page
.
within
(
:css
,
'.wiki-form .form-actions'
)
do
click_on
(
'Create page
'
)
click_on
(
'Cancel
'
)
end
end
page
.
within
'.wiki-form'
do
expect
(
current_path
).
to
eq
project_wiki_path
(
project
,
:home
)
fill_in
(
:wiki_content
,
with:
'wiki content'
)
click_on
(
'Create page'
)
end
end
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
it
'updates a page that has a path'
,
:js
do
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
'Thre
e'
)
click_on
(
'New pag
e'
)
first
(
:link
,
text:
'Three'
).
click
page
.
within
(
'#modal-new-wiki'
)
do
fill_in
(
:new_wiki_path
,
with:
'one/two/three-test'
)
click_on
(
'Create page'
)
end
expect
(
find
(
'.nav-text'
)).
to
have_content
(
'Three'
)
page
.
within
'.wiki-form'
do
fill_in
(
:wiki_content
,
with:
'wiki content'
)
click_on
(
'Create page'
)
end
click_on
(
'Edit'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
'Three'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
first
(
:link
,
text:
'Three'
).
click
expect
(
page
).
to
have_content
(
'Edit Page'
)
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
expect
(
find
(
'.nav-text'
)).
to
have_content
(
'Three'
)
click_on
(
'Save changes'
)
expect
(
page
).
to
have_content
(
'Updated Wiki Content'
)
click_on
(
'Edit'
)
end
end
end
context
'when wiki is not empty'
do
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
let
(
:project_wiki
)
{
create
(
:project_wiki
,
project:
project
,
user:
project
.
creator
)
}
expect
(
page
).
to
have_content
(
'Edit Page'
)
let!
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project_wiki
,
attrs:
{
title:
'home'
,
content:
'Home page'
})
}
before
do
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
visit
(
project_wikis_path
(
project
))
click_on
(
'Save changes'
)
expect
(
page
).
to
have_content
(
'Updated Wiki Content'
)
end
end
end
end
context
'in a user namespace'
do
context
'when wiki is not empty'
do
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
(
:project_wiki
)
{
create
(
:project_wiki
,
project:
project
,
user:
project
.
creator
)
}
let!
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project_wiki
,
attrs:
{
title:
'home'
,
content:
'Home page'
})
}
it
'updates a page'
do
before
do
click_link
(
'Edit'
)
visit
(
project_wikis_path
(
project
))
end
# Commit message field should have correct value.
context
'in a user namespace'
do
expect
(
page
).
to
have_field
(
'wiki[message]'
,
with:
'Update home'
)
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
fill_in
(
:wiki_content
,
with:
'My awesome wiki!'
)
it
'updates a page'
do
click_button
(
'Save changes
'
)
click_link
(
'Edit
'
)
expect
(
page
).
to
have_content
(
'Home'
)
# Commit message field should have correct value.
expect
(
page
).
to
have_content
(
"Last edited by
#{
user
.
name
}
"
)
expect
(
page
).
to
have_field
(
'wiki[message]'
,
with:
'Update home'
)
expect
(
page
).
to
have_content
(
'My awesome wiki!'
)
end
it
'shows a validation error message'
do
fill_in
(
:wiki_content
,
with:
'My awesome wiki!'
)
click_link
(
'Edit
'
)
click_button
(
'Save changes
'
)
fill_in
(
:wiki_content
,
with:
''
)
expect
(
page
).
to
have_content
(
'Home'
)
click_button
(
'Save changes'
)
expect
(
page
).
to
have_content
(
"Last edited by
#{
user
.
name
}
"
)
expect
(
page
).
to
have_content
(
'My awesome wiki!'
)
end
expect
(
page
).
to
have_selector
(
'.wiki-form'
)
it
'shows a validation error message'
do
expect
(
page
).
to
have_content
(
'Edit Page'
)
click_link
(
'Edit'
)
expect
(
page
).
to
have_content
(
'The form contains the following error:'
)
expect
(
page
).
to
have_content
(
"Content can't be blank"
)
expect
(
find
(
'textarea#wiki_content'
).
value
).
to
eq
(
''
)
end
it
'shows the autocompletion dropdown'
,
:js
do
fill_in
(
:wiki_content
,
with:
''
)
click_link
(
'Edit
'
)
click_button
(
'Save changes
'
)
find
(
'#wiki_content'
).
native
.
send_keys
(
''
)
expect
(
page
).
to
have_selector
(
'.wiki-form'
)
fill_in
(
:wiki_content
,
with:
'@'
)
expect
(
page
).
to
have_content
(
'Edit Page'
)
expect
(
page
).
to
have_content
(
'The form contains the following error:'
)
expect
(
page
).
to
have_content
(
"Content can't be blank"
)
expect
(
find
(
'textarea#wiki_content'
).
value
).
to
eq
(
''
)
end
expect
(
page
).
to
have_selector
(
'.atwho-view'
)
it
'shows the autocompletion dropdown'
,
:js
do
end
click_link
(
'Edit'
)
it
'shows the error message'
do
find
(
'#wiki_content'
).
native
.
send_keys
(
''
)
click_link
(
'Edit
'
)
fill_in
(
:wiki_content
,
with:
'@
'
)
wiki_page
.
update
(
content:
'Update'
)
expect
(
page
).
to
have_selector
(
'.atwho-view'
)
end
click_button
(
'Save changes'
)
it
'shows the error message'
do
click_link
(
'Edit'
)
expect
(
page
).
to
have_content
(
'Someone edited the page the same time you did.'
)
wiki_page
.
update
(
content:
'Update'
)
end
it
'updates a page'
do
click_button
(
'Save changes'
)
click_on
(
'Edit'
)
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
click_on
(
'Save changes'
)
expect
(
page
).
to
have_content
(
'Updated Wiki Content
'
)
expect
(
page
).
to
have_content
(
'Someone edited the page the same time you did.
'
)
end
end
it
'cancels edititng of a page'
do
it
'updates a page'
do
click_on
(
'Edit'
)
click_on
(
'Edit'
)
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
click_on
(
'Save changes'
)
page
.
within
(
:css
,
'.wiki-form .form-actions'
)
do
expect
(
page
).
to
have_content
(
'Updated Wiki Content'
)
click_on
(
'Cancel'
)
end
end
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
wiki_page
))
it
'cancels edititng of a page'
do
click_on
(
'Edit'
)
page
.
within
(
:css
,
'.wiki-form .form-actions'
)
do
click_on
(
'Cancel'
)
end
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
wiki_page
))
end
end
end
end
context
'in a group namespace'
do
context
'in a group namespace'
do
let
(
:project
)
{
create
(
:project
,
namespace:
create
(
:group
,
:public
))
}
let
(
:project
)
{
create
(
:project
,
namespace:
create
(
:group
,
:public
))
}
it
'updates a page'
do
it
'updates a page'
do
click_link
(
'Edit'
)
click_link
(
'Edit'
)
# Commit message field should have correct value.
# Commit message field should have correct value.
expect
(
page
).
to
have_field
(
'wiki[message]'
,
with:
'Update home'
)
expect
(
page
).
to
have_field
(
'wiki[message]'
,
with:
'Update home'
)
fill_in
(
:wiki_content
,
with:
'My awesome wiki!'
)
fill_in
(
:wiki_content
,
with:
'My awesome wiki!'
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
page
).
to
have_content
(
'Home'
)
expect
(
page
).
to
have_content
(
'Home'
)
expect
(
page
).
to
have_content
(
"Last edited by
#{
user
.
name
}
"
)
expect
(
page
).
to
have_content
(
"Last edited by
#{
user
.
name
}
"
)
expect
(
page
).
to
have_content
(
'My awesome wiki!'
)
expect
(
page
).
to
have_content
(
'My awesome wiki!'
)
end
end
end
end
end
end
context
'when the page is in a subdir'
do
context
'when the page is in a subdir'
do
let!
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let!
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
(
:project_wiki
)
{
create
(
:project_wiki
,
project:
project
,
user:
project
.
creator
)
}
let
(
:project_wiki
)
{
create
(
:project_wiki
,
project:
project
,
user:
project
.
creator
)
}
let
(
:page_name
)
{
'page_name'
}
let
(
:page_name
)
{
'page_name'
}
let
(
:page_dir
)
{
"foo/bar/
#{
page_name
}
"
}
let
(
:page_dir
)
{
"foo/bar/
#{
page_name
}
"
}
let!
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project_wiki
,
attrs:
{
title:
page_dir
,
content:
'Home page'
})
}
let!
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project_wiki
,
attrs:
{
title:
page_dir
,
content:
'Home page'
})
}
before
do
before
do
visit
(
project_wiki_edit_path
(
project
,
wiki_page
))
visit
(
project_wiki_edit_path
(
project
,
wiki_page
))
end
end
it
'moves the page to the root folder'
do
it
'moves the page to the root folder'
,
:skip_gitaly_mock
do
fill_in
(
:wiki_title
,
with:
"/
#{
page_name
}
"
)
fill_in
(
:wiki_title
,
with:
"/
#{
page_name
}
"
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
page_name
))
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
page_name
))
end
end
it
'moves the page to other dir'
do
it
'moves the page to other dir'
do
new_page_dir
=
"foo1/bar1/
#{
page_name
}
"
new_page_dir
=
"foo1/bar1/
#{
page_name
}
"
fill_in
(
:wiki_title
,
with:
new_page_dir
)
fill_in
(
:wiki_title
,
with:
new_page_dir
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_page_dir
))
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_page_dir
))
end
end
it
'remains in the same place if title has not changed'
do
it
'remains in the same place if title has not changed'
do
original_path
=
project_wiki_path
(
project
,
wiki_page
)
original_path
=
project_wiki_path
(
project
,
wiki_page
)
fill_in
(
:wiki_title
,
with:
page_name
)
fill_in
(
:wiki_title
,
with:
page_name
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
original_path
)
expect
(
current_path
).
to
eq
(
original_path
)
end
end
it
'can be moved to a different dir with a different name'
do
it
'can be moved to a different dir with a different name'
do
new_page_dir
=
"foo1/bar1/new_page_name"
new_page_dir
=
"foo1/bar1/new_page_name"
fill_in
(
:wiki_title
,
with:
new_page_dir
)
fill_in
(
:wiki_title
,
with:
new_page_dir
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_page_dir
))
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_page_dir
))
end
end
it
'can be renamed and moved to the root folder'
do
it
'can be renamed and moved to the root folder'
do
new_name
=
'new_page_name'
new_name
=
'new_page_name'
fill_in
(
:wiki_title
,
with:
"/
#{
new_name
}
"
)
fill_in
(
:wiki_title
,
with:
"/
#{
new_name
}
"
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_name
))
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
new_name
))
end
end
it
'squishes the title before creating the page'
do
it
'squishes the title before creating the page'
do
new_page_dir
=
" foo1 / bar1 /
#{
page_name
}
"
new_page_dir
=
" foo1 / bar1 /
#{
page_name
}
"
fill_in
(
:wiki_title
,
with:
new_page_dir
)
fill_in
(
:wiki_title
,
with:
new_page_dir
)
click_button
(
'Save changes'
)
click_button
(
'Save changes'
)
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
"foo1/bar1/
#{
page_name
}
"
))
expect
(
current_path
).
to
eq
(
project_wiki_path
(
project
,
"foo1/bar1/
#{
page_name
}
"
))
end
end
end
end
end
context
'when Gitaly is enabled'
do
it_behaves_like
'wiki page user update'
end
context
'when Gitaly is disabled'
,
:skip_gitaly_mock
do
it_behaves_like
'wiki page user update'
end
end
end
spec/features/projects/wiki/user_views_wiki_page_spec.rb
View file @
d40912bb
require
'spec_helper'
require
'spec_helper'
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages
describe
'User views a wiki page'
do
describe
'User views a wiki page'
,
:skip_gitaly_mock
do
shared_examples
'wiki page user view'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
(
:project
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
(
:wiki_page
)
do
let
(
:wiki_page
)
do
create
(
:wiki_page
,
create
(
:wiki_page
,
wiki:
project
.
wiki
,
wiki:
project
.
wiki
,
attrs:
{
title:
'home'
,
content:
'Look at this [image](image.jpg)\n\n ![alt text](image.jpg)'
})
attrs:
{
title:
'home'
,
content:
'Look at this [image](image.jpg)\n\n ![alt text](image.jpg)'
})
end
end
before
do
project
.
add_master
(
user
)
sign_in
(
user
)
end
context
'when wiki is empty'
do
before
do
before
do
visit
(
project_wikis_path
(
project
))
project
.
add_master
(
user
)
sign_in
(
user
)
end
click_on
(
'New page'
)
context
'when wiki is empty'
do
before
do
visit
(
project_wikis_path
(
project
))
page
.
within
(
'#modal-new-wiki'
)
do
click_on
(
'New page'
)
fill_in
(
:new_wiki_path
,
with:
'one/two/three-test'
)
click_on
(
'Create page'
)
end
page
.
within
(
'.wiki-form'
)
do
page
.
within
(
'#modal-new-wiki'
)
do
fill_in
(
:wiki_content
,
with:
'wiki content'
)
fill_in
(
:new_wiki_path
,
with:
'one/two/three-test'
)
click_on
(
'Create page'
)
click_on
(
'Create page'
)
end
page
.
within
(
'.wiki-form'
)
do
fill_in
(
:wiki_content
,
with:
'wiki content'
)
click_on
(
'Create page'
)
end
end
end
end
it
'shows the history of a page that has a path'
,
:js
do
it
'shows the history of a page that has a path'
,
:js
do
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
first
(
:link
,
text:
'Three'
).
click
first
(
:link
,
text:
'Three'
).
click
click_on
(
'Page history'
)
click_on
(
'Page history'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
page
.
within
(
:css
,
'.nav-text'
)
do
page
.
within
(
:css
,
'.nav-text'
)
do
expect
(
page
).
to
have_content
(
'History'
)
expect
(
page
).
to
have_content
(
'History'
)
end
end
end
end
it
'shows an old version of a page'
,
:js
do
it
'shows an old version of a page'
,
:js
do
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
'Three'
)
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
'Three'
)
first
(
:link
,
text:
'Three'
).
click
first
(
:link
,
text:
'Three'
).
click
expect
(
find
(
'.nav-text'
)).
to
have_content
(
'Three'
)
expect
(
find
(
'.nav-text'
)).
to
have_content
(
'Three'
)
click_on
(
'Edit'
)
click_on
(
'Edit'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
current_path
).
to
include
(
'one/two/three-test'
)
expect
(
page
).
to
have_content
(
'Edit Page'
)
expect
(
page
).
to
have_content
(
'Edit Page'
)
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
fill_in
(
'Content'
,
with:
'Updated Wiki Content'
)
click_on
(
'Save changes'
)
click_on
(
'Save changes'
)
click_on
(
'Page history'
)
click_on
(
'Page history'
)
page
.
within
(
:css
,
'.nav-text'
)
do
page
.
within
(
:css
,
'.nav-text'
)
do
expect
(
page
).
to
have_content
(
'History'
)
expect
(
page
).
to
have_content
(
'History'
)
end
end
find
(
'a[href*="?version_id"]'
)
find
(
'a[href*="?version_id"]'
)
end
end
end
end
context
'when a page does not have history'
do
context
'when a page does not have history'
do
before
do
before
do
visit
(
project_wiki_path
(
project
,
wiki_page
))
visit
(
project_wiki_path
(
project
,
wiki_page
))
end
end
it
'shows all the pages'
do
it
'shows all the pages'
do
expect
(
page
).
to
have_content
(
user
.
name
)
expect
(
page
).
to
have_content
(
user
.
name
)
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
wiki_page
.
title
.
capitalize
)
expect
(
find
(
'.wiki-pages'
)).
to
have_content
(
wiki_page
.
title
.
capitalize
)
end
end
it
'shows a file stored in a page'
do
it
'shows a file stored in a page'
do
gollum_file_double
=
double
(
'Gollum::File'
,
gollum_file_double
=
double
(
'Gollum::File'
,
mime_type:
'image/jpeg'
,
mime_type:
'image/jpeg'
,
name:
'images/image.jpg'
,
name:
'images/image.jpg'
,
path:
'images/image.jpg'
,
path:
'images/image.jpg'
,
raw_data:
''
)
raw_data:
''
)
wiki_file
=
Gitlab
::
Git
::
WikiFile
.
new
(
gollum_file_double
)
wiki_file
=
Gitlab
::
Git
::
WikiFile
.
new
(
gollum_file_double
)
allow
(
wiki_file
).
to
receive
(
:mime_type
).
and_return
(
'image/jpeg'
)
allow
(
wiki_file
).
to
receive
(
:mime_type
).
and_return
(
'image/jpeg'
)
allow_any_instance_of
(
ProjectWiki
).
to
receive
(
:find_file
).
with
(
'image.jpg'
,
nil
).
and_return
(
wiki_file
)
allow_any_instance_of
(
ProjectWiki
).
to
receive
(
:find_file
).
with
(
'image.jpg'
,
nil
).
and_return
(
wiki_file
)
expect
(
page
).
to
have_xpath
(
'//img[@data-src="image.jpg"]'
)
expect
(
page
).
to
have_xpath
(
'//img[@data-src="image.jpg"]'
)
expect
(
page
).
to
have_link
(
'image'
,
href:
"
#{
project
.
wiki
.
wiki_base_path
}
/image.jpg"
)
expect
(
page
).
to
have_link
(
'image'
,
href:
"
#{
project
.
wiki
.
wiki_base_path
}
/image.jpg"
)
click_on
(
'image'
)
click_on
(
'image'
)
expect
(
current_path
).
to
match
(
'wikis/image.jpg'
)
expect
(
current_path
).
to
match
(
'wikis/image.jpg'
)
expect
(
page
).
not_to
have_xpath
(
'/html'
)
# Page should render the image which means there is no html involved
expect
(
page
).
not_to
have_xpath
(
'/html'
)
# Page should render the image which means there is no html involved
end
end
it
'shows the creation page if file does not exist'
do
it
'shows the creation page if file does not exist'
do
expect
(
page
).
to
have_link
(
'image'
,
href:
"
#{
project
.
wiki
.
wiki_base_path
}
/image.jpg"
)
expect
(
page
).
to
have_link
(
'image'
,
href:
"
#{
project
.
wiki
.
wiki_base_path
}
/image.jpg"
)
click_on
(
'image'
)
click_on
(
'image'
)
expect
(
current_path
).
to
match
(
'wikis/image.jpg'
)
expect
(
current_path
).
to
match
(
'wikis/image.jpg'
)
expect
(
page
).
to
have_content
(
'New Wiki Page'
)
expect
(
page
).
to
have_content
(
'New Wiki Page'
)
expect
(
page
).
to
have_content
(
'Create page'
)
expect
(
page
).
to
have_content
(
'Create page'
)
end
end
end
end
context
'when a page has history'
do
context
'when a page has history'
do
before
do
before
do
wiki_page
.
update
(
message:
'updated home'
,
content:
'updated [some link](other-page)'
)
wiki_page
.
update
(
message:
'updated home'
,
content:
'updated [some link](other-page)'
)
end
end
it
'shows the page history'
do
it
'shows the page history'
do
visit
(
project_wiki_path
(
project
,
wiki_page
))
visit
(
project_wiki_path
(
project
,
wiki_page
))
expect
(
page
).
to
have_selector
(
'a.btn'
,
text:
'Edit'
)
expect
(
page
).
to
have_selector
(
'a.btn'
,
text:
'Edit'
)
click_on
(
'Page history'
)
click_on
(
'Page history'
)
expect
(
page
).
to
have_content
(
user
.
name
)
expect
(
page
).
to
have_content
(
user
.
name
)
expect
(
page
).
to
have_content
(
"
#{
user
.
username
}
created page: home"
)
expect
(
page
).
to
have_content
(
"
#{
user
.
username
}
created page: home"
)
expect
(
page
).
to
have_content
(
'updated home'
)
expect
(
page
).
to
have_content
(
'updated home'
)
end
it
'does not show the "Edit" button'
do
visit
(
project_wiki_path
(
project
,
wiki_page
,
version_id:
wiki_page
.
versions
.
last
.
id
))
expect
(
page
).
not_to
have_selector
(
'a.btn'
,
text:
'Edit'
)
end
end
end
it
'
does not show the "Edit" button'
do
it
'
opens a default wiki page'
,
:js
do
visit
(
project_
wiki_path
(
project
,
wiki_page
,
version_id:
wiki_page
.
versions
.
last
.
id
))
visit
(
project_
path
(
project
))
expect
(
page
).
not_to
have_selector
(
'a.btn'
,
text:
'Edit'
)
find
(
'.shortcuts-wiki'
).
click
expect
(
page
).
to
have_content
(
'Home · Create Page'
)
end
end
end
end
it
'opens a default wiki page'
,
:js
do
context
'when Gitaly is enabled'
do
visit
(
project_path
(
project
))
it_behaves_like
'wiki page user view'
end
find
(
'.shortcuts-wiki'
).
click
expect
(
page
).
to
have_content
(
'Home · Create Page'
)
context
'when Gitaly is disabled'
,
:skip_gitaly_mock
do
it_behaves_like
'wiki page user view'
end
end
end
end
spec/lib/gitlab/git/wiki_spec.rb
View file @
d40912bb
...
@@ -3,34 +3,38 @@ require 'spec_helper'
...
@@ -3,34 +3,38 @@ require 'spec_helper'
describe
Gitlab
::
Git
::
Wiki
do
describe
Gitlab
::
Git
::
Wiki
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:user
)
{
project
.
owner
}
let
(
:user
)
{
project
.
owner
}
let
(
:wiki
)
{
ProjectWiki
.
new
(
project
,
user
)
}
let
(
:
project_
wiki
)
{
ProjectWiki
.
new
(
project
,
user
)
}
let
(
:gollum_wiki
)
{
wiki
.
wiki
}
subject
{
project_
wiki
.
wiki
}
# Remove skip_gitaly_mock flag when gitaly_find_page when
# Remove skip_gitaly_mock flag when gitaly_find_page when
# https://gitlab.com/gitlab-org/git
aly/merge_requests/539 gets merg
ed
# https://gitlab.com/gitlab-org/git
lab-ce/issues/42039 is solv
ed
describe
'#page'
,
:skip_gitaly_mock
do
describe
'#page'
,
:skip_gitaly_mock
do
it
'returns the right page'
do
before
do
create_page
(
'page1'
,
'content'
)
create_page
(
'page1'
,
'content'
)
create_page
(
'foo/page1'
,
'content'
)
create_page
(
'foo/page1'
,
'content foo/page1'
)
end
expect
(
gollum_wiki
.
page
(
title:
'page1'
,
dir:
''
).
url_path
).
to
eq
'page1'
expect
(
gollum_wiki
.
page
(
title:
'page1'
,
dir:
'foo'
).
url_path
).
to
eq
'foo/page1'
after
do
destroy_page
(
'page1'
)
destroy_page
(
'page1'
)
destroy_page
(
'page1'
,
'foo'
)
destroy_page
(
'page1'
,
'foo'
)
end
end
it
'returns the right page'
do
expect
(
subject
.
page
(
title:
'page1'
,
dir:
''
).
url_path
).
to
eq
'page1'
expect
(
subject
.
page
(
title:
'page1'
,
dir:
'foo'
).
url_path
).
to
eq
'foo/page1'
end
end
end
def
create_page
(
name
,
content
)
def
create_page
(
name
,
content
)
gollum_wiki
.
write_page
(
name
,
:markdown
,
content
,
commit_details
)
subject
.
write_page
(
name
,
:markdown
,
content
,
commit_details
(
name
)
)
end
end
def
commit_details
def
commit_details
(
name
)
Gitlab
::
Git
::
Wiki
::
CommitDetails
.
new
(
user
.
name
,
user
.
email
,
"
test commit
"
)
Gitlab
::
Git
::
Wiki
::
CommitDetails
.
new
(
user
.
name
,
user
.
email
,
"
created page
#{
name
}
"
)
end
end
def
destroy_page
(
title
,
dir
=
''
)
def
destroy_page
(
title
,
dir
=
''
)
page
=
gollum_wiki
.
page
(
title:
title
,
dir:
dir
)
page
=
subject
.
page
(
title:
title
,
dir:
dir
)
wiki
.
delete_page
(
page
,
"test commit"
)
project_
wiki
.
delete_page
(
page
,
"test commit"
)
end
end
end
end
spec/models/wiki_page_spec.rb
View file @
d40912bb
...
@@ -188,162 +188,181 @@ describe WikiPage do
...
@@ -188,162 +188,181 @@ describe WikiPage do
end
end
end
end
describe
'#create'
,
:skip_gitaly_mock
do
describe
'#create'
do
context
'with valid attributes'
do
shared_examples
'create method'
do
it
'raises an error if a page with the same path already exists'
do
context
'with valid attributes'
do
create_page
(
'New Page'
,
'content'
)
it
'raises an error if a page with the same path already exists'
do
create_page
(
'foo/bar'
,
'content'
)
create_page
(
'New Page'
,
'content'
)
expect
{
create_page
(
'New Page'
,
'other content'
)
}.
to
raise_error
Gitlab
::
Git
::
Wiki
::
DuplicatePageError
create_page
(
'foo/bar'
,
'content'
)
expect
{
create_page
(
'foo/bar'
,
'other content'
)
}.
to
raise_error
Gitlab
::
Git
::
Wiki
::
DuplicatePageError
expect
{
create_page
(
'New Page'
,
'other content'
)
}.
to
raise_error
Gitlab
::
Git
::
Wiki
::
DuplicatePageError
expect
{
create_page
(
'foo/bar'
,
'other content'
)
}.
to
raise_error
Gitlab
::
Git
::
Wiki
::
DuplicatePageError
destroy_page
(
'New Page'
)
destroy_page
(
'bar'
,
'foo'
)
destroy_page
(
'New Page'
)
end
destroy_page
(
'bar'
,
'foo'
)
end
it
'if the title is preceded by a / it is removed'
do
it
'if the title is preceded by a / it is removed'
do
create_page
(
'/New Page'
,
'content'
)
create_page
(
'/New Page'
,
'content'
)
expect
(
wiki
.
find_page
(
'New Page'
)).
not_to
be_nil
expect
(
wiki
.
find_page
(
'New Page'
)).
not_to
be_nil
destroy_page
(
'New Page'
)
destroy_page
(
'New Page'
)
end
end
end
end
end
end
# Remove skip_gitaly_mock flag when gitaly_update_page implements moving pages
context
'when Gitaly is enabled'
do
describe
"#update"
,
:skip_gitaly_mock
do
it_behaves_like
'create method'
before
do
create_page
(
"Update"
,
"content"
)
@page
=
wiki
.
find_page
(
"Update"
)
end
end
after
do
context
'when Gitaly is disabled'
,
:skip_gitaly_mock
do
destroy_page
(
@page
.
title
,
@page
.
directory
)
it_behaves_like
'create method'
end
end
end
context
"with valid attributes"
do
describe
"#update"
do
it
"updates the content of the page"
do
shared_examples
'update method'
do
new_content
=
"new content"
before
do
create_page
(
"Update"
,
"content"
)
@page
.
update
(
content:
new_content
)
@page
=
wiki
.
find_page
(
"Update"
)
@page
=
wiki
.
find_page
(
"Update"
)
end
expect
(
@page
.
content
).
to
eq
(
"new content"
)
after
do
destroy_page
(
@page
.
title
,
@page
.
directory
)
end
end
it
"updates the title of the page"
do
context
"with valid attributes"
do
new_title
=
"Index v.1.2.4"
it
"updates the content of the page"
do
new_content
=
"new content"
@page
.
update
(
title:
new_title
)
@page
.
update
(
content:
new_content
)
@page
=
wiki
.
find_page
(
new_title
)
@page
=
wiki
.
find_page
(
"Update"
)
expect
(
@page
.
title
).
to
eq
(
new_title
)
expect
(
@page
.
content
).
to
eq
(
"new content"
)
end
end
it
"returns true"
do
it
"updates the title of the page"
do
expect
(
@page
.
update
(
content:
"more content"
)).
to
be_truthy
new_title
=
"Index v.1.2.4"
@page
.
update
(
title:
new_title
)
@page
=
wiki
.
find_page
(
new_title
)
expect
(
@page
.
title
).
to
eq
(
new_title
)
end
it
"returns true"
do
expect
(
@page
.
update
(
content:
"more content"
)).
to
be_truthy
end
end
end
end
context
'with same last commit sha'
do
context
'with same last commit sha'
do
it
'returns true'
do
it
'returns true'
do
expect
(
@page
.
update
(
content:
'more content'
,
last_commit_sha:
@page
.
last_commit_sha
)).
to
be_truthy
expect
(
@page
.
update
(
content:
'more content'
,
last_commit_sha:
@page
.
last_commit_sha
)).
to
be_truthy
end
end
end
end
context
'with different last commit sha'
do
context
'with different last commit sha'
do
it
'raises exception'
do
it
'raises exception'
do
expect
{
@page
.
update
(
content:
'more content'
,
last_commit_sha:
'xxx'
)
}.
to
raise_error
(
WikiPage
::
PageChangedError
)
expect
{
@page
.
update
(
content:
'more content'
,
last_commit_sha:
'xxx'
)
}.
to
raise_error
(
WikiPage
::
PageChangedError
)
end
end
end
end
context
'when renaming a page'
do
context
'when renaming a page'
do
it
'raises an error if the page already exists'
do
it
'raises an error if the page already exists'
do
create_page
(
'Existing Page'
,
'content'
)
create_page
(
'Existing Page'
,
'content'
)
expect
{
@page
.
update
(
title:
'Existing Page'
,
content:
'new_content'
)
}.
to
raise_error
(
WikiPage
::
PageRenameError
)
expect
{
@page
.
update
(
title:
'Existing Page'
,
content:
'new_content'
)
}.
to
raise_error
(
WikiPage
::
PageRenameError
)
expect
(
@page
.
title
).
to
eq
'Update'
expect
(
@page
.
title
).
to
eq
'Update'
expect
(
@page
.
content
).
to
eq
'new_content'
expect
(
@page
.
content
).
to
eq
'new_content'
destroy_page
(
'Existing Page'
)
destroy_page
(
'Existing Page'
)
end
end
it
'updates the content and rename the file'
do
it
'updates the content and rename the file'
do
new_title
=
'Renamed Page'
new_title
=
'Renamed Page'
new_content
=
'updated content'
new_content
=
'updated content'
expect
(
@page
.
update
(
title:
new_title
,
content:
new_content
)).
to
be_truthy
expect
(
@page
.
update
(
title:
new_title
,
content:
new_content
)).
to
be_truthy
@page
=
wiki
.
find_page
(
new_title
)
@page
=
wiki
.
find_page
(
new_title
)
expect
(
@page
).
not_to
be_nil
expect
(
@page
).
not_to
be_nil
expect
(
@page
.
content
).
to
eq
new_content
expect
(
@page
.
content
).
to
eq
new_content
end
end
end
end
context
'when moving a page'
do
it
'raises an error if the page already exists'
do
create_page
(
'foo/Existing Page'
,
'content'
)
expect
{
@page
.
update
(
title:
'foo/Existing Page'
,
content:
'new_content'
)
}.
to
raise_error
(
WikiPage
::
PageRenameError
)
context
'when moving a page'
do
expect
(
@page
.
title
).
to
eq
'Update'
it
'raises an error if the page already exists'
do
expect
(
@page
.
content
).
to
eq
'new_content'
create_page
(
'foo/Existing Page'
,
'content'
)
destroy_page
(
'Existing Page'
,
'foo'
)
expect
{
@page
.
update
(
title:
'foo/Existing Page'
,
content:
'new_content'
)
}.
to
raise_error
(
WikiPage
::
PageRenameError
)
end
expect
(
@page
.
title
).
to
eq
'Update'
expect
(
@page
.
content
).
to
eq
'new_content'
it
'updates the content and moves the file'
do
destroy_page
(
'Existing Page'
,
'foo'
)
new_title
=
'foo/Other Page'
end
new_content
=
'new_content'
expect
(
@page
.
update
(
title:
new_title
,
content:
new_content
)).
to
be_truthy
it
'updates the content and moves the file'
do
new_title
=
'foo/Other Page'
new_content
=
'new_content'
page
=
wiki
.
find_page
(
new_title
)
expect
(
@page
.
update
(
title:
new_title
,
content:
new_content
)).
to
be_truthy
expect
(
page
).
not_to
be_nil
page
=
wiki
.
find_page
(
new_title
)
expect
(
page
.
content
).
to
eq
new_content
end
context
'in subdir'
do
expect
(
page
).
not_to
be_nil
before
do
expect
(
page
.
content
).
to
eq
new_content
create_page
(
'foo/Existing Page'
,
'content'
)
@page
=
wiki
.
find_page
(
'foo/Existing Page'
)
end
end
it
'moves the page to the root folder if the title is preceded by /'
do
context
'in subdir'
do
expect
(
@page
.
slug
).
to
eq
'foo/Existing-Page'
before
do
expect
(
@page
.
update
(
title:
'/Existing Page'
,
content:
'new_content'
)).
to
be_truthy
create_page
(
'foo/Existing Page'
,
'content'
)
expect
(
@page
.
slug
).
to
eq
'Existing-Page'
@page
=
wiki
.
find_page
(
'foo/Existing Page'
)
end
it
'moves the page to the root folder if the title is preceded by /'
,
:skip_gitaly_mock
do
expect
(
@page
.
slug
).
to
eq
'foo/Existing-Page'
expect
(
@page
.
update
(
title:
'/Existing Page'
,
content:
'new_content'
)).
to
be_truthy
expect
(
@page
.
slug
).
to
eq
'Existing-Page'
end
it
'does nothing if it has the same title'
do
original_path
=
@page
.
slug
expect
(
@page
.
update
(
title:
'Existing Page'
,
content:
'new_content'
)).
to
be_truthy
expect
(
@page
.
slug
).
to
eq
original_path
end
end
end
it
'does nothing if it has the same title'
do
context
'in root dir'
do
original_path
=
@page
.
slug
it
'does nothing if the title is preceded by /'
do
original_path
=
@page
.
slug
expect
(
@page
.
update
(
title:
'Existing Page'
,
content:
'new_content'
)).
to
be_truthy
expect
(
@page
.
update
(
title:
'/Update'
,
content:
'new_content'
)).
to
be_truthy
expect
(
@page
.
slug
).
to
eq
original_path
expect
(
@page
.
slug
).
to
eq
original_path
end
end
end
end
end
context
'in root dir'
do
context
"with invalid attributes"
do
it
'does nothing if the title is preceded by /'
do
it
'aborts update if title blank'
do
original_path
=
@page
.
slug
expect
(
@page
.
update
(
title:
''
,
content:
'new_content'
)).
to
be_falsey
expect
(
@page
.
content
).
to
eq
'new_content'
expect
(
@page
.
update
(
title:
'/Update'
,
content:
'new_content'
)).
to
be_truthy
page
=
wiki
.
find_page
(
'Update'
)
expect
(
@page
.
slug
).
to
eq
original_path
expect
(
page
.
content
).
to
eq
'content'
@page
.
title
=
'Update'
end
end
end
end
end
end
context
"with invalid attributes"
do
context
'when Gitaly is enabled'
do
it
'aborts update if title blank'
do
it_behaves_like
'update method'
expect
(
@page
.
update
(
title:
''
,
content:
'new_content'
)).
to
be_falsey
end
expect
(
@page
.
content
).
to
eq
'new_content'
page
=
wiki
.
find_page
(
'Update'
)
expect
(
page
.
content
).
to
eq
'content'
@page
.
title
=
'Update'
context
'when Gitaly is disabled'
,
:skip_gitaly_mock
do
end
it_behaves_like
'update method'
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment