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
b2b4f262
Commit
b2b4f262
authored
Dec 03, 2017
by
Kamil Trzcinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First round of tests
parent
c63641ea
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
68 additions
and
221 deletions
+68
-221
app/controllers/projects/clusters/gcp_controller.rb
app/controllers/projects/clusters/gcp_controller.rb
+0
-8
app/controllers/projects/clusters_controller.rb
app/controllers/projects/clusters_controller.rb
+1
-1
app/views/layouts/nav/sidebar/_project.html.haml
app/views/layouts/nav/sidebar/_project.html.haml
+3
-3
spec/controllers/projects/clusters_controller_spec.rb
spec/controllers/projects/clusters_controller_spec.rb
+64
-209
No files found.
app/controllers/projects/clusters/gcp_controller.rb
View file @
b2b4f262
...
...
@@ -50,14 +50,6 @@ class Projects::Clusters::GcpController < Projects::ApplicationController
)
end
def
update_params
params
.
require
(
:cluster
).
permit
(
:enabled
,
platform_kubernetes_attributes:
[
:namespace
])
end
def
authorize_google_api
unless
GoogleApi
::
CloudPlatform
::
Client
.
new
(
token_in_session
,
nil
)
.
validate_token
(
expires_at_in_session
)
...
...
app/controllers/projects/clusters_controller.rb
View file @
b2b4f262
app/views/layouts/nav/sidebar/_project.html.haml
View file @
b2b4f262
...
...
@@ -146,7 +146,7 @@
=
number_with_delimiter
(
@project
.
open_merge_requests_count
)
-
if
project_nav_tab?
:pipelines
=
nav_link
(
controller:
[
:pipelines
,
:builds
,
:jobs
,
:pipeline_schedules
,
:environments
,
:artifacts
,
:clusters
])
do
=
nav_link
(
controller:
[
:pipelines
,
:builds
,
:jobs
,
:pipeline_schedules
,
:environments
,
:artifacts
,
:clusters
,
:user
,
:gcp
])
do
=
link_to
project_pipelines_path
(
@project
),
class:
'shortcuts-pipelines'
do
.nav-icon-container
=
sprite_icon
(
'pipeline'
)
...
...
@@ -154,7 +154,7 @@
CI / CD
%ul
.sidebar-sub-level-items
=
nav_link
(
controller:
[
:pipelines
,
:builds
,
:jobs
,
:pipeline_schedules
,
:environments
,
:artifacts
,
:clusters
,
:
kubernetes
,
:gcp
],
html_options:
{
class:
"fly-out-top-item"
}
)
do
=
nav_link
(
controller:
[
:pipelines
,
:builds
,
:jobs
,
:pipeline_schedules
,
:environments
,
:artifacts
,
:clusters
,
:
user
,
:gcp
],
html_options:
{
class:
"fly-out-top-item"
}
)
do
=
link_to
project_pipelines_path
(
@project
)
do
%strong
.fly-out-top-item-name
#{
_
(
'CI / CD'
)
}
...
...
@@ -184,7 +184,7 @@
Environments
-
if
project_nav_tab?
:clusters
=
nav_link
(
controller:
[
:clusters
,
:
kubernetes
,
:gcp
])
do
=
nav_link
(
controller:
[
:clusters
,
:
user
,
:gcp
])
do
=
link_to
project_clusters_path
(
@project
),
title:
'Cluster'
,
class:
'shortcuts-cluster'
do
%span
Cluster
...
...
spec/controllers/projects/clusters_controller_spec.rb
View file @
b2b4f262
...
...
@@ -4,6 +4,8 @@ describe Projects::ClustersController do
include
AccessMatchersForController
include
GoogleApi
::
CloudPlatformHelpers
set
(
:project
)
{
create
(
:project
)
}
describe
'GET index'
do
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
...
...
@@ -14,22 +16,20 @@ describe Projects::ClustersController do
end
context
'when project has a cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
it
{
expect
(
go
).
to
redirect_to
(
project_cluster_path
(
project
,
project
.
cluster
))
}
end
context
'when project does not have a cluster'
do
let
(
:
project
)
{
create
(
:project
)
}
let
(
:
cluster
)
{
create
(
:cluster
,
:provided_by_gcp
)
}
it
{
expect
(
go
).
to
redirect_to
(
new_project_cluster_path
(
project
))
}
end
end
describe
'security'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
...
...
@@ -46,8 +46,8 @@ describe Projects::ClustersController do
end
end
describe
'GET
login
'
do
let
(
:
project
)
{
create
(
:project
)
}
describe
'GET
status
'
do
let
(
:
cluster
)
{
create
(
:cluster
,
:providing_by_gcp
,
projects:
[
project
]
)
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
...
...
@@ -57,35 +57,11 @@ describe Projects::ClustersController do
sign_in
(
user
)
end
context
'when omniauth has been configured'
do
let
(
:key
)
{
'secere-key'
}
let
(
:session_key_for_redirect_uri
)
do
GoogleApi
::
CloudPlatform
::
Client
.
session_key_for_redirect_uri
(
key
)
end
before
do
allow
(
SecureRandom
).
to
receive
(
:hex
).
and_return
(
key
)
end
it
'has authorize_url'
do
go
expect
(
assigns
(
:authorize_url
)).
to
include
(
key
)
expect
(
session
[
session_key_for_redirect_uri
]).
to
eq
(
providers_gcp_new_project_clusters_url
(
project
))
end
end
context
'when omniauth has not configured'
do
before
do
stub_omniauth_setting
(
providers:
[])
end
it
'does not have authorize_url'
do
it
"responds with matching schema"
do
go
expect
(
assigns
(
:authorize_url
)).
to
be_nil
e
nd
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
e
xpect
(
response
).
to
match_response_schema
(
'cluster_status'
)
end
end
...
...
@@ -101,20 +77,15 @@ describe Projects::ClustersController do
end
def
go
get
:login
,
namespace_id:
project
.
namespace
,
project_id:
project
end
end
shared_examples
'requires to login'
do
it
'redirects to create a cluster'
do
subject
expect
(
response
).
to
redirect_to
(
login_project_clusters_path
(
project
))
get
:status
,
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
cluster
,
format: :json
end
end
describe
'GET
new_gcp
'
do
let
(
:
project
)
{
create
(
:project
)
}
describe
'GET
show
'
do
let
(
:
cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
]
)
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
...
...
@@ -124,28 +95,11 @@ describe Projects::ClustersController do
sign_in
(
user
)
end
context
'when access token is valid'
do
before
do
stub_google_api_validate_token
end
it
'has new object'
do
it
"renders view"
do
go
expect
(
assigns
(
:cluster
)).
to
be_an_instance_of
(
Clusters
::
Cluster
)
end
end
context
'when access token is expired'
do
before
do
stub_google_api_expired_token
end
it
{
expect
(
go
).
to
redirect_to
(
login_project_clusters_path
(
project
))
}
end
context
'when access token is not stored in session'
do
it
{
expect
(
go
).
to
redirect_to
(
login_project_clusters_path
(
project
))
}
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
assigns
(
:cluster
)).
to
eq
(
cluster
)
end
end
...
...
@@ -161,24 +115,15 @@ describe Projects::ClustersController do
end
def
go
get
:new_gcp
,
namespace_id:
project
.
namespace
,
project_id:
project
get
:show
,
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
cluster
end
end
describe
'POST create'
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:params
)
do
{
cluster:
{
name:
'new-cluster'
,
provider_type: :gcp
,
provider_gcp_attributes:
{
gcp_project_id:
'111'
}
}
}
end
describe
'PUT update'
do
context
'Managed'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
...
...
@@ -188,135 +133,39 @@ describe Projects::ClustersController do
sign_in
(
user
)
end
context
'when access token is valid'
do
before
do
stub_google_api_validate_token
end
context
'when creates a cluster on gke'
do
it
'creates a new cluster'
do
expect
(
ClusterProvisionWorker
).
to
receive
(
:perform_async
)
expect
{
go
}.
to
change
{
Clusters
::
Cluster
.
count
}
expect
(
response
).
to
redirect_to
(
project_cluster_path
(
project
,
project
.
cluster
))
end
end
end
context
'when access token is expired'
do
before
do
stub_google_api_expired_token
end
it
'redirects to login page'
do
expect
(
go
).
to
redirect_to
(
login_project_clusters_path
(
project
))
end
end
context
'when access token is not stored in session'
do
it
'redirects to login page'
do
expect
(
go
).
to
redirect_to
(
login_project_clusters_path
(
project
))
end
end
end
describe
'security'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
end
def
go
post
:create
,
params
.
merge
(
namespace_id:
project
.
namespace
,
project_id:
project
)
end
end
describe
'GET status'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:providing_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
before
do
project
.
add_master
(
user
)
sign_in
(
user
)
context
'when update enabled'
do
let
(
:params
)
do
{
cluster:
{
enabled:
false
}
}
end
it
"responds with matching schema
"
do
it
"updates and redirects back to show page
"
do
go
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
response
).
to
match_response_schema
(
'cluster_status'
)
end
end
describe
'security'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
end
def
go
get
:status
,
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
cluster
,
format: :json
end
cluster
.
reload
expect
(
response
).
to
redirect_to
(
project_cluster_path
(
project
,
project
.
cluster
))
expect
(
flash
[
:notice
]).
to
eq
(
'Cluster was successfully updated.'
)
expect
(
cluster
.
enabled
).
to
be_falsey
end
describe
'GET show'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
before
do
project
.
add_master
(
user
)
sign_in
(
user
)
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:providing_by_gcp
,
projects:
[
project
])
}
it
"renders view
"
do
it
"rejects changes
"
do
go
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
assigns
(
:cluster
)).
to
eq
(
cluster
)
expect
(
response
).
to
render_template
(
:show
)
expect
(
cluster
.
enabled
).
to
be_truthy
end
end
describe
'security'
do
it
{
expect
{
go
}.
to
be_allowed_for
(
:admin
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:owner
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_allowed_for
(
:master
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:developer
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:reporter
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:guest
).
of
(
project
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:user
)
}
it
{
expect
{
go
}.
to
be_denied_for
(
:external
)
}
end
def
go
get
:show
,
namespace_id:
project
.
namespace
,
project_id:
project
,
id:
cluster
end
end
describe
'PUT update'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
describe
'functionality'
do
context
'User'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_user
,
projects:
[
project
])
}
let
(
:user
)
{
create
(
:user
)
}
before
do
...
...
@@ -324,10 +173,15 @@ describe Projects::ClustersController do
sign_in
(
user
)
end
context
'when
update enabled
'
do
context
'when
changing parameters
'
do
let
(
:params
)
do
{
cluster:
{
enabled:
false
}
cluster:
{
enabled:
false
,
name:
'my-new-cluster-name'
,
platform_kubernetes_attributes:
[
namespace:
'my-namespace'
]
}
}
end
...
...
@@ -338,10 +192,12 @@ describe Projects::ClustersController do
expect
(
response
).
to
redirect_to
(
project_cluster_path
(
project
,
project
.
cluster
))
expect
(
flash
[
:notice
]).
to
eq
(
'Cluster was successfully updated.'
)
expect
(
cluster
.
enabled
).
to
be_falsey
expect
(
cluster
.
name
).
to
eq
(
'my-new-cluster-name'
)
expect
(
cluster
.
platform_kubernetes
.
namespace
).
to
eq
(
'my-namespace'
)
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:pro
ject
,
:providing_by_gcp
)
}
let
(
:cluster
)
{
create
(
:cluster
,
:pro
viding_by_gcp
,
projects:
[
project
]
)
}
it
"rejects changes"
do
go
...
...
@@ -379,8 +235,7 @@ describe Projects::ClustersController do
end
describe
'delete update'
do
let
(
:cluster
)
{
create
(
:cluster
,
:project
,
:provided_by_gcp
)
}
let
(
:project
)
{
cluster
.
project
}
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
describe
'functionality'
do
let
(
:user
)
{
create
(
:user
)
}
...
...
@@ -401,7 +256,7 @@ describe Projects::ClustersController do
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:pro
ject
,
:providing_by_gcp
)
}
let
(
:cluster
)
{
create
(
:cluster
,
:pro
viding_by_gcp
,
projects:
[
project
]
)
}
it
"destroys and redirects back to clusters list"
do
expect
{
go
}
...
...
@@ -414,7 +269,7 @@ describe Projects::ClustersController do
end
context
'when provider is user'
do
let
(
:cluster
)
{
create
(
:cluster
,
:pro
ject
,
:provided_by_user
)
}
let
(
:cluster
)
{
create
(
:cluster
,
:pro
vided_by_user
,
projects:
[
project
]
)
}
it
"destroys and redirects back to clusters list"
do
expect
{
go
}
...
...
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