/* * Copyright 2003-2011 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package postingrules; import mf.Currency; import mf.DateRange; import mf.MfDate; import mf.Money; import java.util.ArrayList; import java.util.List; public class AccountTester extends junit.framework.TestCase { private Account myReceivables = new Account(Currency.USD); private Account myRevenue = new Account(Currency.USD); private Account myDeferred = new Account(Currency.USD); public AccountTester(String name) { super(name); } public void setUp() { MfDate.setToday(2001,1,1); myReceivables.addEntry(Money.dollars(500), new MfDate(1999, 12, 4)); myReceivables.addEntry(Money.dollars(300), new MfDate(2000, 1, 4)); myReceivables.addEntry(new Entry(Money.dollars(-400), new MfDate(2000, 2, 15))); } public void testNewAccountIsValid() { assertTrue(myReceivables.isValid()); } public void testEntriesAreAddedCorrectly() { //condsider ditching this one List<Entry> entries = new ArrayList<Entry>(); entries.add(new Entry(Money.dollars(500), MfDate.today())); entries.add(new Entry(Money.dollars(300), MfDate.today())); entries.add(new Entry(Money.dollars(-400), MfDate.today())); assertEquals(Money.dollars(400), Entry.total(entries)); } public void testAddingOtherCurrencyCausesException() { try { myReceivables.addEntry(new Money(10, Currency.DEM), new MfDate(1999, 12, 4)); fail(); } catch (IllegalArgumentException correctReponse) { } assertEquals(Money.dollars(400), myReceivables.balance()); } public void testBalanceOfEmptyAccountIsZero() { Account empty = new Account(Currency.USD); assertEquals(Money.dollars(0), empty.balance()); } public void testBalanceIsSumOfEntries() { assertEquals(Money.dollars(400), myReceivables.balance()); assertEquals(Money.dollars(800), myReceivables.balance(new MfDate(2000, 2, 1))); assertEquals(Money.dollars(-100), myReceivables.balance(new DateRange(new MfDate(2000, 1, 1), new MfDate(2000, 12, 31)))); } public void testBalanceWorksUsingTransactions() { myReceivables = new Account(Currency.USD); myRevenue.withdraw(Money.dollars(500), myReceivables, new MfDate(1, 4, 99)); myRevenue.withdraw(Money.dollars(200), myDeferred, new MfDate(1, 4, 99)); assertEquals(Money.dollars(500), myReceivables.balance()); assertEquals(Money.dollars(200), myDeferred.balance()); assertEquals(Money.dollars(-700), myRevenue.balance()); } public void testCopyMakesCopiesOfEntriesInNewAccount() { Account copy = myReceivables.copy(); assertEquals(Money.dollars(400), copy.balance()); copy.addEntry(Money.dollars(200), MfDate.today()); assertEquals(Money.dollars(600), copy.balance()); assertEquals(Money.dollars(400), myReceivables.balance()); assertTrue(copy.isValid()); } public void testDepositsSumsPositiveEntries() { assertEquals(Money.dollars(300), myReceivables.deposits(new DateRange(new MfDate(2000, 1, 1), new MfDate(2000, 12, 31)))); } public void testBalanceSumsCorrectlyWithNonDollars() { //consider remove Account newAccount = new Account(Currency.DEM); newAccount.addEntry(new Money(10, Currency.DEM), MfDate.today()); assertEquals(new Money(10, Currency.DEM), newAccount.balance()); DateRange range = new DateRange(MfDate.today(), MfDate.today()); assertEquals(new Money(10, Currency.DEM), newAccount.deposits(range)); assertEquals(new Money(0, Currency.DEM), newAccount.withdrawels(range)); } public void testWithdrawelsSumsNegativeEntries() { assertEquals(Money.dollars(-400), myReceivables.withdrawels(new DateRange(new MfDate(2000, 1, 1), new MfDate(2000, 12, 31)))); assertEquals(Money.dollars(0), myReceivables.withdrawels(new DateRange(new MfDate(1999, 1, 1), new MfDate(1999, 12, 31)))); } }