summaryrefslogtreecommitdiff
path: root/users/test/unit
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2013-08-30 11:20:04 +0200
committerAzul <azul@leap.se>2013-09-03 08:54:25 +0200
commit859b79d0dcd53c85bb57e3db888a1af702802987 (patch)
treecb0e293a6eddba2a9aa0b22baa0bfb43f56c43ed /users/test/unit
parent0d44e39d2ec591c9ab98464b93a0c867ca96e02a (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.rb45
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