Package com.wesabe.api.accounts.resources.tests

Source Code of com.wesabe.api.accounts.resources.tests.AccountBalancesResourceTest$Creating_A_New_Account_Balance

package com.wesabe.api.accounts.resources.tests;


import static org.fest.assertions.Assertions.*;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;

import java.util.Locale;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;

import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.mockito.Mockito;

import com.google.common.collect.Sets;
import com.wesabe.api.accounts.dao.AccountBalanceDAO;
import com.wesabe.api.accounts.dao.AccountDAO;
import com.wesabe.api.accounts.entities.Account;
import com.wesabe.api.accounts.entities.AccountBalance;
import com.wesabe.api.accounts.entities.AccountType;
import com.wesabe.api.accounts.params.DecimalParam;
import com.wesabe.api.accounts.params.IntegerParam;
import com.wesabe.api.accounts.presenters.AccountBalancePresenter;
import com.wesabe.api.accounts.resources.AccountBalancesResource;
import com.wesabe.api.util.auth.WesabeUser;

@RunWith(Enclosed.class)
public class AccountBalancesResourceTest {
  private static class Setup {
    protected AccountBalancesResource accountBalancesResource;
    protected WesabeUser user;
    protected AccountDAO accountDAO;
    protected AccountBalanceDAO accountBalanceDAO;
    protected AccountBalancePresenter accountBalancePresenter;
    protected Account account;
    protected AccountBalance accountBalance;
   
    @Before
    public void setup() {
      accountDAO = mock(AccountDAO.class);
      accountBalanceDAO = mock(AccountBalanceDAO.class);
      accountBalancePresenter = mock(AccountBalancePresenter.class);
     
      accountBalancesResource = new AccountBalancesResource(accountBalanceDAO, accountDAO, accountBalancePresenter);
      user = mock(WesabeUser.class);
     
      account = mock(Account.class);
      when(account.getAccountType()).thenReturn(AccountType.CHECKING);
      when(account.hasBalance()).thenReturn(true);
      accountBalance = mock(AccountBalance.class);
     
      expectAccount(account);
    }
   
    protected void expectAccount(Account account) {
      when(accountDAO.findAccount(Mockito.anyString(), eq(1))).thenReturn(account);
    }
  }
 
  public static class Requesting_All_Account_Balances extends Setup {
    @Before
    public void setup() {
      super.setup();
      when(account.getAccountBalances()).thenReturn(Sets.newHashSet(accountBalance));
    }
   
    @Test
    public void itPresentsAllAccountBalances() {
      accountBalancesResource.list(user, Locale.ENGLISH, new IntegerParam("1"));
      verify(accountBalancePresenter).present(accountBalance, Locale.ENGLISH);
    }
  }
 
  public static class Requesting_All_Account_Balances_For_An_Account_Without_A_Balance extends Setup {
    @Before
    public void setup() {
      super.setup();
      when(account.hasBalance()).thenReturn(false);
      when(account.getAccountBalances()).thenReturn(Sets.newHashSet(accountBalance));
    }
   
    @Test
    public void itDoesNotPresentAnyAccountBalances() {
      accountBalancesResource.list(user, Locale.ENGLISH, new IntegerParam("1"));
      verify(accountBalancePresenter, never()).present(Mockito.any(AccountBalance.class), eq(Locale.ENGLISH));
    }
  }
 
  public static class Creating_A_New_Account_Balance extends Setup {
    @Before
    public void setup() {
      super.setup();
    }
   
    @Test
    public void itCreatesANewAccountBalance() {
      accountBalancesResource.create(user, Locale.ENGLISH, new IntegerParam("1"), new DecimalParam("20"));
      verify(accountBalanceDAO).create(Mockito.any(AccountBalance.class));
    }
  }
 
  public static class Creating_A_New_Account_Balance_Without_An_Amount extends Setup {
    @Before
    public void setup() {
      super.setup();
    }
   
    @Test
    public void itReturnsBadRequest() {
      try {
        accountBalancesResource.create(user, Locale.ENGLISH, new IntegerParam("1"), null);
        fail("expected a Bad Request exception");
      } catch (WebApplicationException ex) {
        assertThat(ex.getResponse().getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode());
      }
    }
  }
 
  public static class Creating_A_New_Account_Balance_With_An_Account_Without_Balances extends Setup {
    @Before
    public void setup() {
      super.setup();
      when(account.hasBalance()).thenReturn(false);
    }
   
    @Test
    public void itReturnsBadRequest() {
      try {
        accountBalancesResource.create(user, Locale.ENGLISH, new IntegerParam("1"), new DecimalParam("20"));
        fail("expected a Bad Request exception");
      } catch (WebApplicationException ex) {
        assertThat(ex.getResponse().getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode());
      }
    }
  }
}
TOP

Related Classes of com.wesabe.api.accounts.resources.tests.AccountBalancesResourceTest$Creating_A_New_Account_Balance

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.