From 18a25c66f9df096d5b7b1f5593c8b4945a583c00 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Wed, 19 Feb 2025 06:50:29 +0300 Subject: [PATCH] Allow to agree to new terms if already agreed to old terms --- app/controllers/accounts/terms_controller.rb | 10 +- .../accounts/terms_controller_test.rb | 127 +++++++++++++++--- 2 files changed, 113 insertions(+), 24 deletions(-) diff --git a/app/controllers/accounts/terms_controller.rb b/app/controllers/accounts/terms_controller.rb index 6fe498566..de8b8dbe7 100644 --- a/app/controllers/accounts/terms_controller.rb +++ b/app/controllers/accounts/terms_controller.rb @@ -27,13 +27,11 @@ module Accounts flash[:notice] = { :partial => "accounts/terms/terms_declined_flash" } if current_user.save else - unless current_user.terms_agreed? - current_user.tou_agreed = Time.now.utc - current_user.terms_agreed = Time.now.utc - current_user.terms_seen = true + current_user.tou_agreed = Time.now.utc + current_user.terms_agreed = Time.now.utc + current_user.terms_seen = true - flash[:notice] = t ".terms accepted" if current_user.save - end + flash[:notice] = t ".terms accepted" if current_user.save end referer = safe_referer(params[:referer]) if params[:referer] diff --git a/test/controllers/accounts/terms_controller_test.rb b/test/controllers/accounts/terms_controller_test.rb index e45c3c3bd..854179ad3 100644 --- a/test/controllers/accounts/terms_controller_test.rb +++ b/test/controllers/accounts/terms_controller_test.rb @@ -48,32 +48,123 @@ module Accounts assert_response :success end - def test_update_not_seen_without_referer - user = create(:user, :terms_seen => false, :terms_agreed => nil) - session_for(user) + def test_update_decline_by_not_checking_the_boxes + freeze_time do + user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil) + session_for(user) - put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 } - assert_redirected_to account_path - assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + put account_terms_path, :params => { :continue => "Continue" } - user.reload + assert_redirected_to account_path + assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice]) - assert_not_nil user.terms_agreed - assert user.terms_seen + user.reload + assert user.terms_seen + assert_nil user.terms_agreed + assert_nil user.tou_agreed + end end - def test_update_not_seen_with_referer - user = create(:user, :terms_seen => false, :terms_agreed => nil) - session_for(user) + def test_update_decline_by_cancel + freeze_time do + user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil) + session_for(user) + + put account_terms_path, :params => { :read_ct => 1, :read_tou => 1, :decline => "Cancel" } + + assert_redirected_to account_path + assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice]) + + user.reload + assert user.terms_seen + assert_nil user.terms_agreed + assert_nil user.tou_agreed + end + end + + def test_update_decline_previously_accepted_by_not_checking_the_boxes + freeze_time do + user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday) + session_for(user) + + put account_terms_path, :params => { :continue => "Continue" } + + assert_redirected_to account_path + assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice]) + + user.reload + assert user.terms_seen + assert_equal Date.yesterday, user.terms_agreed + assert_equal Date.yesterday, user.tou_agreed + end + end + + def test_update_decline_previously_accepted_by_cancel + freeze_time do + user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday) + session_for(user) + + put account_terms_path, :params => { :read_ct => 1, :read_tou => 1, :decline => "Cancel" } + + assert_redirected_to account_path + assert_equal({ :partial => "accounts/terms/terms_declined_flash" }, flash[:notice]) + + user.reload + assert user.terms_seen + assert_equal Date.yesterday, user.terms_agreed + assert_equal Date.yesterday, user.tou_agreed + end + end + + def test_update_accept_not_seen + freeze_time do + user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil) + session_for(user) + + put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 } + + assert_redirected_to account_path + assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + + user.reload + assert user.terms_seen + assert_equal Time.now.utc, user.terms_agreed + assert_equal Time.now.utc, user.tou_agreed + end + end + + def test_update_accept_not_seen_with_referer + freeze_time do + user = create(:user, :terms_seen => false, :terms_agreed => nil, :tou_agreed => nil) + session_for(user) + + put account_terms_path, :params => { :referer => "/test", :read_ct => 1, :read_tou => 1 } + + assert_redirected_to "/test" + assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + + user.reload + assert user.terms_seen + assert_equal Time.now.utc, user.terms_agreed + assert_equal Time.now.utc, user.tou_agreed + end + end + + def test_update_accept_previously_accepted + freeze_time do + user = create(:user, :terms_seen => true, :terms_agreed => Date.yesterday, :tou_agreed => Date.yesterday) + session_for(user) - put account_terms_path, :params => { :referer => "/test", :read_ct => 1, :read_tou => 1 } - assert_redirected_to "/test" - assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] + put account_terms_path, :params => { :read_ct => 1, :read_tou => 1 } - user.reload + assert_redirected_to account_path + assert_equal "Thanks for accepting the new contributor terms!", flash[:notice] - assert_not_nil user.terms_agreed - assert user.terms_seen + user.reload + assert user.terms_seen + assert_equal Time.now.utc, user.terms_agreed + assert_equal Time.now.utc, user.tou_agreed + end end # Check that if you haven't seen the terms, and make a request that requires authentication, -- 2.39.5