package accounts.dao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import accounts.dao.AccountRepository;
import accounts.model.Account;
import accounts.model.Beneficiary;
import common.money.MonetaryAmount;
import common.money.Percentage;
import static org.junit.Assert.*;
/**
* Unit test for the Hibernate-based account manager implementation. Tests application behavior to verify the Account
* Hibernate mapping is correct.
*/
@ContextConfiguration(locations={"classpath:applicationContextTest.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AccountDaoTests {
@Autowired
private AccountRepository accountRepository;
@Test
public void testFindByCreditCard() {
Account account = accountRepository.findByCreditCard("1234123412341234");
// assert the returned account contains what you expect given the state of the database
// and the Account Hibernate mapping configuration
assertNotNull("account should never be null", account);
assertEquals("wrong entity id", Long.valueOf(0), account.getEntityId());
assertEquals("wrong account number", "123456789", account.getNumber());
assertEquals("wrong name", "Keith and Keri Donald", account.getName());
assertEquals("wrong beneficiary collection size", 2, account.getBeneficiaries().size());
Beneficiary b1 = account.getBeneficiary("Annabelle");
assertNotNull("Annabelle should be a beneficiary", b1);
assertEquals("wrong savings", MonetaryAmount.valueOf("0.00"), b1.getSavings());
assertEquals("wrong allocation percentage", Percentage.valueOf("50%"), b1.getAllocationPercentage());
Beneficiary b2 = account.getBeneficiary("Corgan");
assertNotNull("Corgan should be a beneficiary", b2);
assertEquals("wrong savings", MonetaryAmount.valueOf("0.00"), b2.getSavings());
assertEquals("wrong allocation percentage", Percentage.valueOf("50%"), b2.getAllocationPercentage());
}
}