Package org.openbankdata.bank.sveadirekt.service

Source Code of org.openbankdata.bank.sveadirekt.service.SveaDirektAccountServiceTest

package org.openbankdata.bank.sveadirekt.service;

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

import org.openbankdata.bank.sveadirekt.client.SveaDirektBankClient;
import org.openbankdata.core.Account;
import org.openbankdata.core.AccountType;
import org.openbankdata.core.client.BankRequest;
import org.openbankdata.core.client.BankResponse;
import org.openbankdata.core.client.Cache;
import org.openbankdata.core.client.MockedBankResponse;

import org.easymock.EasyMock;
import org.easymock.Mock;
import org.easymock.TestSubject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

public class SveaDirektAccountServiceTest {

  private static final String ACCOUNT_LIST = "sveadirekt-list-accounts.htm";
  private static final String ACCOUNTS_URL =
      "https://services.sveadirekt.se/faces/WEB-INF/britney_jsp_s/home.jsp";

  private Cache mockedCache;

  @Mock
  private SveaDirektBankClient mockedBankClient;

  @Mock
  private SveaDirektTransactionService mockedTransactionService;

  @TestSubject
  private SveaDirektAccountService mAccountService;

  @Before
  public void setUp() {
    mockedCache = new Cache();
    mockedBankClient = EasyMock.createMock(SveaDirektBankClient.class);
    mockedTransactionService = EasyMock.createMock(SveaDirektTransactionService.class);
    mAccountService = new SveaDirektAccountService(mockedBankClient, mockedTransactionService);
  }

  @After
  public void tearDown() {
    EasyMock.reset(mockedBankClient, mockedTransactionService);
  }

  @Test
  public void testGetSingleSavingsAccounts() {
    // Given
    // A user that has a single savings account
    setUpMocks();

    // When
    // Fetching the account details from the website
    List<Account> actual = mAccountService.getAccounts();

    // Then
    EasyMock.verify(mockedBankClient, mockedTransactionService);

    assertEquals("The returned list should only contain the expected account", 1, actual.size());
    assertEquals("The accounts details should have been fetched.", getExpectedAccount(),
        actual.get(0));
    assertTrue("First account's transactions should have been added to the cache",
        mockedCache.exists(getTransactionsRequest()));
  }

  private Account getExpectedAccount() {
    Account account = new Account();
    account.setAccountNumber("1234567");
    account.setCurrency(Currency.getInstance("SEK"));
    account.setName("Sparkonto");
    BigDecimal balance = new BigDecimal(12345);
    account.setAvailable(balance);
    account.setBalance(balance);
    account.setAccountType(AccountType.SAVINGS);
    account.setId("_idcl:0:_id15");
    return account;
  }

  private BankRequest getAccountsRequest() {
    BankRequest bankRequest = new BankRequest(ACCOUNTS_URL);
    bankRequest.addParam("homeForm:balance", "Saldo");
    bankRequest.addParam("homeForm", "homeForm");
    return bankRequest;
  }

  private BankResponse getExpectedAccountsResponse() {
    MockedBankResponse bankResponse = new MockedBankResponse(ACCOUNT_LIST);
    bankResponse.code(200);
    return bankResponse;
  }

  private BankRequest getTransactionsRequest() {
    return new BankRequest("http://foo.bar");
  }

  private void setUpMocks() {
    EasyMock.expect(mockedBankClient.post(getAccountsRequest())).andReturn(
        getExpectedAccountsResponse());
    EasyMock.expect(mockedBankClient.getCache()).andReturn(mockedCache);
    EasyMock.expect(mockedTransactionService.createTransactionRequest(getExpectedAccount()))
        .andReturn(
            getTransactionsRequest());
    EasyMock.replay(mockedBankClient, mockedTransactionService);
  }
}
TOP

Related Classes of org.openbankdata.bank.sveadirekt.service.SveaDirektAccountServiceTest

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.