diff options
Diffstat (limited to 'test/unit/user_test.rb')
-rw-r--r-- | test/unit/user_test.rb | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb new file mode 100644 index 0000000..bb89e77 --- /dev/null +++ b/test/unit/user_test.rb @@ -0,0 +1,82 @@ +require 'test_helper' + +class UserTest < ActiveSupport::TestCase + + def test_should_have_a_valid_factory + assert Factory.build(:user).valid? + end + + def test_should_have_a_unique_email_address + user = Factory.create(:user) + assert !Factory.build(:user, :email => user.email).valid? + assert Factory.build(:user, :email => "different_#{user.email}").valid? + end + + def test_can_not_move_to_a_current_tenant_without_a_membership_relation + super_tenant = Factory.create(:tenant) + good_tenant = Factory.create(:tenant) + evil_tenant = Factory.create(:tenant) + + user = Factory.create(:user) + super_tenant.tenant_memberships.create(:user_id => user.id) + good_tenant.tenant_memberships.create(:user_id => user.id) + + assert user.update_attributes(:current_tenant_id => super_tenant.id) + assert !user.update_attributes(:current_tenant_id => evil_tenant.id) + assert user.update_attributes(:current_tenant_id => good_tenant.id) + end + + test "should be possible to modify the user without changing the PIN" do + user = Factory.create(:user) + pin_salt = user.pin_salt + pin_hash = user.pin_hash + user.middle_name = "#{user.middle_name} Foo" + assert user.save, "Should be possible to save the user." + user = User.where(:id => user.id).first + assert user + assert_equal pin_salt, user.pin_salt, "PIN salt should not change." + assert_equal pin_hash, user.pin_hash, "PIN hash should not change." + end + + test "should be possible to change the PIN" do + user = Factory.create(:user) + pin_salt = user.pin_salt + pin_hash = user.pin_hash + new_pin = '453267' + user.new_pin = new_pin + user.new_pin_confirmation = new_pin + assert user.save, "Should be possible to save the user." + user = User.where(:id => user.id).first + assert_not_equal "#{pin_salt}#{pin_hash}", "#{user.pin_salt}#{user.pin_hash}", + "PIN salt/hash should have changed." + end + + test "should not be possible to change the PIN if the confirmation does not match" do + user = Factory.create(:user) + pin_salt = user.pin_salt + pin_hash = user.pin_hash + user.new_pin = '123001' + user.new_pin_confirmation = '123002' + assert ! user.save, "Should not be possible to save the user." + assert ! user.valid?, "Should not be valid." + assert user.errors && user.errors.messages + assert ( + (user.errors.messages[:new_pin] && user.errors.messages[:new_pin].length > 0) || + (user.errors.messages[:new_pin_confirmation] && user.errors.messages[:new_pin_confirmation].length > 0) + ), "There should be an error message because new_pin != new_pin_confirmation." + end + + test "PIN must be numeric" do + user = Factory.create(:user) + new_pin = 'xxxx' + user.new_pin = new_pin + user.new_pin_confirmation = new_pin + assert ! user.save, "Should not be possible to save the user." + assert ! user.valid?, "Should not be valid." + assert ( + (user.errors.messages[:new_pin] && user.errors.messages[:new_pin].length > 0) || + (user.errors.messages[:new_pin_confirmation] && user.errors.messages[:new_pin_confirmation].length > 0) + ), "There should be an error message because PIN isn't numeric." + end + +end |