Skip to content

Commit 251599b

Browse files
committed
Show heatmap only to logged in users
1 parent f071e03 commit 251599b

File tree

3 files changed

+50
-30
lines changed

3 files changed

+50
-30
lines changed

app/controllers/users_controller.rb

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,33 @@ def show
2424
if @user && (@user.visible? || current_user&.administrator?)
2525
@title = @user.display_name
2626

27-
@heatmap_data = Rails.cache.fetch("heatmap_data_of_user_#{@user.id}", :expires_at => Time.zone.now.end_of_day) do
28-
from = 1.year.ago.beginning_of_day
29-
to = Time.zone.now.end_of_day
30-
31-
mapped = Changeset
32-
.where(:user_id => @user.id)
33-
.where(:created_at => from..to)
34-
.where(:num_changes => 1..)
35-
.group("date_trunc('day', created_at)")
36-
.select("date_trunc('day', created_at) AS date, SUM(num_changes) AS total_changes, MAX(id) AS max_id")
37-
.order("date")
38-
.map do |changeset|
39-
{
40-
:date => changeset.date.to_date,
41-
:total_changes => changeset.total_changes.to_i,
42-
:max_id => changeset.max_id
43-
}
44-
end
45-
46-
{
47-
:count => mapped.sum { |entry| entry[:total_changes] },
48-
:data => mapped.index_by { |entry| entry[:date] },
49-
:from => from,
50-
:to => to
51-
}
27+
if current_user
28+
@heatmap_data = Rails.cache.fetch("heatmap_data_of_user_#{@user.id}", :expires_at => Time.zone.now.end_of_day) do
29+
from = 1.year.ago.beginning_of_day
30+
to = Time.zone.now.end_of_day
31+
32+
mapped = Changeset
33+
.where(:user_id => @user.id)
34+
.where(:created_at => from..to)
35+
.where(:num_changes => 1..)
36+
.group("date_trunc('day', created_at)")
37+
.select("date_trunc('day', created_at) AS date, SUM(num_changes) AS total_changes, MAX(id) AS max_id")
38+
.order("date")
39+
.map do |changeset|
40+
{
41+
:date => changeset.date.to_date,
42+
:total_changes => changeset.total_changes.to_i,
43+
:max_id => changeset.max_id
44+
}
45+
end
46+
47+
{
48+
:count => mapped.sum { |entry| entry[:total_changes] },
49+
:data => mapped.index_by { |entry| entry[:date] },
50+
:from => from,
51+
:to => to
52+
}
53+
end
5254
end
5355
else
5456
render_unknown_user params[:display_name]

app/views/users/show.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@
246246

247247
<div class="richtext text-break"><%= @user.description.to_html %></div>
248248

249-
<% if @heatmap_data[:count].positive? %>
249+
<% if @heatmap_data.present? && @heatmap_data[:count].positive? %>
250250
<h2 class="text-body-secondary fs-5 mt-4"><%= t("users.show.contributions", :count => @heatmap_data[:count]) %></h2>
251251
<%= render :partial => "heatmap", :locals => @heatmap_data %>
252252
<% end %>

test/controllers/users_controller_test.rb

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,24 @@ def test_auth_failure_callback
330330
assert_redirected_to login_path
331331
end
332332

333+
def test_show_heatmap_data_when_not_logged_in
334+
user = create(:user)
335+
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
336+
337+
get user_path(user)
338+
339+
assert_response :success
340+
assert_nil assigns(:heatmap_data)
341+
end
342+
333343
def test_show_heatmap_data
334344
user = create(:user)
335-
# Create two changesets
336345
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
337346
create(:changeset, :user => user, :created_at => 3.months.ago, :num_changes => 20)
338347

348+
session_for(create(:user))
339349
get user_path(user)
350+
340351
assert_response :success
341352
# The data should not be empty
342353
heatmap_data = assigns(:heatmap_data)
@@ -361,6 +372,7 @@ def test_show_heatmap_data_caching
361372
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 15)
362373

363374
# First request to populate the cache
375+
session_for(create(:user))
364376
get user_path(user)
365377
first_response_data = assigns(:heatmap_data)
366378
assert_not_nil first_response_data, "Expected heatmap data to be assigned on the first request"
@@ -393,18 +405,20 @@ def test_show_heatmap_data_caching
393405
Rails.cache = @original_cache_store
394406
end
395407

396-
def test_show_heatmap_data_no_changesets
408+
def test_show_heatmap_rendering_when_not_logged_in
397409
user = create(:user)
410+
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
398411

399412
get user_path(user)
413+
400414
assert_response :success
401-
assert_empty(assigns(:heatmap_data)[:data].values)
402415
assert_select ".heatmap", :count => 0
403416
end
404417

405418
def test_show_heatmap_rendering_of_user_with_no_changesets
406419
user_without_changesets = create(:user)
407420

421+
session_for(create(:user))
408422
get user_path(user_without_changesets)
409423

410424
assert_response :success
@@ -417,6 +431,7 @@ def test_show_heatmap_rendering_of_user_with_changesets
417431
_changeset5 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 5)
418432
changeset11 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 11)
419433

434+
session_for(create(:user))
420435
get user_path(user)
421436

422437
assert_response :success
@@ -428,9 +443,10 @@ def test_show_heatmap_rendering_of_user_with_changesets
428443
assert_select ".heatmap [data-date='#{5.months.ago.to_date}']:not([data-count])"
429444
end
430445

431-
def test_heatmap_headline_changset_zero
446+
def test_heatmap_headline_changeset_zero
432447
user = create(:user)
433448

449+
session_for(create(:user))
434450
get user_path(user)
435451

436452
assert_response :success
@@ -441,6 +457,7 @@ def test_heatmap_headline_changeset_singular
441457
user = create(:user)
442458
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 1)
443459

460+
session_for(create(:user))
444461
get user_path(user)
445462

446463
assert_response :success
@@ -451,6 +468,7 @@ def test_heatmap_headline_changeset_plural
451468
user = create(:user)
452469
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 12)
453470

471+
session_for(create(:user))
454472
get user_path(user)
455473

456474
assert_response :success

0 commit comments

Comments
 (0)