Commit 7d5b8993 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Build project cache key in a helper

parent 901e70fb
...@@ -59,6 +59,10 @@ module CiStatusHelper ...@@ -59,6 +59,10 @@ module CiStatusHelper
custom_icon(icon_name) custom_icon(icon_name)
end end
def pipeline_status_cache_key(pipeline_status)
"pipeline-status/#{pipeline_status.sha}-#{pipeline_status.status}"
end
def render_project_pipeline_status(pipeline_status, tooltip_placement: 'auto left') def render_project_pipeline_status(pipeline_status, tooltip_placement: 'auto left')
project = pipeline_status.project project = pipeline_status.project
path = pipelines_namespace_project_commit_path( path = pipelines_namespace_project_commit_path(
......
...@@ -159,6 +159,13 @@ module ProjectsHelper ...@@ -159,6 +159,13 @@ module ProjectsHelper
choose a GitLab CI Yaml template and commit your changes. #{link_to_autodeploy_doc}".html_safe choose a GitLab CI Yaml template and commit your changes. #{link_to_autodeploy_doc}".html_safe
end end
def project_list_cache_key(project)
key = [project.namespace.cache_key, project.cache_key, controller.controller_name, controller.action_name, current_application_settings.cache_key, 'v2.3']
key << pipeline_status_cache_key(project.pipeline_status) if project.pipeline_status.has_status?
key
end
private private
def repo_children_classes(field) def repo_children_classes(field)
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
- css_class = '' unless local_assigns[:css_class] - css_class = '' unless local_assigns[:css_class]
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit - show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description - css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
- cache_key = [project.namespace.cache_key, project.cache_key, controller.controller_name, controller.action_name, current_application_settings.cache_key, 'v2.3'] - cache_key = project_list_cache_key(project)
- cache_key.push "pipeline-status/#{project.pipeline_status.sha}-#{project.pipeline_status.status}" if project.pipeline_status.has_status?
%li.project-row{ class: css_class } %li.project-row{ class: css_class }
= cache(cache_key) do = cache(cache_key) do
......
...@@ -16,4 +16,11 @@ describe CiStatusHelper do ...@@ -16,4 +16,11 @@ describe CiStatusHelper do
helper.ci_icon_for_status(failed_commit.status) helper.ci_icon_for_status(failed_commit.status)
end end
end end
describe "#pipeline_status_cache_key" do
it "builds a cache key for pipeline status" do
pipeline_status = Ci::PipelineStatus.new(build(:project), sha: "123abc", status: "success")
expect(helper.pipeline_status_cache_key(pipeline_status)).to eq("pipeline-status/123abc-success")
end
end
end end
...@@ -63,6 +63,46 @@ describe ProjectsHelper do ...@@ -63,6 +63,46 @@ describe ProjectsHelper do
end end
end end
describe "#project_list_cache_key" do
let(:project) { create(:project) }
it "includes the namespace" do
expect(helper.project_list_cache_key(project)).to include(project.namespace.cache_key)
end
it "includes the project" do
expect(helper.project_list_cache_key(project)).to include(project.cache_key)
end
it "includes the controller name" do
expect(helper.controller).to receive(:controller_name).and_return("testcontroller")
expect(helper.project_list_cache_key(project)).to include("testcontroller")
end
it "includes the controller action" do
expect(helper.controller).to receive(:action_name).and_return("testaction")
expect(helper.project_list_cache_key(project)).to include("testaction")
end
it "includes the application settings" do
settings = Gitlab::CurrentSettings.current_application_settings
expect(helper.project_list_cache_key(project)).to include(settings.cache_key)
end
it "includes a version" do
expect(helper.project_list_cache_key(project)).to include("v2.3")
end
it "includes the pipeline status when there is a status" do
create(:ci_pipeline, :success, project: project, sha: project.commit.sha)
expect(helper.project_list_cache_key(project)).to include("pipeline-status/#{project.commit.sha}-success")
end
end
describe 'link_to_member' do describe 'link_to_member' do
let(:group) { create(:group) } let(:group) { create(:group) }
let(:project) { create(:empty_project, group: group) } let(:project) { create(:empty_project, group: group) }
......
Markdown is supported
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