diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb index bd286b87a29..77644602b72 100644 --- a/app/controllers/projects/clusters_controller.rb +++ b/app/controllers/projects/clusters_controller.rb @@ -81,7 +81,7 @@ class Projects::ClustersController < Projects::ApplicationController private def cluster - @cluster ||= project.cluster + @cluster ||= project.cluster.present(current_user: current_user) end def create_params diff --git a/app/models/gcp/cluster.rb b/app/models/gcp/cluster.rb index 0e8b920741d..18bd6a6dcb4 100644 --- a/app/models/gcp/cluster.rb +++ b/app/models/gcp/cluster.rb @@ -1,6 +1,7 @@ module Gcp class Cluster < ActiveRecord::Base extend Gitlab::Gcp::Model + include Presentable belongs_to :project, inverse_of: :cluster belongs_to :user diff --git a/app/presenters/gcp/cluster_presenter.rb b/app/presenters/gcp/cluster_presenter.rb new file mode 100644 index 00000000000..f7908f92a37 --- /dev/null +++ b/app/presenters/gcp/cluster_presenter.rb @@ -0,0 +1,9 @@ +module Gcp + class ClusterPresenter < Gitlab::View::Presenter::Delegated + presents :cluster + + def gke_cluster_url + "https://console.cloud.google.com/kubernetes/clusters/details/#{gcp_cluster_zone}/#{gcp_cluster_name}" + end + end +end diff --git a/app/views/projects/clusters/show.html.haml b/app/views/projects/clusters/show.html.haml index 48d9835d588..b7b4c3c389c 100644 --- a/app/views/projects/clusters/show.html.haml +++ b/app/views/projects/clusters/show.html.haml @@ -37,7 +37,7 @@ %label = s_('ClusterIntegration|Google container engine') %p - - link_gke = link_to(s_('ClusterIntegration|Google Container Engine'), '', target: '_blank', rel: 'noopener noreferrer') + - link_gke = link_to(s_('ClusterIntegration|Google Container Engine'), @cluster.gke_cluster_url, target: '_blank', rel: 'noopener noreferrer') = s_('ClusterIntegration|Manage your cluster by visiting %{link_gke}').html_safe % { link_gke: link_gke } .hidden.js-cluster-error.alert.alert-danger{ role: 'alert' } diff --git a/spec/controllers/projects/clusters_controller_spec.rb b/spec/controllers/projects/clusters_controller_spec.rb index af182a20f14..604b92caca6 100644 --- a/spec/controllers/projects/clusters_controller_spec.rb +++ b/spec/controllers/projects/clusters_controller_spec.rb @@ -100,9 +100,8 @@ describe Projects::ClustersController do describe 'POST create' do subject do - post :create, params.merge( - namespace_id: project.namespace, - project_id: project) + post :create, params.merge(namespace_id: project.namespace, + project_id: project) end context 'when not logged' do @@ -117,12 +116,12 @@ describe Projects::ClustersController do end context 'when all required parameters are set' do - let(:params) do + let(:params) do { cluster: { gcp_cluster_name: 'new-cluster', - gcp_project_id: '111', - } + gcp_project_id: '111' + } } end @@ -140,7 +139,7 @@ describe Projects::ClustersController do context 'when not all required parameters are set' do render_views - let(:params) do + let(:params) do { cluster: { project_namespace: 'some namespace' @@ -221,10 +220,9 @@ describe Projects::ClustersController do let(:params) { {} } subject do - put :update, params.merge( - namespace_id: project.namespace, - project_id: project, - id: cluster) + put :update, params.merge(namespace_id: project.namespace, + project_id: project, + id: cluster) end context 'when logged as master' do diff --git a/spec/presenters/gcp/cluster_presenter_spec.rb b/spec/presenters/gcp/cluster_presenter_spec.rb new file mode 100644 index 00000000000..8d86dc31582 --- /dev/null +++ b/spec/presenters/gcp/cluster_presenter_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Gcp::ClusterPresenter do + let(:project) { create(:project) } + let(:cluster) { create(:gcp_cluster, project: project) } + + subject(:presenter) do + described_class.new(cluster) + end + + it 'inherits from Gitlab::View::Presenter::Delegated' do + expect(described_class.superclass).to eq(Gitlab::View::Presenter::Delegated) + end + + describe '#initialize' do + it 'takes a cluster and optional params' do + expect { presenter }.not_to raise_error + end + + it 'exposes cluster' do + expect(presenter.cluster).to eq(cluster) + end + + it 'forwards missing methods to cluster' do + expect(presenter.gcp_cluster_zone).to eq(cluster.gcp_cluster_zone) + end + end + + describe '#gke_cluster_url' do + subject { described_class.new(cluster).gke_cluster_url } + + it { is_expected.to include(cluster.gcp_cluster_zone) } + it { is_expected.to include(cluster.gcp_cluster_name) } + end +end