From e2a3daa9ae3f3570aca0dc22b70d87252e599d7a Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 30 Aug 2013 10:14:22 +0200 Subject: don't leave id records behind when unit testing --- users/test/unit/identity_test.rb | 7 +++---- users/test/unit/user_test.rb | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'users/test/unit') diff --git a/users/test/unit/identity_test.rb b/users/test/unit/identity_test.rb index 472bc52..fa88315 100644 --- a/users/test/unit/identity_test.rb +++ b/users/test/unit/identity_test.rb @@ -7,9 +7,6 @@ class IdentityTest < ActiveSupport::TestCase @user = find_record :user end - teardown do - end - test "initial identity for a user" do id = Identity.for(@user) assert_equal @user.email_address, id.address @@ -36,7 +33,6 @@ class IdentityTest < ActiveSupport::TestCase assert_equal LocalEmail.new(alias_name), id.address assert_equal Email.new(forward_address), id.destination assert_equal @user, id.user - id.save end test "prevents duplicates" do @@ -44,6 +40,7 @@ class IdentityTest < ActiveSupport::TestCase dup = Identity.build_for @user, address: alias_name, destination: forward_address assert !dup.valid? assert_equal ["This alias already exists"], dup.errors[:base] + id.destroy end test "validates availability" do @@ -52,6 +49,7 @@ class IdentityTest < ActiveSupport::TestCase taken = Identity.build_for other_user, address: alias_name assert !taken.valid? assert_equal ["This email has already been taken"], taken.errors[:base] + id.destroy end test "setting and getting pgp key" do @@ -69,6 +67,7 @@ class IdentityTest < ActiveSupport::TestCase assert result = view.rows.first assert_equal id.address, result["key"] assert_equal id.keys[:pgp], result["value"] + id.destroy end def alias_name diff --git a/users/test/unit/user_test.rb b/users/test/unit/user_test.rb index 8efb0bd..c797623 100644 --- a/users/test/unit/user_test.rb +++ b/users/test/unit/user_test.rb @@ -50,8 +50,8 @@ class UserTest < ActiveSupport::TestCase other_user = FactoryGirl.create :user id = Identity.create_for other_user, address: @user.login assert !@user.valid? - other_user.destroy id.destroy + other_user.destroy end test "deprecated public key api still works" do -- cgit v1.2.3 From 859b79d0dcd53c85bb57e3db888a1af702802987 Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 30 Aug 2013 11:20:04 +0200 Subject: 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). --- users/test/unit/account_test.rb | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 users/test/unit/account_test.rb (limited to 'users/test/unit') 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 -- cgit v1.2.3