diff options
author | Azul <azul@leap.se> | 2013-08-30 11:20:04 +0200 |
---|---|---|
committer | Azul <azul@leap.se> | 2013-09-03 08:54:25 +0200 |
commit | 859b79d0dcd53c85bb57e3db888a1af702802987 (patch) | |
tree | cb0e293a6eddba2a9aa0b22baa0bfb43f56c43ed /users/test/unit | |
parent | 0d44e39d2ec591c9ab98464b93a0c867ca96e02a (diff) |
Account: Composition to handle User and its identities
We have a lot of things that act upon a user record and one or more of it's identities at the same time:
* Sing up: Create a user and it's initial identity
* Rename: Change the username and create a new identity, turn old into an alias
* Cancel Account: Remove user and all their identities.
In order to keep the User and Identity behaviour isolated but still have a this logic represented in a sinle place the Account model deals with all these things.
We could have overwritten the User#create, User#update and User#destroy methods instead. But then we would always create identities, even if we only need a user (for example in tests).
Diffstat (limited to 'users/test/unit')
-rw-r--r-- | users/test/unit/account_test.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/users/test/unit/account_test.rb b/users/test/unit/account_test.rb new file mode 100644 index 0000000..39969c0 --- /dev/null +++ b/users/test/unit/account_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' + +class AccountTest < ActiveSupport::TestCase + + test "create a new account" do + user = Account.create(FactoryGirl.attributes_for(:user)) + assert user.valid? + assert user.persisted? + assert id = user.identity + assert_equal user.email_address, id.address + assert_equal user.email_address, id.destination + id.destroy + user.destroy + end + + test "create and remove a user account" do + assert_no_difference "Identity.count" do + assert_no_difference "User.count" do + user = Account.create(FactoryGirl.attributes_for(:user)) + Account.new(user).destroy + end + end + end + + test "change username and create alias" do + user = Account.create(FactoryGirl.attributes_for(:user)) + old_id = user.identity + old_email = user.email_address + Account.new(user).update(FactoryGirl.attributes_for(:user)) + user.reload + old_id.reload + assert user.valid? + assert user.persisted? + assert id = user.identity + assert id.persisted? + assert_equal user.email_address, id.address + assert_equal user.email_address, id.destination + assert_equal user.email_address, old_id.destination + assert_equal old_email, old_id.address + old_id.destroy + id.destroy + user.destroy + end + +end |