Package org.openbankdata.bank.americanexpress.service

Source Code of org.openbankdata.bank.americanexpress.service.AmericanExpressTransactionServiceTest

package org.openbankdata.bank.americanexpress.service;

import static org.junit.Assert.assertEquals;

import org.openbankdata.bank.americanexpress.client.AmericanExpressBankClient;
import org.openbankdata.bank.americanexpress.client.AmericanExpressTransactionPaginationStrategy;
import org.openbankdata.core.Account;
import org.openbankdata.core.Transaction;
import org.openbankdata.core.client.BankResponse;
import org.openbankdata.core.client.MockedBankResponse;
import org.openbankdata.core.client.PagedBankRequest;
import org.openbankdata.core.service.TransactionService;

import org.easymock.EasyMock;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Currency;
import java.util.List;

public class AmericanExpressTransactionServiceTest {

  private TransactionService mTransactionService;

  private AmericanExpressBankClient mockedBankClient;

  private static final String TRANSACTIONS_URL =
      "https://global.americanexpress.com/myca/intl/estatement/emea/statement.do";
  private static final String ACCOUNT_ID = "0";

  @Before
  public void setUp() {
    mockedBankClient = EasyMock.createMock(AmericanExpressBankClient.class);
    mTransactionService = new AmericanExpressTransactionService(mockedBankClient);
  }

  @Test
  public void testGetTransactions() {
    // Given
    // The transactions for Account 0 is splitted into two separate pages
    EasyMock.expect(mockedBankClient.get(getFirstTransactionRequest())).andReturn(
        mockedFirstTransactionResponse());
    EasyMock.expect(mockedBankClient.get(getSecondTransactionRequest())).andReturn(
        mockedSecondTransactionResponse());

    EasyMock.replay(mockedBankClient);

    // When
    // Getting all available transactions for Account 0
    Account account = new Account();
    account.setId(ACCOUNT_ID);
    List<Transaction> actual = mTransactionService.getTransactions(account);

    // Then
    assertEquals("All available transactions should have been returned", 2, actual.size());
    assertEquals("The transactions should have been correctly mapped.",
        expectedTransactions(), actual);

  }

  private List<Transaction> expectedTransactions() {
    List<Transaction> transactions = new ArrayList<Transaction>();

    Transaction t1 = new Transaction();
    t1.setAmount(new BigDecimal(-1625));
    t1.setCurrency(Currency.getInstance("SEK"));
    t1.setDescription("Company name 1");
    t1.setTransactionDate(new LocalDate("2014-01-23"));
    transactions.add(t1);

    Transaction t2 = new Transaction();
    t2.setAmount(new BigDecimal(2980));
    t2.setCurrency(Currency.getInstance("SEK"));
    t2.setDescription("Betalning");
    t2.setTransactionDate(new LocalDate("2014-01-27"));
    transactions.add(t2);

    return transactions;
  }

  private PagedBankRequest getFirstTransactionRequest() {
    return (PagedBankRequest) new PagedBankRequest()
    .setPaginationStrategy(new AmericanExpressTransactionPaginationStrategy())
    .setUri(TRANSACTIONS_URL)
    .addParam("sorted_index", ACCOUNT_ID)
    .addParam("Face", "sv_SE");

  }

  private PagedBankRequest getSecondTransactionRequest() {
    PagedBankRequest request = getFirstTransactionRequest();
    request.setPage(1);
    return request;
  }

  private BankResponse mockedFirstTransactionResponse() {
    MockedBankResponse response = new MockedBankResponse("americanexpress-paginated-transactions-1.htm");
    response.code(200);
    return response;
  }

  private BankResponse mockedSecondTransactionResponse() {
    MockedBankResponse response = new MockedBankResponse("americanexpress-paginated-transactions-2.htm");
    response.code(200);
    return response;
  }
}
TOP

Related Classes of org.openbankdata.bank.americanexpress.service.AmericanExpressTransactionServiceTest

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.