Skip to content

Commit

Permalink
Simplify Plutus::Account spec
Browse files Browse the repository at this point in the history
  • Loading branch information
willglynn committed Feb 18, 2013
1 parent 01803e5 commit 702b32b
Showing 1 changed file with 59 additions and 53 deletions.
112 changes: 59 additions & 53 deletions spec/models/account_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,69 @@

module Plutus
describe Account do
let(:account) { FactoryGirl.build(:account) }
subject { account }

it { should_not be_valid } # must construct a child type instead

it "should not allow creating an account without a subtype" do
account = FactoryGirl.build(:account)
account.should_not be_valid
describe "when using a child type" do
let(:account) { FactoryGirl.create(:account, type: "Finance::Asset") }
it { should be_valid }

it "should be unique per name" do
conflict = FactoryGirl.build(:account, name: account.name, type: account.type)
conflict.should_not be_valid
conflict.errors[:name].should == ["has already been taken"]
end
end

it { should_not respond_to(:balance) }

describe ".trial_balance" do
subject { Account.trial_balance }
it { should be_kind_of BigDecimal }

context "when given no transactions" do
it { should == 0 }
end

context "when given correct transactions" do
before {
# credit accounts
liability = FactoryGirl.create(:liability)
equity = FactoryGirl.create(:equity)
revenue = FactoryGirl.create(:revenue)
contra_asset = FactoryGirl.create(:asset, :contra => true)
contra_expense = FactoryGirl.create(:expense, :contra => true)
# credit amounts
ca1 = FactoryGirl.build(:credit_amount, :account => liability, :amount => 100000)
ca2 = FactoryGirl.build(:credit_amount, :account => equity, :amount => 1000)
ca3 = FactoryGirl.build(:credit_amount, :account => revenue, :amount => 40404)
ca4 = FactoryGirl.build(:credit_amount, :account => contra_asset, :amount => 2)
ca5 = FactoryGirl.build(:credit_amount, :account => contra_expense, :amount => 333)

it "should be unique per name" do
FactoryGirl.create(:account, :name => "Test1", :type => "Plutus::Asset")
account = FactoryGirl.build(:account, :name => "Test1", :type => "Plutus::Asset")
account.should_not be_valid
account.errors[:name].should == ["has already been taken"]
end

it "should not have a balance method" do
lambda{Account.balance}.should raise_error(NoMethodError)
end
# debit accounts
asset = FactoryGirl.create(:asset)
expense = FactoryGirl.create(:expense)
contra_liability = FactoryGirl.create(:liability, :contra => true)
contra_equity = FactoryGirl.create(:equity, :contra => true)
contra_revenue = FactoryGirl.create(:revenue, :contra => true)
# debit amounts
da1 = FactoryGirl.build(:debit_amount, :account => asset, :amount => 100000)
da2 = FactoryGirl.build(:debit_amount, :account => expense, :amount => 1000)
da3 = FactoryGirl.build(:debit_amount, :account => contra_liability, :amount => 40404)
da4 = FactoryGirl.build(:debit_amount, :account => contra_equity, :amount => 2)
da5 = FactoryGirl.build(:debit_amount, :account => contra_revenue, :amount => 333)

it "should have a trial balance" do
Account.should respond_to(:trial_balance)
Account.trial_balance.should be_kind_of(BigDecimal)
FactoryGirl.create(:transaction, :credit_amounts => [ca1], :debit_amounts => [da1])
FactoryGirl.create(:transaction, :credit_amounts => [ca2], :debit_amounts => [da2])
FactoryGirl.create(:transaction, :credit_amounts => [ca3], :debit_amounts => [da3])
FactoryGirl.create(:transaction, :credit_amounts => [ca4], :debit_amounts => [da4])
FactoryGirl.create(:transaction, :credit_amounts => [ca5], :debit_amounts => [da5])
}

it { should == 0 }
end
end

it "should report a trial balance of 0 with correct transactions" do
# credit accounts
liability = FactoryGirl.create(:liability)
equity = FactoryGirl.create(:equity)
revenue = FactoryGirl.create(:revenue)
contra_asset = FactoryGirl.create(:asset, :contra => true)
contra_expense = FactoryGirl.create(:expense, :contra => true)
# credit amounts
ca1 = FactoryGirl.build(:credit_amount, :account => liability, :amount => 100000)
ca2 = FactoryGirl.build(:credit_amount, :account => equity, :amount => 1000)
ca3 = FactoryGirl.build(:credit_amount, :account => revenue, :amount => 40404)
ca4 = FactoryGirl.build(:credit_amount, :account => contra_asset, :amount => 2)
ca5 = FactoryGirl.build(:credit_amount, :account => contra_expense, :amount => 333)

# debit accounts
asset = FactoryGirl.create(:asset)
expense = FactoryGirl.create(:expense)
contra_liability = FactoryGirl.create(:liability, :contra => true)
contra_equity = FactoryGirl.create(:equity, :contra => true)
contra_revenue = FactoryGirl.create(:revenue, :contra => true)
# debit amounts
da1 = FactoryGirl.build(:debit_amount, :account => asset, :amount => 100000)
da2 = FactoryGirl.build(:debit_amount, :account => expense, :amount => 1000)
da3 = FactoryGirl.build(:debit_amount, :account => contra_liability, :amount => 40404)
da4 = FactoryGirl.build(:debit_amount, :account => contra_equity, :amount => 2)
da5 = FactoryGirl.build(:debit_amount, :account => contra_revenue, :amount => 333)

FactoryGirl.create(:transaction, :credit_amounts => [ca1], :debit_amounts => [da1])
FactoryGirl.create(:transaction, :credit_amounts => [ca2], :debit_amounts => [da2])
FactoryGirl.create(:transaction, :credit_amounts => [ca3], :debit_amounts => [da3])
FactoryGirl.create(:transaction, :credit_amounts => [ca4], :debit_amounts => [da4])
FactoryGirl.create(:transaction, :credit_amounts => [ca5], :debit_amounts => [da5])

Account.trial_balance.should == 0
end

end
end

0 comments on commit 702b32b

Please sign in to comment.