diff options
| -rw-r--r-- | users/app/models/identity.rb | 17 | ||||
| -rw-r--r-- | users/test/unit/account_test.rb | 3 | ||||
| -rw-r--r-- | users/test/unit/identity_test.rb | 20 | 
3 files changed, 33 insertions, 7 deletions
| diff --git a/users/app/models/identity.rb b/users/app/models/identity.rb index c24af73..40ce4ae 100644 --- a/users/app/models/identity.rb +++ b/users/app/models/identity.rb @@ -53,6 +53,7 @@ class Identity < CouchRest::Model::Base    def self.disable_all_for(user)      Identity.by_user_id.key(user.id).each do |identity|        identity.disable +      identity.save      end    end @@ -63,11 +64,14 @@ class Identity < CouchRest::Model::Base      }    end -  # -  # about to change towards actually disabling the identity instead of -  # destroying it. -  # -  alias_method :disable, :destroy +  def enabled? +    self.destination && self.user_id +  end + +  def disable +    self.destination = nil +    self.user_id = nil +  end    def keys      read_attribute('keys') || HashWithIndifferentAccess.new @@ -105,7 +109,8 @@ class Identity < CouchRest::Model::Base    end    def destination_email -    return if destination.valid? #this ensures it is Email +    return if destination.nil?   # this identity is disabled +    return if destination.valid? # this ensures it is Email      self.errors.add(:destination, destination.errors.messages[:email].first) #assumes only one error #TODO    end diff --git a/users/test/unit/account_test.rb b/users/test/unit/account_test.rb index 94a9980..a8c6efd 100644 --- a/users/test/unit/account_test.rb +++ b/users/test/unit/account_test.rb @@ -13,7 +13,8 @@ class AccountTest < ActiveSupport::TestCase    end    test "create and remove a user account" do -    assert_no_difference "Identity.count" do +    # We keep an identity that will block the handle from being reused. +    assert_difference "Identity.count" do        assert_no_difference "User.count" do          user = Account.create(FactoryGirl.attributes_for(:user))          user.account.destroy diff --git a/users/test/unit/identity_test.rb b/users/test/unit/identity_test.rb index 0842a77..8270689 100644 --- a/users/test/unit/identity_test.rb +++ b/users/test/unit/identity_test.rb @@ -90,6 +90,26 @@ class IdentityTest < ActiveSupport::TestCase      assert id.errors.messages[:destination].include? "needs to be a valid email address"    end +  test "disabled identity" do +    id = Identity.for(@user) +    id.disable +    assert_equal @user.email_address, id.address +    assert_equal nil, id.destination +    assert_equal nil, id.user +    assert !id.enabled? +    assert id.valid? +  end + +  test "disabled identity blocks handle" do +    id = Identity.for(@user) +    id.disable +    id.save +    other_user = find_record :user +    taken = Identity.build_for other_user, address: id.address +    assert !taken.valid? +    id.destroy +  end +    def alias_name      @alias_name ||= Faker::Internet.user_name    end | 
