X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/d6f8302eaeac711f8738c956f46c92de9743fed3..a4c23cd89f0037960998ffd46da7f410ba16f190:/test/models/user_test.rb diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 644283e84..5c48bb969 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -11,12 +11,12 @@ class UserTest < ActiveSupport::TestCase :home_lon => nil, :home_zoom => nil) assert_not user.valid? - assert user.errors[:email].any? - assert user.errors[:pass_crypt].any? - assert user.errors[:display_name].any? - assert user.errors[:home_lat].none? - assert user.errors[:home_lon].none? - assert user.errors[:home_zoom].none? + assert_predicate user.errors[:email], :any? + assert_predicate user.errors[:pass_crypt], :any? + assert_predicate user.errors[:display_name], :any? + assert_predicate user.errors[:home_lat], :none? + assert_predicate user.errors[:home_lon], :none? + assert_predicate user.errors[:home_zoom], :none? end def test_unique_email @@ -55,7 +55,7 @@ class UserTest < ActiveSupport::TestCase def test_display_name_length user = build(:user) user.display_name = "123" - assert user.valid?, "should allow 3 char name name" + assert_predicate user, :valid?, "should allow 3 char name name" user.display_name = "12" assert_not user.valid?, "should not allow 2 char name" user.display_name = "" @@ -81,7 +81,7 @@ class UserTest < ActiveSupport::TestCase ok.each do |display_name| user = build(:user) user.display_name = display_name - assert user.valid?, "#{display_name} is invalid, when it should be" + assert_predicate user, :valid?, "#{display_name} is invalid, when it should be" end bad.each do |display_name| @@ -214,43 +214,43 @@ class UserTest < ActiveSupport::TestCase end def test_visible? - assert build(:user, :pending).visible? - assert build(:user, :active).visible? - assert build(:user, :confirmed).visible? + assert_predicate build(:user, :pending), :visible? + assert_predicate build(:user, :active), :visible? + assert_predicate build(:user, :confirmed), :visible? assert_not build(:user, :suspended).visible? assert_not build(:user, :deleted).visible? end def test_active? assert_not build(:user, :pending).active? - assert build(:user, :active).active? - assert build(:user, :confirmed).active? + assert_predicate build(:user, :active), :active? + assert_predicate build(:user, :confirmed), :active? assert_not build(:user, :suspended).active? assert_not build(:user, :deleted).active? end def test_moderator? assert_not create(:user).moderator? - assert create(:moderator_user).moderator? + assert_predicate create(:moderator_user), :moderator? end def test_administrator? assert_not create(:user).administrator? - assert create(:administrator_user).administrator? + assert_predicate create(:administrator_user), :administrator? end - def test_has_role? - assert_not create(:user).has_role?("administrator") - assert_not create(:user).has_role?("moderator") - assert create(:administrator_user).has_role?("administrator") - assert create(:moderator_user).has_role?("moderator") + def test_role? + assert_not create(:user).role?("administrator") + assert_not create(:user).role?("moderator") + assert create(:administrator_user).role?("administrator") + assert create(:moderator_user).role?("moderator") end def test_soft_destroy user = create(:user, :with_home_location, :description => "foo") user.soft_destroy assert_equal "user_#{user.id}", user.display_name - assert user.description.blank? + assert_predicate user.description, :blank? assert_nil user.home_lat assert_nil user.home_lon assert_not user.avatar.attached? @@ -258,4 +258,86 @@ class UserTest < ActiveSupport::TestCase assert_not user.visible? assert_not user.active? end + + def test_soft_destroy_revokes_oauth1_tokens + user = create(:user) + access_token = create(:access_token, :user => user) + assert_equal 1, user.oauth_tokens.authorized.count + + user.soft_destroy + + assert_equal 0, user.oauth_tokens.authorized.count + access_token.reload + assert_predicate access_token, :invalidated? + end + + def test_soft_destroy_revokes_oauth2_tokens + user = create(:user) + oauth_access_token = create(:oauth_access_token, :resource_owner_id => user.id) + assert_equal 1, user.access_tokens.not_expired.count + + user.soft_destroy + + assert_equal 0, user.access_tokens.not_expired.count + oauth_access_token.reload + assert_predicate oauth_access_token, :revoked? + end + + def test_deletion_allowed_when_no_changesets + with_user_account_deletion_delay(10000) do + user = create(:user) + assert_predicate user, :deletion_allowed? + end + end + + def test_deletion_allowed_without_delay + with_user_account_deletion_delay(nil) do + user = create(:user) + create(:changeset, :user => user) + user.reload + assert_predicate user, :deletion_allowed? + end + end + + def test_deletion_allowed_past_delay + with_user_account_deletion_delay(10) do + user = create(:user) + create(:changeset, :user => user, :created_at => Time.now.utc - 12.hours, :closed_at => Time.now.utc - 10.hours) + user.reload + assert_predicate user, :deletion_allowed? + end + end + + def test_deletion_allowed_during_delay + with_user_account_deletion_delay(10) do + user = create(:user) + create(:changeset, :user => user, :created_at => Time.now.utc - 11.hours, :closed_at => Time.now.utc - 9.hours) + user.reload + assert_not_predicate user, :deletion_allowed? + assert_equal Time.now.utc + 1.hour, user.deletion_allowed_at + end + end + + def test_deletion_allowed_past_zero_delay + with_user_account_deletion_delay(0) do + user = create(:user) + create(:changeset, :user => user, :created_at => Time.now.utc, :closed_at => Time.now.utc + 1.hour) + travel 90.minutes do + user.reload + assert_predicate user, :deletion_allowed? + end + end + end + + def test_deletion_allowed_during_zero_delay + with_user_account_deletion_delay(0) do + user = create(:user) + create(:changeset, :user => user, :created_at => Time.now.utc, :closed_at => Time.now.utc + 1.hour) + travel 30.minutes do + user.reload + assert_not_predicate user, :deletion_allowed? + assert_equal Time.now.utc + 30.minutes, user.deletion_allowed_at + end + end + end end