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
d2b8e54c
Commit
d2b8e54c
authored
Sep 13, 2020
by
Jan Provaznik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use let_it_be in requests/api/projects_spec.rb
* uses let_it_be for resources
parent
8672da3c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
43 additions
and
50 deletions
+43
-50
spec/requests/api/projects_spec.rb
spec/requests/api/projects_spec.rb
+39
-44
spec/support/shared_examples/requests/api/custom_attributes_shared_examples.rb
...xamples/requests/api/custom_attributes_shared_examples.rb
+4
-6
No files found.
spec/requests/api/projects_spec.rb
View file @
d2b8e54c
...
...
@@ -49,15 +49,15 @@ end
RSpec
.
describe
API
::
Projects
do
include
ProjectForksHelper
let
(
:user
)
{
create
(
:user
)
}
let
(
:user2
)
{
create
(
:user
)
}
let
(
:user3
)
{
create
(
:user
)
}
let
(
:admin
)
{
create
(
:admin
)
}
let
(
:project
)
{
create
(
:project
,
:repository
,
namespace:
user
.
namespace
)
}
let
(
:project2
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
(
:project_member
)
{
create
(
:project_member
,
:developer
,
user:
user3
,
project:
project
)
}
let
(
:user4
)
{
create
(
:user
,
username:
'user.with.dot'
)
}
let
(
:project3
)
do
let
_it_be
(
:user
)
{
create
(
:user
)
}
let
_it_be
(
:user2
)
{
create
(
:user
)
}
let
_it_be
(
:user3
)
{
create
(
:user
)
}
let
_it_be
(
:admin
)
{
create
(
:admin
)
}
let
_it_be
(
:project
,
reload:
true
)
{
create
(
:project
,
:repository
,
namespace:
user
.
namespace
)
}
let
_it_be
(
:project2
,
reload:
true
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
let
_it_be
(
:project_member
)
{
create
(
:project_member
,
:developer
,
user:
user3
,
project:
project
)
}
let
_it_be
(
:user4
)
{
create
(
:user
,
username:
'user.with.dot'
)
}
let
_it_be
(
:project3
,
reload:
true
)
do
create
(
:project
,
:private
,
:repository
,
...
...
@@ -71,14 +71,14 @@ RSpec.describe API::Projects do
snippets_enabled:
false
)
end
let
(
:project_member2
)
do
let
_it_be
(
:project_member2
)
do
create
(
:project_member
,
user:
user4
,
project:
project3
,
access_level:
ProjectMember
::
MAINTAINER
)
end
let
(
:project4
)
do
let
_it_be
(
:project4
,
reload:
true
)
do
create
(
:project
,
name:
'third_project'
,
path:
'third_project'
,
...
...
@@ -86,6 +86,8 @@ RSpec.describe API::Projects do
namespace:
user4
.
namespace
)
end
let
(
:user_projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
shared_context
'with language detection'
do
let
(
:ruby
)
{
create
(
:programming_language
,
name:
'Ruby'
)
}
let
(
:javascript
)
{
create
(
:programming_language
,
name:
'JavaScript'
)
}
...
...
@@ -146,14 +148,7 @@ RSpec.describe API::Projects do
end
end
let!
(
:public_project
)
{
create
(
:project
,
:public
,
name:
'public_project'
)
}
before
do
project
project2
project3
project4
end
let_it_be
(
:public_project
)
{
create
(
:project
,
:public
,
name:
'public_project'
)
}
context
'when unauthenticated'
do
it_behaves_like
'projects response'
do
...
...
@@ -171,7 +166,7 @@ RSpec.describe API::Projects do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
let
(
:projects
)
{
user_projects
}
end
it_behaves_like
'projects response without N + 1 queries'
do
...
...
@@ -257,7 +252,7 @@ RSpec.describe API::Projects do
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
statistics
=
json_response
.
fi
rst
[
'statistics'
]
statistics
=
json_response
.
fi
nd
{
|
p
|
p
[
'id'
]
==
project
.
id
}
[
'statistics'
]
expect
(
statistics
).
to
be_present
expect
(
statistics
).
to
include
(
'commit_count'
,
'storage_size'
,
'repository_size'
,
'wiki_size'
,
'lfs_objects_size'
,
'job_artifacts_size'
,
'snippets_size'
)
end
...
...
@@ -386,14 +381,14 @@ RSpec.describe API::Projects do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{
id_after:
project2
.
id
}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
.
select
{
|
p
|
p
.
id
>
project2
.
id
}
}
let
(
:projects
)
{
user_projects
.
select
{
|
p
|
p
.
id
>
project2
.
id
}
}
end
context
'regression: empty string is ignored'
do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{
id_after:
''
}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
let
(
:projects
)
{
user_projects
}
end
end
end
...
...
@@ -402,14 +397,14 @@ RSpec.describe API::Projects do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{
id_before:
project2
.
id
}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
.
select
{
|
p
|
p
.
id
<
project2
.
id
}
}
let
(
:projects
)
{
user_projects
.
select
{
|
p
|
p
.
id
<
project2
.
id
}
}
end
context
'regression: empty string is ignored'
do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{
id_before:
''
}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
let
(
:projects
)
{
user_projects
}
end
end
end
...
...
@@ -418,7 +413,7 @@ RSpec.describe API::Projects do
it_behaves_like
'projects response'
do
let
(
:filter
)
{
{
id_before:
project2
.
id
,
id_after:
public_project
.
id
}
}
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
.
select
{
|
p
|
p
.
id
<
project2
.
id
&&
p
.
id
>
public_project
.
id
}
}
let
(
:projects
)
{
user_projects
.
select
{
|
p
|
p
.
id
<
project2
.
id
&&
p
.
id
>
public_project
.
id
}
}
end
end
...
...
@@ -481,7 +476,7 @@ RSpec.describe API::Projects do
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
first
[
'id'
]).
to
eq
(
project3
.
id
)
expect
(
json_response
.
map
{
|
p
|
p
[
'id'
]
}).
to
eq
(
user_projects
.
map
(
&
:id
).
sort
.
reverse
)
end
end
...
...
@@ -501,7 +496,6 @@ RSpec.describe API::Projects do
let
(
:public_project
)
{
create
(
:project
,
:public
)
}
before
do
project_member
user3
.
update!
(
starred_projects:
[
project
,
project2
,
project3
,
public_project
])
end
...
...
@@ -642,7 +636,6 @@ RSpec.describe API::Projects do
context
'non-admin user'
do
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
it
'returns projects ordered normally'
do
get
api
(
'/projects'
,
current_user
),
params:
{
order_by:
order_by
}
...
...
@@ -650,7 +643,7 @@ RSpec.describe API::Projects do
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
map
{
|
project
|
project
[
'id'
]
}).
to
eq
(
projects
.
map
(
&
:id
)
.
reverse
)
expect
(
json_response
.
map
{
|
project
|
project
[
'id'
]
}).
to
eq
(
user_projects
.
map
(
&
:id
).
sort
.
reverse
)
end
end
end
...
...
@@ -686,7 +679,8 @@ RSpec.describe API::Projects do
context
'with keyset pagination'
do
let
(
:current_user
)
{
user
}
let
(
:projects
)
{
[
public_project
,
project
,
project2
,
project3
]
}
let
(
:first_project_id
)
{
user_projects
.
map
(
&
:id
).
min
}
let
(
:last_project_id
)
{
user_projects
.
map
(
&
:id
).
max
}
context
'headers and records'
do
let
(
:params
)
{
{
pagination:
'keyset'
,
order_by: :id
,
sort: :asc
,
per_page:
1
}
}
...
...
@@ -696,11 +690,11 @@ RSpec.describe API::Projects do
expect
(
response
.
header
).
to
include
(
'Links'
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
'pagination=keyset'
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
"id_after=
#{
public_project
.
id
}
"
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
"id_after=
#{
first_project_
id
}
"
)
expect
(
response
.
header
).
to
include
(
'Link'
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
'pagination=keyset'
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
"id_after=
#{
public_project
.
id
}
"
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
"id_after=
#{
first_project_
id
}
"
)
end
it
'contains only the first project with per_page = 1'
do
...
...
@@ -708,7 +702,7 @@ RSpec.describe API::Projects do
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
map
{
|
p
|
p
[
'id'
]
}).
to
contain_exactly
(
public_project
.
id
)
expect
(
json_response
.
map
{
|
p
|
p
[
'id'
]
}).
to
contain_exactly
(
first_project_
id
)
end
it
'still includes a link if the end has reached and there is no more data after this page'
do
...
...
@@ -752,11 +746,11 @@ RSpec.describe API::Projects do
expect
(
response
.
header
).
to
include
(
'Links'
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
'pagination=keyset'
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
"id_before=
#{
project3
.
id
}
"
)
expect
(
response
.
header
[
'Links'
]).
to
include
(
"id_before=
#{
last_project_
id
}
"
)
expect
(
response
.
header
).
to
include
(
'Link'
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
'pagination=keyset'
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
"id_before=
#{
project3
.
id
}
"
)
expect
(
response
.
header
[
'Link'
]).
to
include
(
"id_before=
#{
last_project_
id
}
"
)
end
it
'contains only the last project with per_page = 1'
do
...
...
@@ -764,7 +758,7 @@ RSpec.describe API::Projects do
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
map
{
|
p
|
p
[
'id'
]
}).
to
contain_exactly
(
project3
.
id
)
expect
(
json_response
.
map
{
|
p
|
p
[
'id'
]
}).
to
contain_exactly
(
last_project_
id
)
end
end
...
...
@@ -793,7 +787,7 @@ RSpec.describe API::Projects do
ids
+=
Gitlab
::
Json
.
parse
(
response
.
body
).
map
{
|
p
|
p
[
'id'
]
}
end
expect
(
ids
).
to
contain_exactly
(
*
projects
.
map
(
&
:id
))
expect
(
ids
).
to
contain_exactly
(
*
user_
projects
.
map
(
&
:id
))
end
end
end
...
...
@@ -814,7 +808,7 @@ RSpec.describe API::Projects do
.
to
change
{
Project
.
count
}.
by
(
1
)
expect
(
response
).
to
have_gitlab_http_status
(
:created
)
project
=
Project
.
fir
st
project
=
Project
.
la
st
expect
(
project
.
name
).
to
eq
(
'Foo Project'
)
expect
(
project
.
path
).
to
eq
(
'foo-project'
)
...
...
@@ -825,7 +819,7 @@ RSpec.describe API::Projects do
.
to
change
{
Project
.
count
}.
by
(
1
)
expect
(
response
).
to
have_gitlab_http_status
(
:created
)
project
=
Project
.
fir
st
project
=
Project
.
la
st
expect
(
project
.
name
).
to
eq
(
'foo_project'
)
expect
(
project
.
path
).
to
eq
(
'foo_project'
)
...
...
@@ -836,7 +830,7 @@ RSpec.describe API::Projects do
.
to
change
{
Project
.
count
}.
by
(
1
)
expect
(
response
).
to
have_gitlab_http_status
(
:created
)
project
=
Project
.
fir
st
project
=
Project
.
la
st
expect
(
project
.
name
).
to
eq
(
'Foo Project'
)
expect
(
project
.
path
).
to
eq
(
'path-project-Foo'
)
...
...
@@ -1985,7 +1979,8 @@ RSpec.describe API::Projects do
context
'when authenticated'
do
context
'valid request'
do
it_behaves_like
'project users response'
do
let
(
:current_user
)
{
user
}
let
(
:project
)
{
project4
}
let
(
:current_user
)
{
user4
}
end
end
...
...
@@ -2011,8 +2006,8 @@ RSpec.describe API::Projects do
get
api
(
"/projects/
#{
project
.
id
}
/users?skip_users=
#{
user
.
id
}
"
,
user
)
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
.
size
).
to
eq
(
1
)
expect
(
json_response
[
0
][
'id'
]).
to
eq
(
other_
user
.
id
)
expect
(
json_response
.
size
).
to
eq
(
2
)
expect
(
json_response
.
map
{
|
m
|
m
[
'id'
]
}).
not_to
include
(
user
.
id
)
end
end
end
...
...
spec/support/shared_examples/requests/api/custom_attributes_shared_examples.rb
View file @
d2b8e54c
...
...
@@ -14,8 +14,7 @@ RSpec.shared_examples 'custom attributes endpoints' do |attributable_name|
get
api
(
"/
#{
attributable_name
}
"
,
user
),
params:
{
custom_attributes:
{
foo:
'foo'
,
bar:
'bar'
}
}
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
.
size
).
to
be
2
expect
(
json_response
.
map
{
|
r
|
r
[
'id'
]
}).
to
contain_exactly
attributable
.
id
,
other_attributable
.
id
expect
(
json_response
.
map
{
|
r
|
r
[
'id'
]
}).
to
include
(
attributable
.
id
,
other_attributable
.
id
)
end
end
...
...
@@ -40,7 +39,7 @@ RSpec.shared_examples 'custom attributes endpoints' do |attributable_name|
get
api
(
"/
#{
attributable_name
}
"
,
user
),
params:
{
with_custom_attributes:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
.
size
).
to
be
2
expect
(
json_response
).
not_to
be_empty
expect
(
json_response
.
first
).
not_to
include
'custom_attributes'
end
end
...
...
@@ -50,16 +49,15 @@ RSpec.shared_examples 'custom attributes endpoints' do |attributable_name|
get
api
(
"/
#{
attributable_name
}
"
,
admin
)
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
.
size
).
to
be
2
expect
(
json_response
).
not_to
be_empty
expect
(
json_response
.
first
).
not_to
include
'custom_attributes'
expect
(
json_response
.
second
).
not_to
include
'custom_attributes'
end
it
'includes custom attributes if requested'
do
get
api
(
"/
#{
attributable_name
}
"
,
admin
),
params:
{
with_custom_attributes:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
json_response
.
size
).
to
be
2
expect
(
json_response
).
not_to
be_empty
attributable_response
=
json_response
.
find
{
|
r
|
r
[
'id'
]
==
attributable
.
id
}
other_attributable_response
=
json_response
.
find
{
|
r
|
r
[
'id'
]
==
other_attributable
.
id
}
...
...
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