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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
7ce9b17b
Commit
7ce9b17b
authored
Jul 31, 2020
by
Francisco Javier López
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve project feature create spec
parent
1bf84774
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
103 deletions
+66
-103
spec/features/projects/snippets/create_snippet_spec.rb
spec/features/projects/snippets/create_snippet_spec.rb
+66
-103
No files found.
spec/features/projects/snippets/create_snippet_spec.rb
View file @
7ce9b17b
...
...
@@ -2,9 +2,28 @@
require
'spec_helper'
RSpec
.
shared_examples_for
'snippet editor'
do
RSpec
.
describe
'Projects > Snippets > Create Snippet'
,
:js
do
include
DropzoneHelper
let_it_be
(
:user
)
{
create
(
:user
)
}
let_it_be
(
:project
)
do
create
(
:project
,
:public
,
creator:
user
).
tap
do
|
p
|
p
.
add_maintainer
(
user
)
end
end
let
(
:title
)
{
'My Snippet Title'
}
let
(
:file_content
)
{
'Hello World!'
}
let
(
:md_description
)
{
'My Snippet **Description**'
}
let
(
:description
)
{
'My Snippet Description'
}
before
do
stub_feature_flags
(
snippets_vue:
false
)
stub_feature_flags
(
snippets_edit_vue:
false
)
sign_in
(
user
)
visit
new_project_snippet_path
(
project
)
end
def
description_field
...
...
@@ -12,137 +31,81 @@ RSpec.shared_examples_for 'snippet editor' do
end
def
fill_form
fill_in
'project_snippet_title'
,
with:
'My Snippet Title'
fill_in
'project_snippet_title'
,
with:
title
# Click placeholder first to expand full description field
description_field
.
click
fill_in
'project_snippet_description'
,
with:
'My Snippet **Description**'
fill_in
'project_snippet_description'
,
with:
md_description
page
.
within
(
'.file-editor'
)
do
el
=
find
(
'.inputarea'
)
el
.
send_keys
'Hello World!'
el
.
send_keys
file_content
end
end
context
'when a user is authenticated'
do
before
do
stub_feature_flags
(
snippets_vue:
false
)
project
.
add_maintainer
(
user
)
sign_in
(
user
)
it
'shows collapsible description input'
do
collapsed
=
description_field
visit
project_snippets_path
(
project
)
# Wait for the SVG to ensure the button location doesn't shift
within
(
'.empty-state'
)
{
find
(
'img.js-lazy-loaded'
)
}
click_on
(
'New snippet'
)
wait_for_requests
end
expect
(
page
).
not_to
have_field
(
'project_snippet_description'
)
expect
(
collapsed
).
to
be_visible
it
'shows collapsible description input'
do
collapsed
=
description_field
collapsed
.
click
expect
(
page
).
not_to
have_field
(
'project_snippet_description'
)
expect
(
collapsed
).
to
be_visible
expect
(
page
).
to
have_field
(
'project_snippet_description'
)
expect
(
collapsed
).
not_to
be_visible
end
collapsed
.
click
it
'creates a new snippet'
do
fill_form
click_button
(
'Create snippet'
)
wait_for_requests
expect
(
page
).
to
have_field
(
'project_snippet_description'
)
expect
(
collapsed
).
not_to
be_visible
expect
(
page
).
to
have_content
(
title
)
expect
(
page
).
to
have_content
(
file_content
)
page
.
within
(
'.snippet-header .description'
)
do
expect
(
page
).
to
have_content
(
description
)
expect
(
page
).
to
have_selector
(
'strong'
)
end
end
it
'creates a new snippet'
do
fill_form
click_button
(
'Create snippet'
)
wait_for_requests
it
'uploads a file when dragging into textarea'
do
fill_form
dropzone_file
Rails
.
root
.
join
(
'spec'
,
'fixtures'
,
'banana_sample.gif'
)
expect
(
page
).
to
have_content
(
'My Snippet Title'
)
expect
(
page
).
to
have_content
(
'Hello World!'
)
page
.
within
(
'.snippet-header .description'
)
do
expect
(
page
).
to
have_content
(
'My Snippet Description'
)
expect
(
page
).
to
have_selector
(
'strong'
)
end
end
expect
(
page
.
find_field
(
'project_snippet_description'
).
value
).
to
have_content
(
'banana_sample'
)
it
'uploads a file when dragging into textarea'
do
fill_form
dropzone_file
Rails
.
root
.
join
(
'spec'
,
'fixtures'
,
'banana_sample.gif'
)
click_button
(
'Create snippet'
)
wait_for_requests
expect
(
page
.
find_field
(
"project_snippet_description"
).
value
).
to
have_content
(
'banana_sample'
)
link
=
find
(
'a.no-attachment-icon img[alt="banana_sample"]'
)[
'src'
]
expect
(
link
).
to
match
(
%r{/
#{
Regexp
.
escape
(
project
.
full_path
)
}
/uploads/
\h
{32}/banana_sample
\.
gif
\z
}
)
end
click_button
(
'Create snippet'
)
wait_for_requests
it
'displays validation errors'
do
fill_in
'project_snippet_title'
,
with:
title
click_button
(
'Create snippet'
)
wait_for_requests
link
=
find
(
'a.no-attachment-icon img[alt="banana_sample"]'
)[
'src'
]
expect
(
link
).
to
match
(
%r{/
#{
Regexp
.
escape
(
project
.
full_path
)
}
/uploads/
\h
{32}/banana_sample
\.
gif
\z
}
)
end
expect
(
page
).
to
have_selector
(
'#error_explanation'
)
end
it
'creates a snippet when all required fields are filled in after validation failing'
do
fill_in
'project_snippet_title'
,
with:
'My Snippet Title'
click_button
(
'Create snippet'
)
context
'when the git operation fails'
do
let
(
:error
)
{
'Error creating the snippet'
}
expect
(
page
).
to
have_selector
(
'#error_explanation'
)
before
do
allow_next_instance_of
(
Snippets
::
CreateService
)
do
|
instance
|
allow
(
instance
).
to
receive
(
:create_commit
).
and_raise
(
StandardError
,
error
)
end
fill_form
dropzone_file
Rails
.
root
.
join
(
'spec'
,
'fixtures'
,
'banana_sample.gif'
)
find
(
"input[value='Create snippet']"
).
send_keys
(
:return
)
click_button
(
'Create snippet'
)
wait_for_requests
expect
(
page
).
to
have_content
(
'My Snippet Title'
)
expect
(
page
).
to
have_content
(
'Hello World!'
)
page
.
within
(
'.snippet-header .description'
)
do
expect
(
page
).
to
have_content
(
'My Snippet Description'
)
expect
(
page
).
to
have_selector
(
'strong'
)
end
link
=
find
(
'a.no-attachment-icon img[alt="banana_sample"]'
)[
'src'
]
expect
(
link
).
to
match
(
%r{/
#{
Regexp
.
escape
(
project
.
full_path
)
}
/uploads/
\h
{32}/banana_sample
\.
gif
\z
}
)
end
context
'when the git operation fails'
do
let
(
:error
)
{
'Error creating the snippet'
}
before
do
allow_next_instance_of
(
Snippets
::
CreateService
)
do
|
instance
|
allow
(
instance
).
to
receive
(
:create_commit
).
and_raise
(
StandardError
,
error
)
end
fill_form
click_button
(
'Create snippet'
)
wait_for_requests
end
it
'displays the error'
do
expect
(
page
).
to
have_content
(
error
)
end
it
'renders new page'
do
expect
(
page
).
to
have_content
(
'New Snippet'
)
end
end
end
context
'when a user is not authenticated'
do
before
do
stub_feature_flags
(
snippets_vue:
false
)
end
it
'shows a public snippet on the index page but not the New snippet button'
do
snippet
=
create
(
:project_snippet
,
:public
,
:repository
,
project:
project
)
visit
project_snippets_path
(
project
)
expect
(
page
).
to
have_content
(
snippet
.
title
)
expect
(
page
).
not_to
have_content
(
'New snippet'
)
it
'renders the new page and displays the error'
do
expect
(
page
).
to
have_content
(
error
)
expect
(
page
).
to
have_content
(
'New Snippet'
)
end
end
end
RSpec
.
describe
'Projects > Snippets > Create Snippet'
,
:js
do
include
DropzoneHelper
let_it_be
(
:user
)
{
create
(
:user
)
}
let_it_be
(
:project
)
{
create
(
:project
,
:public
)
}
it_behaves_like
"snippet editor"
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