task4/solution13/test/org/apidesign/apifest08/test/ConvertorWithDateExchangeRateTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 25 Oct 2008 20:53:00 +0200
changeset 84 2ae6e4aa7aef
permissions -rw-r--r--
Solutions by Petr Smid
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 package org.apidesign.apifest08.test;
     6 
     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;
    19 
    20 /**
    21  *
    22  * @author arnostvalicek
    23  */
    24 public class ConvertorWithDateExchangeRateTest extends TestCase {
    25 
    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;
    30 
    31     @Override
    32     protected void setUp() throws Exception {
    33         super.setUp();
    34         df = new SimpleDateFormat("yyyy-MM-dd HH:mm zzzz");
    35     }
    36 
    37     @Override
    38     protected void tearDown() throws Exception {
    39         super.tearDown();
    40         df = null;
    41     }
    42 
    43     private IDateExchangeRateEngine createDateEngine() {
    44         IDateExchangeRateEngine engine = new IDateExchangeRateEngine() {
    45 
    46             public ExchangeRate getExchangeRate(ConvertorCurrency fromCurrency, ConvertorCurrency toCurrency, Date date) {
    47                 int day = date.getDay();
    48                 if (day >= 1 && day <= 5) {
    49                     //weekday
    50                     return new ExchangeRate(new BigDecimal(1), new BigDecimal(2));
    51                 } else {
    52                     //weekend
    53                     return new ExchangeRate(new BigDecimal(1), new BigDecimal(3));
    54                 }
    55             }
    56         };
    57         return engine;
    58     }
    59 
    60     private Convertor createConvertor() {
    61         ExchangeRateProvider exchangeRateProvider = ExchangeRateProvider.createDateExchangeRateProvider(createDateEngine());
    62         Convertor c = Convertor.createConvertor(exchangeRateProvider);
    63         return c;
    64     }
    65 
    66     public void testConvertuUsingDifferentRatesForDays() throws ParseException {
    67         Convertor c = createConvertor();
    68         {
    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());
    72         }
    73         {
    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());
    77         }
    78     }
    79 
    80     public void testConvertUsingDifferenDefaultDay() throws ParseException {
    81         class MyDateProvider implements IDateProviderEngine {
    82 
    83             private Date date;
    84 
    85             void setDate(Date date) {
    86                 this.date = date;
    87             }
    88 
    89             public Date getCurrentDate() {
    90                 return date;
    91             }
    92         }
    93 
    94         Convertor c = createConvertor();
    95         MyDateProvider dp = new MyDateProvider();
    96         c.setDateProvider(dp);
    97 
    98         {
    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());
   102         }
   103         {
   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());
   107         }
   108     }
   109 }