diff --git a/app/controllers/users/heatmaps_controller.rb b/app/controllers/users/heatmaps_controller.rb
index dd30395a322..2672275f505 100644
--- a/app/controllers/users/heatmaps_controller.rb
+++ b/app/controllers/users/heatmaps_controller.rb
@@ -11,7 +11,7 @@ class HeatmapsController < ApplicationController
def show
@user = User.find_by(:display_name => params[:user_display_name])
- if @user && (@user.visible? || current_user&.administrator?)
+ if current_user && @user && (@user.visible? || current_user.administrator?)
@heatmap_data = Rails.cache.fetch("heatmap_data_of_user_#{@user.id}", :expires_at => Time.zone.now.end_of_day) do
from = 1.year.ago.beginning_of_day
to = Time.zone.now.end_of_day
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index d4862c65c9c..1dbff34e03b 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -23,7 +23,7 @@ def show
if @user && (@user.visible? || current_user&.administrator?)
@title = @user.display_name
- @heatmap_frame = true
+ @heatmap_frame = true if current_user
else
render_unknown_user params[:display_name]
end
diff --git a/app/views/users/heatmaps/show.html.erb b/app/views/users/heatmaps/show.html.erb
index a0f400d811d..32b4991cde5 100644
--- a/app/views/users/heatmaps/show.html.erb
+++ b/app/views/users/heatmaps/show.html.erb
@@ -1,5 +1,5 @@
<%= turbo_frame_tag "#{dom_id(@user)}_heatmap", :data => { :turbo => false } do %>
- <% if @heatmap_data[:count].positive? %>
+ <% if @heatmap_data.present? && @heatmap_data[:count].positive? %>
<%= t("users.show.contributions", :count => @heatmap_data[:count]) %>
<% cal_data = prepare_heatmap(@heatmap_data[:data], @heatmap_data[:from], @heatmap_data[:to]) %>
diff --git a/test/controllers/users/heatmaps_controller_test.rb b/test/controllers/users/heatmaps_controller_test.rb
index 5bbd71882c2..7125e43733a 100644
--- a/test/controllers/users/heatmaps_controller_test.rb
+++ b/test/controllers/users/heatmaps_controller_test.rb
@@ -11,12 +11,22 @@ def test_routes
)
end
+ def test_show_data_when_not_logged_in
+ user = create(:user)
+ create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
+
+ get user_heatmap_path(user)
+
+ assert_response :success
+ assert_nil assigns(:heatmap_data)
+ end
+
def test_show_data
user = create(:user)
- # Create two changesets
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
create(:changeset, :user => user, :created_at => 3.months.ago, :num_changes => 20)
+ session_for(create(:user))
get user_heatmap_path(user)
assert_response :success
@@ -43,6 +53,7 @@ def test_show_data_caching
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 15)
# First request to populate the cache
+ session_for(create(:user))
get user_heatmap_path(user)
first_response_data = assigns(:heatmap_data)
assert_not_nil first_response_data, "Expected heatmap data to be assigned on the first request"
@@ -75,19 +86,20 @@ def test_show_data_caching
Rails.cache = @original_cache_store
end
- def test_show_data_no_changesets
+ def test_show_rendering_when_not_logged_in
user = create(:user)
+ create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
get user_heatmap_path(user)
assert_response :success
- assert_empty(assigns(:heatmap_data)[:data].values)
assert_select ".heatmap", :count => 0
end
def test_show_rendering_of_user_with_no_changesets
user_without_changesets = create(:user)
+ session_for(create(:user))
get user_heatmap_path(user_without_changesets)
assert_response :success
@@ -100,6 +112,7 @@ def test_show_rendering_of_user_with_changesets
_changeset5 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 5)
changeset11 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 11)
+ session_for(create(:user))
get user_heatmap_path(user)
assert_response :success
@@ -114,6 +127,7 @@ def test_show_rendering_of_user_with_changesets
def test_headline_changeset_zero
user = create(:user)
+ session_for(create(:user))
get user_heatmap_path(user)
assert_response :success
@@ -124,6 +138,7 @@ def test_headline_changeset_singular
user = create(:user)
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 1)
+ session_for(create(:user))
get user_heatmap_path(user)
assert_response :success
@@ -134,6 +149,7 @@ def test_headline_changeset_plural
user = create(:user)
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 12)
+ session_for(create(:user))
get user_heatmap_path(user)
assert_response :success