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