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
01f440e7
Commit
01f440e7
authored
Aug 27, 2019
by
Alishan Ladhani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Extract shared example from feature specs
For installing applications on a project/group/instance cluster
parent
88904b2a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
241 additions
and
670 deletions
+241
-670
spec/features/admin/clusters/applications_spec.rb
spec/features/admin/clusters/applications_spec.rb
+4
-223
spec/features/clusters/installing_applications_shared_examples.rb
...tures/clusters/installing_applications_shared_examples.rb
+228
-0
spec/features/groups/clusters/applications_spec.rb
spec/features/groups/clusters/applications_spec.rb
+4
-223
spec/features/projects/clusters/applications_spec.rb
spec/features/projects/clusters/applications_spec.rb
+5
-224
No files found.
spec/features/admin/clusters/applications_spec.rb
View file @
01f440e7
# frozen_string_literal: true
require
'spec_helper'
require_relative
'../../../../spec/features/clusters/installing_applications_shared_examples'
describe
'Instance-level Cluster Applications'
,
:js
do
include
GoogleApi
::
CloudPlatformHelpers
...
...
@@ -12,229 +13,9 @@ describe 'Instance-level Cluster Applications', :js do
end
describe
'Installing applications'
do
before
do
visit
admin_cluster_path
(
cluster
)
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:providing_by_gcp
,
:instance
)
}
it
'user is unable to install applications'
do
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-row-helm'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
end
end
context
'when cluster is created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
:instance
)
}
it
'user can install applications'
do
wait_for_requests
page
.
within
(
'.js-cluster-application-row-helm'
)
do
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
be_nil
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Install'
)
end
end
context
'when user installs Helm'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-helm'
)
do
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
end
wait_for_requests
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-helm'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installed!
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Helm Tiller was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Knative'
do
before
do
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
end
context
'on an abac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
:instance
,
:rbac_disabled
)
}
it
'shows info block and not be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.rbac-notice'
)
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
eq
(
'true'
)
end
end
end
context
'on an rbac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
:instance
)
}
it
'does not show callout block and be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
not_to
have_css
(
'.rbac-notice'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
end
end
describe
'when user clicks install button'
do
def
domainname_form_value
page
.
find
(
'.js-knative-domainname'
).
value
end
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"domain.example.org"
)
click_button
'Install'
wait_for_requests
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_knative
.
make_installing!
Clusters
::
Cluster
.
last
.
application_knative
.
make_installed!
Clusters
::
Cluster
.
last
.
application_knative
.
update_attribute
(
:external_ip
,
'127.0.0.1'
)
end
end
it
'shows status transition'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Knative was successfully installed on your Kubernetes cluster'
)
expect
(
page
).
to
have_css
(
'.js-knative-save-domain-button'
),
exact_text:
'Save changes'
end
it
'can then update the domain'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
ClusterPatchAppWorker
).
to
receive
(
:perform_async
)
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"new.domain.example.org"
)
click_button
'Save changes'
wait_for_requests
expect
(
domainname_form_value
).
to
eq
(
'new.domain.example.org'
)
end
end
end
end
end
context
'when user installs Cert Manager'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
click_button
'Install'
end
end
it
'shows status transition'
do
def
email_form_value
page
.
find
(
'.js-email'
).
value
end
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
expect
(
email_form_value
).
to
eq
(
cluster
.
user
.
email
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
page
.
find
(
'.js-email'
).
set
(
"new_email@example.org"
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installing!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installed!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Cert-Manager was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Ingress'
do
context
'when user installs application: Ingress'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
wait_for_requests
end
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
# The application becomes installed but we keep waiting for external IP address
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installed!
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installed'
)
expect
(
page
).
to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
).
to
have_selector
(
'.js-ingress-ip-loading-icon'
)
# We receive the external IP address and display
Clusters
::
Cluster
.
last
.
application_ingress
.
update!
(
external_ip:
'192.168.1.100'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
expect
(
page
).
not_to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
.
find
(
'.js-endpoint'
).
value
).
to
eq
(
'192.168.1.100'
)
end
expect
(
page
).
to
have_content
(
'Ingress was successfully installed on your Kubernetes cluster'
)
end
end
end
include_examples
"installing applications on a cluster"
do
let
(
:cluster_path
)
{
admin_cluster_path
(
cluster
)
}
let
(
:cluster_factory_args
)
{
[
:instance
]
}
end
end
end
spec/features/clusters/installing_applications_shared_examples.rb
0 → 100644
View file @
01f440e7
# frozen_string_literal: true
shared_examples
"installing applications on a cluster"
do
before
do
visit
cluster_path
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:providing_by_gcp
,
*
cluster_factory_args
)
}
it
'user is unable to install applications'
do
expect
(
page
).
not_to
have_text
(
'Helm'
)
expect
(
page
).
not_to
have_text
(
'Install'
)
end
end
context
'when cluster is created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
*
cluster_factory_args
)
}
it
'user can install applications'
do
wait_for_requests
page
.
within
(
'.js-cluster-application-row-helm'
)
do
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
be_nil
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Install'
)
end
end
context
'when user installs Helm'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-helm'
)
do
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
end
wait_for_requests
end
it
'shows the status transition'
do
page
.
within
(
'.js-cluster-application-row-helm'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installed!
expect
(
page
).
not_to
have_css
(
'button'
,
exact_text:
'Install'
,
visible: :all
)
expect
(
page
).
not_to
have_css
(
'button'
,
exact_text:
'Installing'
,
visible: :all
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Helm Tiller was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Knative'
do
before
do
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
end
context
'on an abac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
:rbac_disabled
,
*
cluster_factory_args
)
}
it
'shows info block and not be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.rbac-notice'
)
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
eq
(
'true'
)
end
end
end
context
'on an rbac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
*
cluster_factory_args
)
}
it
'does not show callout block and be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
not_to
have_css
(
'p'
,
text:
'You must have an RBAC-enabled cluster'
,
visible: :all
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
end
end
describe
'when user clicks install button'
do
def
domainname_form_value
page
.
find
(
'.js-knative-domainname'
).
value
end
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"domain.example.org"
)
click_button
'Install'
wait_for_requests
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_knative
.
make_installing!
Clusters
::
Cluster
.
last
.
application_knative
.
make_installed!
Clusters
::
Cluster
.
last
.
application_knative
.
update_attribute
(
:external_ip
,
'127.0.0.1'
)
end
end
it
'shows status transition'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Knative was successfully installed on your Kubernetes cluster'
)
expect
(
page
).
to
have_css
(
'.js-knative-save-domain-button'
),
exact_text:
'Save changes'
end
it
'can then update the domain'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
ClusterPatchAppWorker
).
to
receive
(
:perform_async
)
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"new.domain.example.org"
)
click_button
'Save changes'
wait_for_requests
expect
(
domainname_form_value
).
to
eq
(
'new.domain.example.org'
)
end
end
end
end
end
context
'when user installs Cert Manager'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
click_button
'Install'
end
end
it
'shows status transition'
do
def
email_form_value
page
.
find
(
'.js-email'
).
value
end
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
expect
(
email_form_value
).
to
eq
(
cluster
.
user
.
email
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
page
.
find
(
'.js-email'
).
set
(
"new_email@example.org"
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installing!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installed!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Cert-Manager was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Ingress'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
wait_for_requests
end
end
it
'shows the status transition'
do
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
# The application becomes installed but we keep waiting for external IP address
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installed!
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installed'
)
expect
(
page
).
to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
).
to
have_selector
(
'.js-ingress-ip-loading-icon'
)
# We receive the external IP address and display
Clusters
::
Cluster
.
last
.
application_ingress
.
update!
(
external_ip:
'192.168.1.100'
)
expect
(
page
).
not_to
have_css
(
'button'
,
exact_text:
'Install'
,
visible: :all
)
expect
(
page
).
not_to
have_css
(
'button'
,
exact_text:
'Installing'
,
visible: :all
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
expect
(
page
).
not_to
have_css
(
'p'
,
text:
'The endpoint is in the process of being assigned'
,
visible: :all
)
expect
(
page
.
find
(
'.js-endpoint'
).
value
).
to
eq
(
'192.168.1.100'
)
end
expect
(
page
).
to
have_content
(
'Ingress was successfully installed on your Kubernetes cluster'
)
end
end
end
end
spec/features/groups/clusters/applications_spec.rb
View file @
01f440e7
# frozen_string_literal: true
require
'spec_helper'
require_relative
'../../../../spec/features/clusters/installing_applications_shared_examples'
describe
'Group-level Cluster Applications'
,
:js
do
include
GoogleApi
::
CloudPlatformHelpers
...
...
@@ -14,229 +15,9 @@ describe 'Group-level Cluster Applications', :js do
end
describe
'Installing applications'
do
before
do
visit
group_cluster_path
(
group
,
cluster
)
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster_for_group
,
:providing_by_gcp
,
groups:
[
group
])
}
it
'user is unable to install applications'
do
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-row-helm'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
end
end
context
'when cluster is created'
do
let
(
:cluster
)
{
create
(
:cluster_for_group
,
groups:
[
group
])
}
it
'user can install applications'
do
wait_for_requests
page
.
within
(
'.js-cluster-application-row-helm'
)
do
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
be_nil
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Install'
)
end
end
context
'when user installs Helm'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-helm'
)
do
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
end
wait_for_requests
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-helm'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installed!
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Helm Tiller was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Knative'
do
before
do
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
end
context
'on an abac cluster'
do
let
(
:cluster
)
{
create
(
:cluster_for_group
,
:rbac_disabled
,
groups:
[
group
])
}
it
'shows info block and not be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.rbac-notice'
)
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
eq
(
'true'
)
end
end
end
context
'on an rbac cluster'
do
let
(
:cluster
)
{
create
(
:cluster_for_group
,
groups:
[
group
])
}
it
'does not show callout block and be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
not_to
have_css
(
'.rbac-notice'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
end
end
describe
'when user clicks install button'
do
def
domainname_form_value
page
.
find
(
'.js-knative-domainname'
).
value
end
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"domain.example.org"
)
click_button
'Install'
wait_for_requests
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_knative
.
make_installing!
Clusters
::
Cluster
.
last
.
application_knative
.
make_installed!
Clusters
::
Cluster
.
last
.
application_knative
.
update_attribute
(
:external_ip
,
'127.0.0.1'
)
end
end
it
'shows status transition'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Knative was successfully installed on your Kubernetes cluster'
)
expect
(
page
).
to
have_css
(
'.js-knative-save-domain-button'
),
exact_text:
'Save changes'
end
it
'can then update the domain'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
ClusterPatchAppWorker
).
to
receive
(
:perform_async
)
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"new.domain.example.org"
)
click_button
'Save changes'
wait_for_requests
expect
(
domainname_form_value
).
to
eq
(
'new.domain.example.org'
)
end
end
end
end
end
context
'when user installs Cert Manager'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
click_button
'Install'
end
end
it
'shows status transition'
do
def
email_form_value
page
.
find
(
'.js-email'
).
value
end
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
expect
(
email_form_value
).
to
eq
(
cluster
.
user
.
email
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
page
.
find
(
'.js-email'
).
set
(
"new_email@example.org"
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installing!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installed!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Cert-Manager was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Ingress'
do
context
'when user installs application: Ingress'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
wait_for_requests
end
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
# The application becomes installed but we keep waiting for external IP address
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installed!
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installed'
)
expect
(
page
).
to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
).
to
have_selector
(
'.js-ingress-ip-loading-icon'
)
# We receive the external IP address and display
Clusters
::
Cluster
.
last
.
application_ingress
.
update!
(
external_ip:
'192.168.1.100'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
expect
(
page
).
not_to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
.
find
(
'.js-endpoint'
).
value
).
to
eq
(
'192.168.1.100'
)
end
expect
(
page
).
to
have_content
(
'Ingress was successfully installed on your Kubernetes cluster'
)
end
end
end
include_examples
"installing applications on a cluster"
do
let
(
:cluster_path
)
{
group_cluster_path
(
group
,
cluster
)
}
let
(
:cluster_factory_args
)
{
[
:group
,
groups:
[
group
]]
}
end
end
end
spec/features/projects/clusters/applications_spec.rb
View file @
01f440e7
# frozen_string_literal: true
require
'spec_helper'
require_relative
'../../../../spec/features/clusters/installing_applications_shared_examples'
describe
'
Clusters
Applications'
,
:js
do
describe
'
Project-level Cluster
Applications'
,
:js
do
include
GoogleApi
::
CloudPlatformHelpers
let
(
:project
)
{
create
(
:project
)
}
...
...
@@ -14,229 +15,9 @@ describe 'Clusters Applications', :js do
end
describe
'Installing applications'
do
before
do
visit
project_cluster_path
(
project
,
cluster
)
end
context
'when cluster is being created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:providing_by_gcp
,
projects:
[
project
])
}
it
'user is unable to install applications'
do
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-row-helm'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
end
end
context
'when cluster is created'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
it
'user can install applications'
do
wait_for_requests
page
.
within
(
'.js-cluster-application-row-helm'
)
do
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
be_nil
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Install'
)
end
end
context
'when user installs Helm'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-helm'
)
do
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
end
wait_for_requests
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-helm'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_helm
.
make_installed!
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Helm Tiller was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Knative'
do
before
do
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
end
context
'on an abac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
:rbac_disabled
,
projects:
[
project
])
}
it
'shows info block and not be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.rbac-notice'
)
expect
(
page
.
find
(
:css
,
'.js-cluster-application-install-button'
)[
'disabled'
]).
to
eq
(
'true'
)
end
end
end
context
'on an rbac cluster'
do
let
(
:cluster
)
{
create
(
:cluster
,
:provided_by_gcp
,
projects:
[
project
])
}
it
'does not show callout block and be installable'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
not_to
have_css
(
'.rbac-notice'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
end
end
describe
'when user clicks install button'
do
def
domainname_form_value
page
.
find
(
'.js-knative-domainname'
).
value
end
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"domain.example.org"
)
click_button
'Install'
wait_for_requests
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_knative
.
make_installing!
Clusters
::
Cluster
.
last
.
application_knative
.
make_installed!
Clusters
::
Cluster
.
last
.
application_knative
.
update_attribute
(
:external_ip
,
'127.0.0.1'
)
end
end
it
'shows status transition'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Knative was successfully installed on your Kubernetes cluster'
)
expect
(
page
).
to
have_css
(
'.js-knative-save-domain-button'
),
exact_text:
'Save changes'
end
it
'can then update the domain'
do
page
.
within
(
'.js-cluster-application-row-knative'
)
do
expect
(
ClusterPatchAppWorker
).
to
receive
(
:perform_async
)
expect
(
domainname_form_value
).
to
eq
(
'domain.example.org'
)
page
.
find
(
'.js-knative-domainname'
).
set
(
"new.domain.example.org"
)
click_button
'Save changes'
wait_for_requests
expect
(
domainname_form_value
).
to
eq
(
'new.domain.example.org'
)
end
end
end
end
end
context
'when user installs Cert Manager'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
click_button
'Install'
end
end
it
'shows status transition'
do
def
email_form_value
page
.
find
(
'.js-email'
).
value
end
page
.
within
(
'.js-cluster-application-row-cert_manager'
)
do
expect
(
email_form_value
).
to
eq
(
cluster
.
user
.
email
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
page
.
find
(
'.js-email'
).
set
(
"new_email@example.org"
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installing!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_cert_manager
.
make_installed!
expect
(
email_form_value
).
to
eq
(
'new_email@example.org'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button'
,
exact_text:
'Uninstall'
)
end
expect
(
page
).
to
have_content
(
'Cert-Manager was successfully installed on your Kubernetes cluster'
)
end
end
context
'when user installs Ingress'
do
context
'when user installs application: Ingress'
do
before
do
allow
(
ClusterInstallAppWorker
).
to
receive
(
:perform_async
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_in
)
allow
(
ClusterWaitForIngressIpAddressWorker
).
to
receive
(
:perform_async
)
create
(
:clusters_applications_helm
,
:installed
,
cluster:
cluster
)
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button:not([disabled])'
)
page
.
find
(
:css
,
'.js-cluster-application-install-button'
).
click
wait_for_requests
end
end
it
'they see status transition'
do
page
.
within
(
'.js-cluster-application-row-ingress'
)
do
# FE sends request and gets the response, then the buttons is "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installing!
# FE starts polling and update the buttons to "Installing"
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installing'
)
# The application becomes installed but we keep waiting for external IP address
Clusters
::
Cluster
.
last
.
application_ingress
.
make_installed!
expect
(
page
).
to
have_css
(
'.js-cluster-application-install-button[disabled]'
,
exact_text:
'Installed'
)
expect
(
page
).
to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
).
to
have_selector
(
'.js-ingress-ip-loading-icon'
)
# We receive the external IP address and display
Clusters
::
Cluster
.
last
.
application_ingress
.
update!
(
external_ip:
'192.168.1.100'
)
expect
(
page
).
not_to
have_css
(
'.js-cluster-application-install-button'
)
expect
(
page
).
to
have_css
(
'.js-cluster-application-uninstall-button:not([disabled])'
,
exact_text:
'Uninstall'
)
expect
(
page
).
not_to
have_selector
(
'.js-no-endpoint-message'
)
expect
(
page
.
find
(
'.js-endpoint'
).
value
).
to
eq
(
'192.168.1.100'
)
end
expect
(
page
).
to
have_content
(
'Ingress was successfully installed on your Kubernetes cluster'
)
end
end
end
include_examples
"installing applications on a cluster"
do
let
(
:cluster_path
)
{
project_cluster_path
(
project
,
cluster
)
}
let
(
:cluster_factory_args
)
{
[
projects:
[
project
]]
}
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