package org.fourthline.konto.test.ledger;
import com.google.inject.Provider;
import org.fourthline.konto.client.ledger.account.AccountActivity;
import org.fourthline.konto.client.ledger.account.AccountGroupSuggestion;
import org.fourthline.konto.client.ledger.account.AccountPlace;
import org.fourthline.konto.client.ledger.account.BankAccountPresenter;
import org.fourthline.konto.client.settings.GlobalSettings;
import org.fourthline.konto.shared.AccountType;
import org.fourthline.konto.shared.entity.Account;
import org.fourthline.konto.shared.entity.AccountGroup;
import org.fourthline.konto.shared.entity.BankAccount;
import org.fourthline.konto.shared.Constants;
import org.fourthline.konto.test.IntegrationTest;
import org.fourthline.konto.test.ledger.mock.MockAccountView;
import org.fourthline.konto.test.ledger.mock.MockBankAccountView;
import org.fourthline.konto.test.ledger.mock.MockSuggestionSelectView;
import org.seamless.mock.gwt.MockAcceptsOneWidget;
import org.testng.annotations.Test;
import java.math.BigDecimal;
import java.util.List;
import static org.testng.Assert.assertEquals;
/**
* @author Christian Bauer
*/
public class AccountActivityTest extends IntegrationTest {
protected MockBankAccountView bankAccountView = new MockBankAccountView();
protected final BankAccountPresenter bankAccountPresenter = new BankAccountPresenter(bankAccountView);
protected Provider<BankAccountPresenter> bankAccountPresenterProvider = new
Provider<BankAccountPresenter>() {
@Override
public BankAccountPresenter get() {
return bankAccountPresenter;
}
};
protected MockSuggestionSelectView<AccountGroupSuggestion> groupSelectView =
new MockSuggestionSelectView<AccountGroupSuggestion>();
protected MockAccountView accountView =
new MockAccountView(groupSelectView);
protected AccountActivity createAccountActivity() {
return new AccountActivity(accountView,
bankAccountPresenterProvider,
placeController,
eventBus,
ledgerServiceAsync,
currencyServiceAsync,
new GlobalSettings(settingsServiceAsync, eventBus)
);
}
@Test
public void createBankAccount() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace());
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
assertEquals(accountView.currencies.size(), 5);
assertEquals(accountView.currency, Constants.SYSTEM_BASE_CURRENCY_CODE);
assert accountView.getEffectiveOnProperty().get() != null;
assertEquals(accountView.getInitialBalanceProperty().get().toString(), new BigDecimal("0").toString());
assertEquals(accountView.createMode, true);
assertEquals(accountView.focus, true);
accountActivity.typeSelected(AccountType.BankAccount);
assertEquals(accountView.formPanelRows.get(0), bankAccountView);
accountView.nameProperty.set("Some Bankaccount");
bankAccountView.bankNameProperty.set("My Bank");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
BankAccount acc = (BankAccount) accountDAO.getAccount(accountActivity.getAccount().getId());
assertEquals(acc.getName(), "Some Bankaccount");
assertEquals(acc.getGroupId(), null);
assertEquals(acc.getGroupName(), null);
assertEquals(acc.getInitialBalance().getReportString(false, false, true), "");
assertEquals(acc.getMonetaryUnit().getCurrencyCode(), "CHF");
assertEquals(acc.getBankName(), "My Bank");
assertEquals(acc.getNumber(), null);
assertEquals(acc.getRouting(), null);
getCurrentSession().getTransaction().commit();
}
@Test
public void createAccountCreateGroup() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace());
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountActivity.typeSelected(AccountType.Expense);
accountView.nameProperty.set("Some Account");
groupSelectView.presenter.nameEntered("Some Group");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
Account acc = accountDAO.getAccount(accountActivity.getAccount().getId());
assert acc.getGroupId() != null;
assertEquals(acc.getGroupName(), "Some Group");
getCurrentSession().getTransaction().commit();
}
@Test
public void createAccountExistingGroup() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace());
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountActivity.typeSelected(AccountType.BankAccount);
accountView.nameProperty.set("Some Account");
groupSelectView.presenter.nameEntered("Automobile");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
Account acc = accountDAO.getAccount(accountActivity.getAccount().getId());
assert acc.getGroupId() != null;
assertEquals(acc.getGroupName(), "Automobile");
getCurrentSession().getTransaction().commit();
}
@Test
public void editAccount() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace(3l));
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountView.nameProperty.set("Gasoline");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
Account acc = accountDAO.getAccount(accountActivity.getAccount().getId());
assertEquals(acc.getName(), "Gasoline");
assert acc.getGroupId() != null;
assertEquals(acc.getGroupName(), "Automobile");
getCurrentSession().getTransaction().commit();
}
@Test
public void editAccountNewGroup() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace(3l));
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountView.nameProperty.set("Gasoline");
groupSelectView.presenter.nameEntered("Car");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
Account acc = accountDAO.getAccount(accountActivity.getAccount().getId());
assertEquals(acc.getName(), "Gasoline");
assert acc.getGroupId() != null;
assertEquals(acc.getGroupName(), "Car");
List<AccountGroup> groups = accountDAO.getAccountGroups(AccountType.Expense, "Automobile", true);
assertEquals(groups.size(), 1);
groups = accountDAO.getAccountGroups(AccountType.Expense, "Car", true);
assertEquals(groups.size(), 1);
getCurrentSession().getTransaction().commit();
}
@Test
public void editAccountMoveTwoNewGroup() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace(3l));
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
groupSelectView.presenter.nameEntered("Car");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace(4l));
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
groupSelectView.presenter.nameEntered("Car");
accountActivity.save();
getCurrentSession().getTransaction().commit();
getCurrentSession().beginTransaction();
List<AccountGroup> groups = accountDAO.getAccountGroups(AccountType.Expense, "Automobile", true);
assertEquals(groups.size(), 0);
groups = accountDAO.getAccountGroups(AccountType.Expense, "Car", true);
assertEquals(groups.size(), 1);
getCurrentSession().getTransaction().commit();
}
@Test
public void createAccountMixedGroup() throws Exception {
getCurrentSession().beginTransaction();
AccountActivity accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace());
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountActivity.typeSelected(AccountType.Asset);
accountView.nameProperty.set("Some Asset");
groupSelectView.presenter.nameEntered("Some Group");
accountActivity.save();
getCurrentSession().getTransaction().commit();
Long firstId = accountActivity.getAccount().getId();
// Different sub-type, same group!
getCurrentSession().beginTransaction();
accountActivity = createAccountActivity();
accountActivity.init(new AccountPlace());
accountActivity.start(new MockAcceptsOneWidget(), eventBus);
accountActivity.typeSelected(AccountType.BankAccount);
accountView.nameProperty.set("Some (Bank) Asset");
groupSelectView.presenter.nameEntered("Some Group");
accountActivity.save();
getCurrentSession().getTransaction().commit();
Long secondId = accountActivity.getAccount().getId();
getCurrentSession().beginTransaction();
assertEquals(accountDAO.getAccount(firstId).getGroupName(), "Some Group");
assertEquals(accountDAO.getAccount(secondId).getGroupName(), "Some Group");
getCurrentSession().getTransaction().commit();
}
}