Package com.wesabe.api.accounts.dao.tests

Source Code of com.wesabe.api.accounts.dao.tests.CurrencyExchangeRateMapUpdaterTest$Initializing

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

import static com.wesabe.api.tests.util.CurrencyHelper.*;
import static com.wesabe.api.tests.util.DateHelper.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;

import java.math.BigDecimal;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.joda.time.DateTime;
import org.joda.time.DateTimeUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.mockito.InOrder;

import com.google.common.collect.ImmutableList;
import com.wesabe.api.accounts.dao.CurrencyExchangeRateMapUpdater;
import com.wesabe.api.accounts.entities.CurrencyExchangeRate;
import com.wesabe.api.util.money.CurrencyExchangeRateMap;

@RunWith(Enclosed.class)
public class CurrencyExchangeRateMapUpdaterTest {
  public static class Initializing {
    private ScheduledExecutorService executorService;
   
    @Test
    public void itSchedulesItselfToRunEvery12HoursWithA12HourDelay() throws Exception {
      this.executorService = mock(ScheduledExecutorService.class);
     
      final CurrencyExchangeRateMapUpdater updater = new CurrencyExchangeRateMapUpdater(null, null, executorService, null);
     
      verify(executorService).scheduleAtFixedRate(updater, 12, 12, TimeUnit.HOURS);
    }
  }
 
  public static class Updating_The_Currency_Exchange_Rate_Map {
    private Query query;
    private Session session;
    private SessionFactory sessionFactory;
    private CurrencyExchangeRateMap exchangeRateMap;
    private ScheduledExecutorService executorService;
    private Logger logger;
    private CurrencyExchangeRate rate;
    private CurrencyExchangeRateMapUpdater updater;
   
    @Before
    public void setup() throws Exception {
      this.rate = new CurrencyExchangeRate(EUR, 1.0, apr1st);
     
      this.logger = mock(Logger.class);
     
      this.query = mock(Query.class);
      when(query.list()).thenReturn(ImmutableList.of(rate));
     
      this.session = mock(Session.class);
      when(session.getNamedQuery(anyString())).thenReturn(query);
     
      this.sessionFactory = mock(SessionFactory.class);
      when(sessionFactory.openSession()).thenReturn(session);
     
      this.exchangeRateMap = mock(CurrencyExchangeRateMap.class);
     
      this.executorService = mock(ScheduledExecutorService.class);
     
      this.updater = new CurrencyExchangeRateMapUpdater(sessionFactory, exchangeRateMap, executorService, logger);
     
      DateTimeUtils.setCurrentMillisFixed(new DateTime(2009, 5, 20, 23, 43, 12, 0).getMillis());
    }
   
    @After
    public void teardown() throws Exception {
      DateTimeUtils.setCurrentMillisSystem();
    }
   
    @Test
    public void itOpensANewSession() throws Exception {
      updater.run();
     
      verify(sessionFactory).openSession();
    }
   
    @Test
    public void itGetsTheExchangeRatesNamedQueryAndExecutesIt() throws Exception {
      updater.run();
     
      InOrder inOrder = inOrder(session, query);
      inOrder.verify(session).getNamedQuery("com.wesabe.api.accounts.entities.CurrencyExchangeRate.findRecent");
      inOrder.verify(query).setParameter("date", new DateTime().minusHours(13));
      inOrder.verify(query).list();
    }
   
    @Test
    public void itAddsTheRatesToTheMap() throws Exception {
      updater.run();
     
      verify(exchangeRateMap).addExchangeRate(USD, EUR, apr1st, new BigDecimal("1"));
    }
   
    @Test
    public void itClosesTheSession() throws Exception {
      updater.run();
     
      verify(session).close();
    }
  }
}
TOP

Related Classes of com.wesabe.api.accounts.dao.tests.CurrencyExchangeRateMapUpdaterTest$Initializing

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.