X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/4370fe45add697f481ab88764aba8379eb3316c2..437eb1fa8a518e760d76e51a1ab6ddd20c39ffc9:/test/controllers/users_controller_test.rb diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index c5378ce50..5066faec3 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -87,8 +87,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest # Check the page assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => user.display_name - - ActionMailer::Base.deliveries.clear end def test_create_duplicate_email @@ -189,8 +187,6 @@ class UsersControllerTest < ActionDispatch::IntegrationTest perform_enqueued_jobs end end - - ActionMailer::Base.deliveries.clear end def test_go_public @@ -199,7 +195,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest post user_go_public_path - assert_redirected_to edit_account_path + assert_redirected_to account_path assert User.find(user.id).data_public end @@ -220,7 +216,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/traces']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1 - assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary/comments']", 1 + assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/account']", 0 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0 @@ -236,7 +232,7 @@ class UsersControllerTest < ActionDispatch::IntegrationTest assert_select "a[href^='/user/#{ERB::Util.u(blocked_user.display_name)}/history']", 1 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/traces']", 1 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/diary']", 1 - assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/diary/comments']", 1 + assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/diary_comments']", 1 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/account']", 0 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks']", 1 assert_select "a[href='/user/#{ERB::Util.u(blocked_user.display_name)}/blocks_by']", 0 @@ -252,8 +248,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest assert_select "a[href^='/user/#{ERB::Util.u(moderator_user.display_name)}/history']", 1 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/traces']", 1 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary']", 1 - assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary/comments']", 1 - assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/account']", 0 + assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/diary_comments']", 1 + assert_select "a[href='/account']", 0 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks']", 0 assert_select "a[href='/user/#{ERB::Util.u(moderator_user.display_name)}/blocks_by']", 1 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(moderator_user.display_name)}']", 0 @@ -269,8 +265,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1 assert_select "a[href='/traces/mine']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1 - assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary/comments']", 1 - assert_select "a[href='/account/edit']", 1 + assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1 + assert_select "a[href='/account']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 0 @@ -287,8 +283,8 @@ class UsersControllerTest < ActionDispatch::IntegrationTest assert_select "a[href^='/user/#{ERB::Util.u(user.display_name)}/history']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/traces']", 1 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary']", 1 - assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary/comments']", 1 - assert_select "a[href='/account/edit']", 0 + assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/diary_comments']", 1 + assert_select "a[href='/account']", 0 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks']", 0 assert_select "a[href='/user/#{ERB::Util.u(user.display_name)}/blocks_by']", 0 assert_select "a[href='/user_blocks/new/#{ERB::Util.u(user.display_name)}']", 1 @@ -333,4 +329,98 @@ class UsersControllerTest < ActionDispatch::IntegrationTest get auth_failure_path, :params => { :origin => "http://www.google.com" } assert_redirected_to login_path end + + def test_show_heatmap_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) + + get user_path(user.display_name) + assert_response :success + # The data should not be empty + assert_not_nil assigns(:heatmap_data) + + heatmap_data = assigns(:heatmap_data) + # The data should be in the right format + assert(heatmap_data.all? { |entry| entry[:date] && entry[:total_changes] }, "Heatmap data should have :date and :total_changes keys") + end + + def test_show_heatmap_data_caching + # Enable caching to be able to test + Rails.cache.clear + @original_cache_store = Rails.cache + Rails.cache = ActiveSupport::Cache::MemoryStore.new + + user = create(:user) + + # Create an initial changeset + create(:changeset, :user => user, :created_at => 6.months.ago, :num_changes => 15) + + # First request to populate the cache + get user_path(user.display_name) + first_response_data = assigns(:heatmap_data) + assert_not_nil first_response_data, "Expected heatmap data to be assigned on the first request" + assert_equal 1, first_response_data.size, "Expected one entry in the heatmap data" + + # Inspect cache after the first request + cached_data = Rails.cache.read("heatmap_data_with_ids_user_#{user.id}") + assert_equal first_response_data, cached_data, "Expected the cache to contain the first response data" + + # Add a new changeset to the database + create(:changeset, :user => user, :created_at => 3.months.ago, :num_changes => 20) + + # Second request + get user_path(user.display_name) + second_response_data = assigns(:heatmap_data) + + # Confirm that the cache is still being used + assert_equal first_response_data, second_response_data, "Expected cached data to be returned on the second request" + + # Clear the cache and make a third request to confirm new data is retrieved + Rails.cache.clear + get user_path(user.display_name) + third_response_data = assigns(:heatmap_data) + + # Ensure the new entry is now included + assert_equal 2, third_response_data.size, "Expected two entries in the heatmap data after clearing the cache" + + # Reset caching config to defaults + Rails.cache.clear + Rails.cache = @original_cache_store + end + + def test_show_heatmap_data_no_changesets + user = create(:user) + + get user_path(user.display_name) + assert_response :success + # There should be no entries in heatmap data + assert_empty assigns(:heatmap_data) + end + + def test_heatmap_rendering + # Test user with no changesets + user_without_changesets = create(:user) + get user_path(user_without_changesets) + assert_response :success + assert_select "div#cal-heatmap", 0 + + # Test user with changesets + user_with_changesets = create(:user) + changeset39 = create(:changeset, :user => user_with_changesets, :created_at => 4.months.ago.beginning_of_day, :num_changes => 39) + _changeset5 = create(:changeset, :user => user_with_changesets, :created_at => 3.months.ago.beginning_of_day, :num_changes => 5) + changeset11 = create(:changeset, :user => user_with_changesets, :created_at => 3.months.ago.beginning_of_day, :num_changes => 11) + get user_path(user_with_changesets) + assert_response :success + assert_select "div#cal-heatmap[data-heatmap]" do |elements| + # Check the data-heatmap attribute is present and contains expected JSON + heatmap_data = JSON.parse(elements.first["data-heatmap"]) + expected_data = [ + { "date" => 4.months.ago.to_date.to_s, "total_changes" => 39, "max_id" => changeset39.id }, + { "date" => 3.months.ago.to_date.to_s, "total_changes" => 16, "max_id" => changeset11.id } + ] + assert_equal expected_data, heatmap_data + end + end end