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
d550211e
Commit
d550211e
authored
May 07, 2018
by
blackst0ne
Committed by
Robert Speicher
May 07, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace the `project/builds/artifacts.feature` spinach test with an rspec analog
parent
f9fcd2b4
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
159 additions
and
344 deletions
+159
-344
changelogs/unreleased/blackst0ne-replace-spinach-project-builds-artifacts-feature.yml
...t0ne-replace-spinach-project-builds-artifacts-feature.yml
+5
-0
features/project/builds/artifacts.feature
features/project/builds/artifacts.feature
+0
-65
features/steps/project/builds/artifacts.rb
features/steps/project/builds/artifacts.rb
+0
-98
features/steps/shared/builds.rb
features/steps/shared/builds.rb
+0
-53
spec/features/projects/artifacts/browse_spec.rb
spec/features/projects/artifacts/browse_spec.rb
+0
-67
spec/features/projects/artifacts/download_spec.rb
spec/features/projects/artifacts/download_spec.rb
+0
-61
spec/features/projects/artifacts/user_browses_artifacts_spec.rb
...eatures/projects/artifacts/user_browses_artifacts_spec.rb
+110
-0
spec/features/projects/artifacts/user_downloads_artifacts_spec.rb
...tures/projects/artifacts/user_downloads_artifacts_spec.rb
+44
-0
No files found.
changelogs/unreleased/blackst0ne-replace-spinach-project-builds-artifacts-feature.yml
0 → 100644
View file @
d550211e
---
title
:
'
Replace
the
`project/builds/artifacts.feature`
spinach
test
with
an
rspec
analog'
merge_request
:
18729
author
:
'
@blackst0ne'
type
:
other
features/project/builds/artifacts.feature
deleted
100644 → 0
View file @
f9fcd2b4
Feature
:
Project Builds Artifacts
Background
:
Given
I sign in as a user
And
I own a project
And
project has CI enabled
And
project has a recent build
Scenario
:
I
download build artifacts
Given
recent build has artifacts available
When
I visit recent build details page
And
I click artifacts download button
Then
download of build artifacts archive starts
Scenario
:
I
browse build artifacts
Given
recent build has artifacts available
And
recent build has artifacts metadata available
When
I visit recent build details page
And
I click artifacts browse button
Then
I should see content of artifacts archive
And
I should see the build header
Scenario
:
I
browse subdirectory of build artifacts
Given
recent build has artifacts available
And
recent build has artifacts metadata available
When
I visit recent build details page
And
I click artifacts browse button
And
I click link to subdirectory within build artifacts
Then
I should see content of subdirectory within artifacts archive
And
I should see the directory name in the breadcrumb
Scenario
:
I
browse directory with UTF-8 characters in name
Given
recent build has artifacts available
And
recent build has artifacts metadata available
And
recent build artifacts contain directory with UTF-8 characters
When
I visit recent build details page
And
I click artifacts browse button
And
I navigate to directory with UTF-8 characters in name
Then
I should see content of directory with UTF-8 characters in name
Scenario
:
I
try to browse directory with invalid UTF-8 characters in name
Given
recent build has artifacts available
And
recent build has artifacts metadata available
And
recent build artifacts contain directory with invalid UTF-8 characters
When
I visit recent build details page
And
I click artifacts browse button
And
I navigate to parent directory of directory with invalid name
Then
I should not see directory with invalid name on the list
@javascript
Scenario
:
I
download a single file from build artifacts
Given
recent build has artifacts available
And
recent build has artifacts metadata available
When
I visit recent build details page
And
I click artifacts browse button
And
I click a link to file within build artifacts
Then
I see a download link
@javascript
Scenario
:
I
click on a row in an artifacts table
Given
recent build has artifacts available
And
recent build has artifacts metadata available
When
I visit recent build details page
And
I click artifacts browse button
And
I click a first row within build artifacts table
Then
page with a coresponding path is loading
features/steps/project/builds/artifacts.rb
deleted
100644 → 0
View file @
f9fcd2b4
class
Spinach::Features::ProjectBuildsArtifacts
<
Spinach
::
FeatureSteps
include
SharedAuthentication
include
SharedProject
include
SharedBuilds
include
RepoHelpers
include
WaitForRequests
step
'I click artifacts download button'
do
click_link
'Download'
end
step
'I click artifacts browse button'
do
click_link
'Browse'
expect
(
page
).
not_to
have_selector
(
'.build-sidebar'
)
end
step
'I should see content of artifacts archive'
do
page
.
within
(
'.tree-table'
)
do
expect
(
page
).
to
have_no_content
'..'
expect
(
page
).
to
have_content
'other_artifacts_0.1.2'
expect
(
page
).
to
have_content
'ci_artifacts.txt'
expect
(
page
).
to
have_content
'rails_sample.jpg'
end
end
step
'I should see the build header'
do
page
.
within
(
'.build-header'
)
do
expect
(
page
).
to
have_content
"Job #
#{
@build
.
id
}
in pipeline #
#{
@pipeline
.
id
}
for
#{
@pipeline
.
short_sha
}
"
end
end
step
'I click link to subdirectory within build artifacts'
do
page
.
within
(
'.tree-table'
)
{
click_link
'other_artifacts_0.1.2'
}
end
step
'I should see content of subdirectory within artifacts archive'
do
page
.
within
(
'.tree-table'
)
do
expect
(
page
).
to
have_content
'..'
expect
(
page
).
to
have_content
'another-subdirectory'
expect
(
page
).
to
have_content
'doc_sample.txt'
end
end
step
'I should see the directory name in the breadcrumb'
do
page
.
within
(
'.repo-breadcrumb'
)
do
expect
(
page
).
to
have_content
'other_artifacts_0.1.2'
end
end
step
'recent build artifacts contain directory with UTF-8 characters'
do
# metadata fixture contains relevant directory
end
step
'I navigate to directory with UTF-8 characters in name'
do
page
.
within
(
'.tree-table'
)
{
click_link
'tests_encoding'
}
page
.
within
(
'.tree-table'
)
{
click_link
'utf8 test dir ✓'
}
end
step
'I should see content of directory with UTF-8 characters in name'
do
page
.
within
(
'.tree-table'
)
do
expect
(
page
).
to
have_content
'..'
expect
(
page
).
to
have_content
'regular_file_2'
end
end
step
'recent build artifacts contain directory with invalid UTF-8 characters'
do
# metadata fixture contains relevant directory
end
step
'I navigate to parent directory of directory with invalid name'
do
page
.
within
(
'.tree-table'
)
{
click_link
'tests_encoding'
}
end
step
'I should not see directory with invalid name on the list'
do
page
.
within
(
'.tree-table'
)
do
expect
(
page
).
to
have_no_content
(
'non-utf8-dir'
)
end
end
step
'I click a link to file within build artifacts'
do
page
.
within
(
'.tree-table'
)
{
find_link
(
'ci_artifacts.txt'
).
click
}
wait_for_requests
end
step
'I see a download link'
do
expect
(
page
).
to
have_link
'download it'
end
step
'I click a first row within build artifacts table'
do
row
=
first
(
'tr[data-link]'
)
@row_path
=
row
[
'data-link'
]
row
.
click
end
step
'page with a coresponding path is loading'
do
expect
(
current_path
).
to
eq
@row_path
end
end
features/steps/shared/builds.rb
deleted
100644 → 0
View file @
f9fcd2b4
module
SharedBuilds
include
Spinach
::
DSL
step
'project has CI enabled'
do
@project
.
enable_ci
end
step
'project has coverage enabled'
do
@project
.
update_attribute
(
:build_coverage_regex
,
/Coverage (\d+)%/
)
end
step
'project has a recent build'
do
@pipeline
=
create
(
:ci_empty_pipeline
,
project:
@project
,
sha:
@project
.
commit
.
sha
,
ref:
'master'
)
@build
=
create
(
:ci_build
,
:running
,
:coverage
,
:trace_artifact
,
pipeline:
@pipeline
)
end
step
'recent build is successful'
do
@build
.
success
end
step
'recent build failed'
do
@build
.
drop
end
step
'project has another build that is running'
do
create
(
:ci_build
,
pipeline:
@pipeline
,
name:
'second build'
,
status_event:
'run'
)
end
step
'I visit recent build details page'
do
visit
project_job_path
(
@project
,
@build
)
end
step
'recent build has artifacts available'
do
artifacts
=
Rails
.
root
+
'spec/fixtures/ci_build_artifacts.zip'
archive
=
fixture_file_upload
(
artifacts
,
'application/zip'
)
@build
.
update_attributes
(
legacy_artifacts_file:
archive
)
end
step
'recent build has artifacts metadata available'
do
metadata
=
Rails
.
root
+
'spec/fixtures/ci_build_artifacts_metadata.gz'
gzip
=
fixture_file_upload
(
metadata
,
'application/x-gzip'
)
@build
.
update_attributes
(
legacy_artifacts_metadata:
gzip
)
end
step
'recent build has a build trace'
do
@build
.
trace
.
set
(
'job trace'
)
end
step
'download of build artifacts archive starts'
do
expect
(
page
.
response_headers
[
'Content-Type'
]).
to
eq
'application/zip'
expect
(
page
.
response_headers
[
'Content-Transfer-Encoding'
]).
to
eq
'binary'
end
end
spec/features/projects/artifacts/browse_spec.rb
deleted
100644 → 0
View file @
f9fcd2b4
require
'spec_helper'
feature
'Browse artifact'
,
:js
do
let
(
:project
)
{
create
(
:project
,
:public
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
project:
project
)
}
let
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
pipeline:
pipeline
)
}
let
(
:browse_url
)
do
browse_path
(
'other_artifacts_0.1.2'
)
end
def
browse_path
(
path
)
browse_project_job_artifacts_path
(
project
,
job
,
path
)
end
context
'when visiting old URL'
do
before
do
visit
browse_url
.
sub
(
'/-/jobs'
,
'/builds'
)
end
it
"redirects to new URL"
do
expect
(
page
.
current_path
).
to
eq
(
browse_url
)
end
end
context
'when browsing a directory with an text file'
do
let
(
:txt_entry
)
{
job
.
artifacts_metadata_entry
(
'other_artifacts_0.1.2/doc_sample.txt'
)
}
before
do
allow
(
Gitlab
.
config
.
pages
).
to
receive
(
:enabled
).
and_return
(
true
)
allow
(
Gitlab
.
config
.
pages
).
to
receive
(
:artifacts_server
).
and_return
(
true
)
end
context
'when the project is public'
do
it
"shows external link icon and styles"
do
visit
browse_url
link
=
first
(
'.tree-item-file-external-link'
)
expect
(
page
).
to
have_link
(
'doc_sample.txt'
,
href:
file_project_job_artifacts_path
(
project
,
job
,
path:
txt_entry
.
blob
.
path
))
expect
(
link
[
:target
]).
to
eq
(
'_blank'
)
expect
(
link
[
:rel
]).
to
include
(
'noopener'
)
expect
(
link
[
:rel
]).
to
include
(
'noreferrer'
)
expect
(
page
).
to
have_selector
(
'.js-artifact-tree-external-icon'
)
end
end
context
'when the project is private'
do
let!
(
:private_project
)
{
create
(
:project
,
:private
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
project:
private_project
)
}
let
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
pipeline:
pipeline
)
}
let
(
:user
)
{
create
(
:user
)
}
before
do
private_project
.
add_developer
(
user
)
sign_in
(
user
)
end
it
'shows internal link styles'
do
visit
browse_project_job_artifacts_path
(
private_project
,
job
,
'other_artifacts_0.1.2'
)
expect
(
page
).
to
have_link
(
'doc_sample.txt'
)
expect
(
page
).
not_to
have_selector
(
'.js-artifact-tree-external-icon'
)
end
end
end
end
spec/features/projects/artifacts/download_spec.rb
deleted
100644 → 0
View file @
f9fcd2b4
require
'spec_helper'
feature
'Download artifact'
do
let
(
:project
)
{
create
(
:project
,
:public
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status: :success
,
project:
project
)
}
let
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
:success
,
pipeline:
pipeline
)
}
shared_examples
'downloading'
do
it
'downloads the zip'
do
expect
(
page
.
response_headers
[
'Content-Disposition'
])
.
to
eq
(
%Q{attachment; filename="
#{
job
.
artifacts_file
.
filename
}
"}
)
# Check the content does match, but don't print this as error message
expect
(
page
.
source
.
b
==
job
.
artifacts_file
.
file
.
read
.
b
)
end
end
context
'when downloading'
do
before
do
visit
download_url
end
context
'via job id'
do
let
(
:download_url
)
do
download_project_job_artifacts_path
(
project
,
job
)
end
it_behaves_like
'downloading'
end
context
'via branch name and job name'
do
let
(
:download_url
)
do
latest_succeeded_project_artifacts_path
(
project
,
"
#{
pipeline
.
ref
}
/download"
,
job:
job
.
name
)
end
it_behaves_like
'downloading'
end
end
context
'when visiting old URL'
do
before
do
visit
download_url
.
sub
(
'/-/jobs'
,
'/builds'
)
end
context
'via job id'
do
let
(
:download_url
)
do
download_project_job_artifacts_path
(
project
,
job
)
end
it_behaves_like
'downloading'
end
context
'via branch name and job name'
do
let
(
:download_url
)
do
latest_succeeded_project_artifacts_path
(
project
,
"
#{
pipeline
.
ref
}
/download"
,
job:
job
.
name
)
end
it_behaves_like
'downloading'
end
end
end
spec/features/projects/artifacts/user_browses_artifacts_spec.rb
0 → 100644
View file @
d550211e
require
"spec_helper"
describe
"User browses artifacts"
do
let
(
:project
)
{
create
(
:project
,
:public
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
project:
project
)
}
let
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
pipeline:
pipeline
)
}
let
(
:browse_url
)
{
browse_project_job_artifacts_path
(
project
,
job
,
"other_artifacts_0.1.2"
)
}
context
"when visiting old URL"
do
it
"redirects to new URL"
do
visit
(
browse_url
.
sub
(
"/-/jobs"
,
"/builds"
))
expect
(
page
.
current_path
).
to
eq
(
browse_url
)
end
end
context
"when browsing artifacts root directory"
do
before
do
visit
(
browse_project_job_artifacts_path
(
project
,
job
))
end
it
"shows artifacts"
do
expect
(
page
).
not_to
have_selector
(
".build-sidebar"
)
page
.
within
(
".tree-table"
)
do
expect
(
page
).
to
have_no_content
(
".."
)
.
and
have_content
(
"other_artifacts_0.1.2"
)
.
and
have_content
(
"ci_artifacts.txt"
)
.
and
have_content
(
"rails_sample.jpg"
)
end
page
.
within
(
".build-header"
)
do
expect
(
page
).
to
have_content
(
"Job #
#{
job
.
id
}
in pipeline #
#{
pipeline
.
id
}
for
#{
pipeline
.
short_sha
}
"
)
end
end
it
"shows an artifact"
do
click_link
(
"ci_artifacts.txt"
)
expect
(
page
).
to
have_link
(
"download it"
)
end
end
context
"when browsing a directory with UTF-8 characters in its name"
do
before
do
visit
(
browse_project_job_artifacts_path
(
project
,
job
))
end
it
"shows correct content"
,
:js
do
page
.
within
(
".tree-table"
)
do
click_link
(
"tests_encoding"
)
expect
(
page
).
to
have_no_content
(
"non-utf8-dir"
)
click_link
(
"utf8 test dir ✓"
)
expect
(
page
).
to
have_content
(
".."
).
and
have_content
(
"regular_file_2"
)
end
end
end
context
"when browsing a directory with a text file"
do
let
(
:txt_entry
)
{
job
.
artifacts_metadata_entry
(
"other_artifacts_0.1.2/doc_sample.txt"
)
}
before
do
allow
(
Gitlab
.
config
.
pages
).
to
receive
(
:enabled
).
and_return
(
true
)
allow
(
Gitlab
.
config
.
pages
).
to
receive
(
:artifacts_server
).
and_return
(
true
)
end
context
"when the project is public"
do
before
do
visit
(
browse_url
)
end
it
"shows correct content"
do
link
=
first
(
".tree-item-file-external-link"
)
expect
(
link
[
:target
]).
to
eq
(
"_blank"
)
expect
(
link
[
:rel
]).
to
include
(
"noopener"
).
and
include
(
"noreferrer"
)
expect
(
page
).
to
have_link
(
"doc_sample.txt"
,
href:
file_project_job_artifacts_path
(
project
,
job
,
path:
txt_entry
.
blob
.
path
))
.
and
have_selector
(
".js-artifact-tree-external-icon"
)
page
.
within
(
".tree-table"
)
do
expect
(
page
).
to
have_content
(
".."
).
and
have_content
(
"another-subdirectory"
)
end
page
.
within
(
".repo-breadcrumb"
)
do
expect
(
page
).
to
have_content
(
"other_artifacts_0.1.2"
)
end
end
end
context
"when the project is private"
do
let!
(
:private_project
)
{
create
(
:project
,
:private
)
}
let
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
project:
private_project
)
}
let
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
pipeline:
pipeline
)
}
let
(
:user
)
{
create
(
:user
)
}
before
do
private_project
.
add_developer
(
user
)
sign_in
(
user
)
visit
(
browse_project_job_artifacts_path
(
private_project
,
job
,
"other_artifacts_0.1.2"
))
end
it
{
expect
(
page
).
to
have_link
(
"doc_sample.txt"
).
and
have_no_selector
(
".js-artifact-tree-external-icon"
)
}
end
end
end
spec/features/projects/artifacts/user_downloads_artifacts_spec.rb
0 → 100644
View file @
d550211e
require
"spec_helper"
describe
"User downloads artifacts"
do
set
(
:project
)
{
create
(
:project
,
:public
)
}
set
(
:pipeline
)
{
create
(
:ci_empty_pipeline
,
status: :success
,
project:
project
)
}
set
(
:job
)
{
create
(
:ci_build
,
:artifacts
,
:success
,
pipeline:
pipeline
)
}
shared_examples
"downloading"
do
it
"downloads the zip"
do
expect
(
page
.
response_headers
[
"Content-Disposition"
]).
to
eq
(
%Q{attachment; filename="
#{
job
.
artifacts_file
.
filename
}
"}
)
expect
(
page
.
response_headers
[
'Content-Transfer-Encoding'
]).
to
eq
(
"binary"
)
expect
(
page
.
response_headers
[
'Content-Type'
]).
to
eq
(
"application/zip"
)
expect
(
page
.
source
.
b
).
to
eq
(
job
.
artifacts_file
.
file
.
read
.
b
)
end
end
context
"when downloading"
do
before
do
visit
(
url
)
end
context
"via job id"
do
set
(
:url
)
{
download_project_job_artifacts_path
(
project
,
job
)
}
it_behaves_like
"downloading"
end
context
"via branch name and job name"
do
set
(
:url
)
{
latest_succeeded_project_artifacts_path
(
project
,
"
#{
pipeline
.
ref
}
/download"
,
job:
job
.
name
)
}
it_behaves_like
"downloading"
end
context
"via clicking the `Download` button"
do
set
(
:url
)
{
project_job_path
(
project
,
job
)
}
before
do
click_link
(
"Download"
)
end
it_behaves_like
"downloading"
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