diff options
| -rw-r--r-- | app/models/account.rb | 8 | ||||
| -rw-r--r-- | test/unit/account_test.rb | 45 | 
2 files changed, 36 insertions, 17 deletions
| diff --git a/app/models/account.rb b/app/models/account.rb index 3283bcc..4442a68 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -43,8 +43,12 @@ class Account        end        if user.invite_required?          user_invite_code = InviteCode.find_by_invite_code user.invite_code -        user_invite_code.invite_count += 1 -        user_invite_code.save +        if user.is_test? && user_invite_code.max_uses == 1 +          user_invite_code.destroy +        else +          user_invite_code.invite_count += 1 +          user_invite_code.save +        end        end      end    rescue VALIDATION_FAILED => ex diff --git a/test/unit/account_test.rb b/test/unit/account_test.rb index 058e196..f81764d 100644 --- a/test/unit/account_test.rb +++ b/test/unit/account_test.rb @@ -12,7 +12,7 @@ class AccountTest < ActiveSupport::TestCase    end    test "create a new account when invited" do -    user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +    user = Account.create(user_attributes( :invite_code => @testcode.invite_code))      assert user.valid?, "unexpected errors: #{user.errors.inspect}"      assert user.persisted?      assert id = user.identity @@ -23,7 +23,7 @@ class AccountTest < ActiveSupport::TestCase    test "fail to create account without invite" do      with_config invite_required: true do -      user = Account.create(FactoryGirl.attributes_for(:user)) +      user = Account.create(user_attributes)        assert !user.valid?, "user should not be valid"        assert !user.persisted?, "user should not have been saved"        assert_has_errors user, invite_code: "This is not a valid code" @@ -32,7 +32,7 @@ class AccountTest < ActiveSupport::TestCase    test "allow invite_required override" do      with_config invite_required: true do -      user = Account.create(FactoryGirl.attributes_for(:user), :invite_required => false) +      user = Account.create(user_attributes, :invite_required => false)        assert user.valid?, "unexpected errors: #{user.errors.inspect}"        assert user.persisted?, "user should have been saved"        user.account.destroy @@ -41,7 +41,7 @@ class AccountTest < ActiveSupport::TestCase    test "create a new account" do      with_config invite_required: false do -      user = Account.create(FactoryGirl.attributes_for(:user)) +      user = Account.create(user_attributes)        assert user.valid?, "unexpected errors: #{user.errors.inspect}"        assert user.persisted?        user.account.destroy @@ -50,7 +50,7 @@ class AccountTest < ActiveSupport::TestCase    test "error on reused username" do      with_config invite_required: false do -      attributes = FactoryGirl.attributes_for :user +      attributes = user_attributes        user = Account.create attributes        dup = Account.create attributes        assert !dup.valid? @@ -72,17 +72,17 @@ class AccountTest < ActiveSupport::TestCase      # 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, :invite_code => @testcode.invite_code)) +        user = Account.create(user_attributes( :invite_code => @testcode.invite_code))          user.account.destroy        end      end    end    test "change username and create alias" do -    user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +    user = Account.create(user_attributes( :invite_code => @testcode.invite_code))      old_id = user.identity      old_email = user.email_address -    user.account.update(FactoryGirl.attributes_for(:user)) +    user.account.update(user_attributes)      user.reload      old_id.reload      assert user.valid? @@ -97,7 +97,7 @@ class AccountTest < ActiveSupport::TestCase    end    test "create recovery code if it does not exist" do -    user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +    user = Account.create(user_attributes( :invite_code => @testcode.invite_code))      user.account.update(:recovery_code_verifier => "abc", :recovery_code_salt => "123")      user.reload @@ -108,7 +108,7 @@ class AccountTest < ActiveSupport::TestCase    end    test "update recovery code that already exists" do -    user = Account.create(FactoryGirl.attributes_for(:user, +    user = Account.create(user_attributes(        :invite_code => @testcode.invite_code,        :recovery_code_verifier => "000",        :recovery_code_salt => "111")) @@ -123,7 +123,7 @@ class AccountTest < ActiveSupport::TestCase    end    test "update password" do -    user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +    user = Account.create(user_attributes( :invite_code => @testcode.invite_code))      user.account.update(:password_verifier => "551A8B", :password_salt => "551A8B")      assert_equal "551A8B", user.password_verifier @@ -134,18 +134,27 @@ class AccountTest < ActiveSupport::TestCase    test "Invite code count goes up by 1 when the invite code is entered" do      with_config invite_required: true do -      user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +      user = Account.create(user_attributes( :invite_code => @testcode.invite_code))        user_code = InviteCode.find_by_invite_code user.invite_code -      user_code.save        user.save        assert user.persisted?        assert_equal 1, user_code.invite_count      end +  end +  test "Single use invite code is destroyed when used by test user" do +    with_config invite_required: true do +      attrs = user_attributes invite_code: @testcode.invite_code +      attrs[:login] = 'test_user_' + attrs[:login] +      user = Account.create(attrs) +      user.save +      assert user.persisted?, user.errors.inspect +      assert_nil InviteCode.find_by_invite_code user.invite_code +    end    end    test "Invite code stays zero when invite code is not used" do -    #user = Account.create(FactoryGirl.attributes_for(:user, :invite_code => @testcode.invite_code)) +    #user = Account.create(user_attributes( :invite_code => @testcode.invite_code))      invalid_user = FactoryGirl.build(:user, :invite_code => @testcode.invite_code)      invalid_user.save      user_code = InviteCode.find_by_invite_code invalid_user.invite_code @@ -155,7 +164,7 @@ class AccountTest < ActiveSupport::TestCase    end    test "disabled accounts have no cert fingerprints" do -    user = Account.create(FactoryGirl.attributes_for(:user)) +    user = Account.create(user_attributes)      cert = stub(expiry: 1.month.from_now, fingerprint: SecureRandom.hex)      user.identity.register_cert cert      user.identity.save @@ -184,6 +193,8 @@ class AccountTest < ActiveSupport::TestCase      end    end +  protected +    # Tests for the presence of the errors given.    # Does not test for the absence of other errors - so there may be more.    def assert_has_errors(record, errors) @@ -194,4 +205,8 @@ class AccountTest < ActiveSupport::TestCase      end    end +  def user_attributes(attrs = {}) +    FactoryGirl.attributes_for :user, attrs +  end +  end | 
