Skip to content

Commit 6dd8dcd

Browse files
committed
Show heatmap only to logged in users
1 parent d4be383 commit 6dd8dcd

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)
@@ -359,6 +370,7 @@ def test_show_heatmap_data_caching
359370
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 15)
360371

361372
# First request to populate the cache
373+
session_for(create(:user))
362374
get user_path(user)
363375
first_response_data = assigns(:heatmap_data)
364376
assert_not_nil first_response_data, "Expected heatmap data to be assigned on the first request"
@@ -391,18 +403,20 @@ def test_show_heatmap_data_caching
391403
Rails.cache = @original_cache_store
392404
end
393405

394-
def test_show_heatmap_data_no_changesets
406+
def test_show_heatmap_rendering_when_not_logged_in
395407
user = create(:user)
408+
create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 10)
396409

397410
get user_path(user)
411+
398412
assert_response :success
399-
assert_empty(assigns(:heatmap_data)[:data].values)
400413
assert_select ".heatmap", :count => 0
401414
end
402415

403416
def test_show_heatmap_rendering_of_user_with_no_changesets
404417
user_without_changesets = create(:user)
405418

419+
session_for(create(:user))
406420
get user_path(user_without_changesets)
407421

408422
assert_response :success
@@ -415,6 +429,7 @@ def test_show_heatmap_rendering_of_user_with_changesets
415429
_changeset5 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 5)
416430
changeset11 = create(:changeset, :user => user, :created_at => 3.months.ago.beginning_of_day, :num_changes => 11)
417431

432+
session_for(create(:user))
418433
get user_path(user)
419434

420435
assert_response :success
@@ -426,9 +441,10 @@ def test_show_heatmap_rendering_of_user_with_changesets
426441
assert_select ".heatmap [data-date='#{5.months.ago.to_date}']:not([data-count])"
427442
end
428443

429-
def test_heatmap_headline_changset_zero
444+
def test_heatmap_headline_changeset_zero
430445
user = create(:user)
431446

447+
session_for(create(:user))
432448
get user_path(user)
433449

434450
assert_response :success
@@ -439,6 +455,7 @@ def test_heatmap_headline_changeset_singular
439455
user = create(:user)
440456
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 1)
441457

458+
session_for(create(:user))
442459
get user_path(user)
443460

444461
assert_response :success
@@ -449,6 +466,7 @@ def test_heatmap_headline_changeset_plural
449466
user = create(:user)
450467
create(:changeset, :user => user, :created_at => 4.months.ago.beginning_of_day, :num_changes => 12)
451468

469+
session_for(create(:user))
452470
get user_path(user)
453471

454472
assert_response :success

0 commit comments

Comments
 (0)