Package org.internna.ossmoney.services.impl

Source Code of org.internna.ossmoney.services.impl.AccountServiceTest

package org.internna.ossmoney.services.impl;

import java.util.Date;
import java.util.Calendar;
import java.util.Locale;
import java.math.BigDecimal;
import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.internna.ossmoney.model.Bill;
import org.internna.ossmoney.model.Account;
import org.internna.ossmoney.model.Bill.RECURRING_INTERVAL;
import org.internna.ossmoney.model.Payee;
import org.internna.ossmoney.model.Subcategory;
import org.internna.ossmoney.util.SecurityUtils;
import org.internna.ossmoney.model.security.UserDetails;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.test.context.transaction.TransactionConfiguration;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(defaultRollback = true)
@ContextConfiguration(locations = {"classpath:/META-INF/spring/applicationContext.xml", "classpath:/META-INF/spring/applicationContext-security.xml"})
public class AccountServiceTest {

    @Autowired private AccountService accountService;
    @Autowired private AuthenticationManager authenticationManager;

  @Before
  public void setup() {
    SecurityUtils.authenticate(authenticationManager, "jose", "jose");
  }

    @Test
    public void testCalculateAmount() {
        assertEquals("Negative amount", new BigDecimal(-1), accountService.calculateAmount(new BigDecimal(-1)));
        assertEquals("Negative amount always", new BigDecimal(-1), accountService.calculateAmount(BigDecimal.ONE));
    }

    @Test
    public void testCalculateTargetAmount() {
        assertEquals("Positive amount", BigDecimal.TEN, accountService.calculateTargetAmount(BigDecimal.ONE, 10));
        assertEquals("Positive amount always", BigDecimal.TEN, accountService.calculateTargetAmount(new BigDecimal(-1), 10));
        assertEquals("Positive amount with exhange rates", BigDecimal.TEN, accountService.calculateTargetAmount(BigDecimal.ONE, -10));
    }

    @Test
    public void testTransferMoney() {
        Account origin = Account.findAccount(1L);
        Account target = Account.findAccount(2L);
        assertEquals("Six initial transactions", 6, origin.getTransactions().size());
        assertEquals("Two initial transactions", 2, target.getTransactions().size());
        UserDetails user = new UserDetails();
        accountService.transferMoney(user, origin, target, null, BigDecimal.ZERO, BigDecimal.ZERO, 0, null);
        assertEquals("Six initial transactions", 6, origin.getTransactions().size());
        assertEquals("Two initial transactions", 2, target.getTransactions().size());
        user = origin.getOwner();
        accountService.transferMoney(user, origin, target, new Date(), BigDecimal.ONE, BigDecimal.ZERO, 1, null);
        assertEquals("One transaction added to origin", 7, origin.getTransactions().size());
        assertEquals("One transaction added to target", 3, target.getTransactions().size());
        accountService.transferMoney(user, origin, target, new Date(), BigDecimal.ONE, BigDecimal.ONE, 1, null);
        assertEquals("Two transactions added to origin", 9, origin.getTransactions().size());
        assertEquals("One more transaction added to target", 4, target.getTransactions().size());
    }

    @Test
    public void testIsValidTransaction() {
        Account account = new Account();
        account.setClosed(Boolean.FALSE);
        UserDetails user = new UserDetails();
        user.setUsername("someuser");
        Calendar calendar = Calendar.getInstance();
        Date now = calendar.getTime();
        calendar.add(Calendar.YEAR, -1);
        account.setOpened(calendar.getTime());
        assertFalse("Null user", accountService.isValidTransaction(null, account, now, BigDecimal.ZERO));
        assertFalse("Null account", accountService.isValidTransaction(user, null, now, BigDecimal.ZERO));
        assertFalse("Not belongs", accountService.isValidTransaction(user, account, now, BigDecimal.ONE));
        account.setOwner(user);
        assertFalse("Null date", accountService.isValidTransaction(user, account, null, BigDecimal.ONE));
        assertFalse("Null amount", accountService.isValidTransaction(user, account, now, null));
        assertFalse("Zero amount", accountService.isValidTransaction(user, account, now, BigDecimal.ZERO));
        assertTrue("Transaction ok", accountService.isValidTransaction(user, account, now, BigDecimal.ONE));
    }

    @Test
    public void testPayBill() {
      UserDetails user = UserDetails.findCurrentUser();
      Bill bill = new Bill();
      bill.setOwner(user);
      bill.setAmount(100D);
      bill.setCurrency(Locale.US);
      bill.setLastTrigger(new Date());
      bill.setPayee(Payee.findMySelf(user));
      bill.setPeriod(RECURRING_INTERVAL.MONTHLY);
      bill.setCategory(Subcategory.findSubcategory(1L));
      bill.setDescription("a bill");
      bill.persist();
      Account account = Account.findAccount(3L);
      int transactions = account.getTransactions().size();
      accountService.payBill(user, bill, 3L, 101D, new Date());
      assertNotNull("Bill updated", bill.getLastPayment());
      assertTrue("Transaction created", (transactions + 1) == account.getTransactions().size());
    }

}
TOP

Related Classes of org.internna.ossmoney.services.impl.AccountServiceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.