Commit b4282df8 authored by Shinya Maeda's avatar Shinya Maeda
Browse files

Add test suit for platform::kubernetes

parent 9bdabf037337
......@@ -914,13 +914,6 @@
deployment_platform
end
# TODO: This will be extended for multiple enviroment clusters
# TODO: Add super nice tests to check this interchangeability
def deployment_platform
@deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes
@deployment_platform ||= deployment_services.reorder(nil).find_by(active: true)
end
def monitoring_services
services.where(category: :monitoring)
end
......@@ -1858,4 +1851,11 @@
raise ex
end
# TODO: This will be extended for multiple enviroment clusters
# TODO: Add super nice tests to check this interchangeability
def deployment_platform
@deployment_platform ||= clusters.where(enabled: true).first&.platform_kubernetes
@deployment_platform ||= deployment_services.reorder(nil).find_by(active: true)
end
end
......@@ -130,6 +130,24 @@
expect(response.location).to include(project_new_blob_path(project, branch))
expect(response).to have_gitlab_http_status(302)
end
it 'redirects to autodeploy setup page' do
result = { status: :success, branch: double(name: branch) }
create(:cluster, :provided_by_gcp, projects: [project])
expect_any_instance_of(CreateBranchService).to receive(:execute).and_return(result)
expect(SystemNoteService).to receive(:new_issue_branch).and_return(true)
post :create,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
branch_name: branch,
issue_iid: issue.iid
expect(response.location).to include(project_new_blob_path(project, branch))
expect(response).to have_gitlab_http_status(302)
end
end
context 'without issue feature access' do
......
......@@ -4,9 +4,10 @@
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
before do
create :kubernetes_service, project: project
project.team << [user, :master]
sign_in user
end
context 'when user configured kubernetes from Integration > Kubernetes' do
before do
create :kubernetes_service, project: project
project.team << [user, :master]
sign_in user
end
......@@ -12,6 +13,12 @@
context 'when no deployment service is active' do
before do
project.kubernetes_service.update!(active: false)
context 'when no deployment service is active' do
before do
project.kubernetes_service.update!(active: false)
end
it 'does not show a button to set up auto deploy' do
visit project_path(project)
expect(page).to have_no_content('Set up auto deploy')
end
end
......@@ -16,8 +23,35 @@
end
it 'does not show a button to set up auto deploy' do
visit project_path(project)
expect(page).to have_no_content('Set up auto deploy')
context 'when a deployment service is active' do
before do
project.kubernetes_service.update!(active: true)
visit project_path(project)
end
it 'shows a button to set up auto deploy' do
expect(page).to have_link('Set up auto deploy')
end
it 'includes OpenShift as an available template', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
expect(page).to have_content('OpenShift')
end
end
it 'creates a merge request using "auto-deploy" branch', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
click_on 'OpenShift'
end
wait_for_requests
click_button 'Commit changes'
expect(page).to have_content('New Merge Request From auto-deploy into master')
end
end
end
......@@ -21,5 +55,5 @@
end
end
context 'when a deployment service is active' do
context 'when user configured kubernetes from CI/CD > Clusters' do
before do
......@@ -25,5 +59,6 @@
before do
project.kubernetes_service.update!(active: true)
visit project_path(project)
create(:cluster, :provided_by_gcp, projects: [project])
project.team << [user, :master]
sign_in user
end
......@@ -28,6 +63,7 @@
end
it 'shows a button to set up auto deploy' do
expect(page).to have_link('Set up auto deploy')
end
context 'when no deployment service is active' do
before do
project.kubernetes_service.update!(active: false)
end
......@@ -33,10 +69,7 @@
it 'includes OpenShift as an available template', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
expect(page).to have_content('OpenShift')
it 'does not show a button to set up auto deploy' do
visit project_path(project)
expect(page).to have_no_content('Set up auto deploy')
end
end
......@@ -40,9 +73,12 @@
end
end
it 'creates a merge request using "auto-deploy" branch', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
click_on 'OpenShift'
context 'when a deployment service is active' do
before do
project.kubernetes_service.update!(active: true)
visit project_path(project)
end
it 'shows a button to set up auto deploy' do
expect(page).to have_link('Set up auto deploy')
end
......@@ -48,4 +84,11 @@
end
wait_for_requests
click_button 'Commit changes'
it 'includes OpenShift as an available template', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
expect(page).to have_content('OpenShift')
end
end
......@@ -51,5 +94,15 @@
expect(page).to have_content('New Merge Request From auto-deploy into master')
it 'creates a merge request using "auto-deploy" branch', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
click_on 'OpenShift'
end
wait_for_requests
click_button 'Commit changes'
expect(page).to have_content('New Merge Request From auto-deploy into master')
end
end
end
end
......@@ -101,5 +101,11 @@
end
context 'with terminal' do
let(:project) { create(:kubernetes_project, :test_repo) }
shared_examples 'correct behavior with terminal' do
context 'for project master' do
let(:role) { :master }
scenario 'it shows the terminal button' do
expect(page).to have_terminal_button
end
......@@ -105,4 +111,8 @@
context 'for project master' do
let(:role) { :master }
context 'web terminal', :js do
before do
# Stub #terminals as it causes js-enabled feature specs to render the page incorrectly
allow_any_instance_of(Environment).to receive(:terminals) { nil }
visit terminal_project_environment_path(project, environment)
end
......@@ -108,5 +118,8 @@
scenario 'it shows the terminal button' do
expect(page).to have_terminal_button
it 'displays a web terminal' do
expect(page).to have_selector('#terminal')
expect(page).to have_link(nil, href: environment.external_url)
end
end
end
......@@ -111,9 +124,5 @@
end
context 'web terminal', :js do
before do
# Stub #terminals as it causes js-enabled feature specs to render the page incorrectly
allow_any_instance_of(Environment).to receive(:terminals) { nil }
visit terminal_project_environment_path(project, environment)
end
context 'for developer' do
let(:role) { :developer }
......@@ -119,8 +128,7 @@
it 'displays a web terminal' do
expect(page).to have_selector('#terminal')
expect(page).to have_link(nil, href: environment.external_url)
scenario 'does not show terminal button' do
expect(page).not_to have_terminal_button
end
end
end
......@@ -123,7 +131,10 @@
end
end
end
context 'for developer' do
let(:role) { :developer }
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project, :test_repo) }
it_behaves_like 'correct behavior with terminal'
end
......@@ -129,7 +140,9 @@
scenario 'does not show terminal button' do
expect(page).not_to have_terminal_button
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'correct behavior with terminal'
end
end
......
......@@ -208,5 +208,7 @@
end
context 'when kubernetes terminal is available' do
let(:project) { create(:kubernetes_project, :test_repo) }
shared_examples 'correct behavior with terminal' do
context 'for project master' do
let(:role) { :master }
......@@ -212,4 +214,6 @@
context 'for project master' do
let(:role) { :master }
it 'shows the terminal button' do
expect(page).to have_terminal_button
end
end
......@@ -215,5 +219,9 @@
it 'shows the terminal button' do
expect(page).to have_terminal_button
context 'when user is a developer' do
let(:role) { :developer }
it 'does not show terminal button' do
expect(page).not_to have_terminal_button
end
end
end
......@@ -218,6 +226,6 @@
end
end
context 'when user is a developer' do
let(:role) { :developer }
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project, :test_repo) }
......@@ -223,7 +231,12 @@
it 'does not show terminal button' do
expect(page).not_to have_terminal_button
end
it_behaves_like 'correct behavior with terminal'
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'correct behavior with terminal'
end
end
end
......
......@@ -4,5 +4,10 @@
let(:pipeline) { create(:ci_pipeline, project: project) }
context 'when kubernetes service is active' do
set(:project) { create(:kubernetes_project) }
shared_examples 'correct behavior for satisfied_by?' do
it 'is satisfied by a kubernetes pipeline' do
expect(described_class.new('active'))
.to be_satisfied_by(pipeline)
end
end
......@@ -8,7 +13,15 @@
it 'is satisfied by a kubernetes pipeline' do
expect(described_class.new('active'))
.to be_satisfied_by(pipeline)
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project) }
it_behaves_like 'correct behavior for satisfied_by?'
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'correct behavior for satisfied_by?'
end
end
......
......@@ -2002,12 +2002,25 @@
end
context 'when project has a deployment service' do
let(:project) { create(:kubernetes_project) }
it 'returns variables from this service' do
expect(project.deployment_variables).to include(
{ key: 'KUBE_TOKEN', value: project.kubernetes_service.token, public: false }
)
shared_examples 'correct behavior with variables' do
it 'returns variables from this service' do
expect(project.deployment_variables).to include(
{ key: 'KUBE_TOKEN', value: project.kubernetes_service.token, public: false }
)
end
end
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project) }
it_behaves_like 'correct behavior with variables'
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'correct behavior with variables'
end
end
end
......
......@@ -41,7 +41,12 @@
end
describe 'project has Kubernetes service' do
let(:project) { create(:kubernetes_project) }
let(:environment) { create(:environment, slug: 'environment-slug', project: project) }
let(:kube_namespace) { project.kubernetes_service.actual_namespace }
shared_examples 'correct behavior with metrics' do
let(:environment) { create(:environment, slug: 'environment-slug', project: project) }
let(:kube_namespace) { project.kubernetes_service.actual_namespace }
it_behaves_like 'query context containing environment slug and filter'
it 'query context contains kube_namespace' do
expect(subject).to receive(:query_metrics).with(hash_including(kube_namespace: kube_namespace))
......@@ -47,3 +52,8 @@
it_behaves_like 'query context containing environment slug and filter'
subject.query(*query_params)
end
end
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project) }
......@@ -49,4 +59,4 @@
it 'query context contains kube_namespace' do
expect(subject).to receive(:query_metrics).with(hash_including(kube_namespace: kube_namespace))
it_behaves_like 'correct behavior with metrics'
end
......@@ -52,5 +62,9 @@
subject.query(*query_params)
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'correct behavior with metrics'
end
end
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment