task4/solution13/test/org/apidesign/apifest08/test/ConvertorWithDateExchangeRateTest.java
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package org.apidesign.apifest08.test;
7 import java.math.BigDecimal;
8 import java.text.ParseException;
9 import java.text.SimpleDateFormat;
10 import java.util.Date;
11 import junit.framework.TestCase;
12 import org.apidesign.apifest08.currency.ConversionResult;
13 import org.apidesign.apifest08.currency.Convertor;
14 import org.apidesign.apifest08.currency.ConvertorCurrency;
15 import org.apidesign.apifest08.currency.ExchangeRate;
16 import org.apidesign.apifest08.currency.ExchangeRateProvider;
17 import org.apidesign.apifest08.currency.IDateExchangeRateEngine;
18 import org.apidesign.apifest08.currency.IDateProviderEngine;
22 * @author arnostvalicek
24 public class ConvertorWithDateExchangeRateTest extends TestCase {
26 private static ConvertorCurrency CZK = ConvertorCurrency.getInstance("CZK");
27 private static ConvertorCurrency SKK = ConvertorCurrency.getInstance("SKK");
28 private static ConvertorCurrency USD = ConvertorCurrency.getInstance("USD");
29 private SimpleDateFormat df;
32 protected void setUp() throws Exception {
34 df = new SimpleDateFormat("yyyy-MM-dd HH:mm zzzz");
38 protected void tearDown() throws Exception {
43 private IDateExchangeRateEngine createDateEngine() {
44 IDateExchangeRateEngine engine = new IDateExchangeRateEngine() {
46 public ExchangeRate getExchangeRate(ConvertorCurrency fromCurrency, ConvertorCurrency toCurrency, Date date) {
47 int day = date.getDay();
48 if (day >= 1 && day <= 5) {
50 return new ExchangeRate(new BigDecimal(1), new BigDecimal(2));
53 return new ExchangeRate(new BigDecimal(1), new BigDecimal(3));
60 private Convertor createConvertor() {
61 ExchangeRateProvider exchangeRateProvider = ExchangeRateProvider.createDateExchangeRateProvider(createDateEngine());
62 Convertor c = Convertor.createConvertor(exchangeRateProvider);
66 public void testConvertuUsingDifferentRatesForDays() throws ParseException {
67 Convertor c = createConvertor();
69 Date d1 = df.parse("2008-10-15 9:00 GMT"); //Wednesday
70 ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
71 assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
74 Date d1 = df.parse("2008-10-18 9:00 GMT"); //Saturday
75 ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
76 assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());
80 public void testConvertUsingDifferenDefaultDay() throws ParseException {
81 class MyDateProvider implements IDateProviderEngine {
85 void setDate(Date date) {
89 public Date getCurrentDate() {
94 Convertor c = createConvertor();
95 MyDateProvider dp = new MyDateProvider();
96 c.setDateProvider(dp);
99 dp.setDate(df.parse("2008-10-15 9:00 GMT")); //Wednesday
100 ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
101 assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
104 dp.setDate(df.parse("2008-10-18 9:00 GMT")); //Saturday
105 ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
106 assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());