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
jaroslav@63
     1
/*
jaroslav@63
     2
 * To change this template, choose Tools | Templates
jaroslav@63
     3
 * and open the template in the editor.
jaroslav@63
     4
 */
jaroslav@63
     5
package org.apidesign.apifest08.test;
jaroslav@63
     6
jaroslav@63
     7
import java.math.BigDecimal;
jaroslav@63
     8
import java.text.ParseException;
jaroslav@63
     9
import java.text.SimpleDateFormat;
jaroslav@63
    10
import java.util.Date;
jaroslav@63
    11
import junit.framework.TestCase;
jaroslav@63
    12
import org.apidesign.apifest08.currency.ConversionResult;
jaroslav@63
    13
import org.apidesign.apifest08.currency.Convertor;
jaroslav@63
    14
import org.apidesign.apifest08.currency.ConvertorCurrency;
jaroslav@63
    15
import org.apidesign.apifest08.currency.ExchangeRate;
jaroslav@63
    16
import org.apidesign.apifest08.currency.ExchangeRateProvider;
jaroslav@63
    17
import org.apidesign.apifest08.currency.IDateExchangeRateEngine;
jaroslav@63
    18
import org.apidesign.apifest08.currency.IDateProviderEngine;
jaroslav@63
    19
jaroslav@63
    20
/**
jaroslav@63
    21
 *
jaroslav@63
    22
 * @author arnostvalicek
jaroslav@63
    23
 */
jaroslav@63
    24
public class ConvertorWithDateExchangeRateTest extends TestCase {
jaroslav@63
    25
jaroslav@63
    26
    private static ConvertorCurrency CZK = ConvertorCurrency.getInstance("CZK");
jaroslav@63
    27
    private static ConvertorCurrency SKK = ConvertorCurrency.getInstance("SKK");
jaroslav@63
    28
    private static ConvertorCurrency USD = ConvertorCurrency.getInstance("USD");
jaroslav@63
    29
    private SimpleDateFormat df;
jaroslav@63
    30
jaroslav@63
    31
    @Override
jaroslav@63
    32
    protected void setUp() throws Exception {
jaroslav@63
    33
        super.setUp();
jaroslav@63
    34
        df = new SimpleDateFormat("yyyy-MM-dd HH:mm zzzz");
jaroslav@63
    35
    }
jaroslav@63
    36
jaroslav@63
    37
    @Override
jaroslav@63
    38
    protected void tearDown() throws Exception {
jaroslav@63
    39
        super.tearDown();
jaroslav@63
    40
        df = null;
jaroslav@63
    41
    }
jaroslav@63
    42
jaroslav@63
    43
    private IDateExchangeRateEngine createDateEngine() {
jaroslav@63
    44
        IDateExchangeRateEngine engine = new IDateExchangeRateEngine() {
jaroslav@63
    45
jaroslav@63
    46
            public ExchangeRate getExchangeRate(ConvertorCurrency fromCurrency, ConvertorCurrency toCurrency, Date date) {
jaroslav@63
    47
                int day = date.getDay();
jaroslav@63
    48
                if (day >= 1 && day <= 5) {
jaroslav@63
    49
                    //weekday
jaroslav@63
    50
                    return new ExchangeRate(new BigDecimal(1), new BigDecimal(2));
jaroslav@63
    51
                } else {
jaroslav@63
    52
                    //weekend
jaroslav@63
    53
                    return new ExchangeRate(new BigDecimal(1), new BigDecimal(3));
jaroslav@63
    54
                }
jaroslav@63
    55
            }
jaroslav@63
    56
        };
jaroslav@63
    57
        return engine;
jaroslav@63
    58
    }
jaroslav@63
    59
jaroslav@63
    60
    private Convertor createConvertor() {
jaroslav@63
    61
        ExchangeRateProvider exchangeRateProvider = ExchangeRateProvider.createDateExchangeRateProvider(createDateEngine());
jaroslav@63
    62
        Convertor c = Convertor.createConvertor(exchangeRateProvider);
jaroslav@63
    63
        return c;
jaroslav@63
    64
    }
jaroslav@63
    65
jaroslav@63
    66
    public void testConvertuUsingDifferentRatesForDays() throws ParseException {
jaroslav@63
    67
        Convertor c = createConvertor();
jaroslav@63
    68
        {
jaroslav@63
    69
            Date d1 = df.parse("2008-10-15 9:00 GMT");  //Wednesday
jaroslav@63
    70
            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
jaroslav@63
    71
            assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
jaroslav@63
    72
        }
jaroslav@63
    73
        {
jaroslav@63
    74
            Date d1 = df.parse("2008-10-18 9:00 GMT");  //Saturday
jaroslav@63
    75
            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
jaroslav@63
    76
            assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());
jaroslav@63
    77
        }
jaroslav@63
    78
    }
jaroslav@63
    79
jaroslav@63
    80
    public void testConvertUsingDifferenDefaultDay() throws ParseException {
jaroslav@63
    81
        class MyDateProvider implements IDateProviderEngine {
jaroslav@63
    82
jaroslav@63
    83
            private Date date;
jaroslav@63
    84
jaroslav@63
    85
            void setDate(Date date) {
jaroslav@63
    86
                this.date = date;
jaroslav@63
    87
            }
jaroslav@63
    88
jaroslav@63
    89
            public Date getCurrentDate() {
jaroslav@63
    90
                return date;
jaroslav@63
    91
            }
jaroslav@63
    92
        }
jaroslav@63
    93
jaroslav@63
    94
        Convertor c = createConvertor();
jaroslav@63
    95
        MyDateProvider dp = new MyDateProvider();
jaroslav@63
    96
        c.setDateProvider(dp);
jaroslav@63
    97
jaroslav@63
    98
        {
jaroslav@63
    99
            dp.setDate(df.parse("2008-10-15 9:00 GMT")); //Wednesday
jaroslav@63
   100
            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
jaroslav@63
   101
            assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
jaroslav@63
   102
        }
jaroslav@63
   103
        {
jaroslav@63
   104
            dp.setDate(df.parse("2008-10-18 9:00 GMT"));  //Saturday
jaroslav@63
   105
            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
jaroslav@63
   106
            assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());
jaroslav@63
   107
        }
jaroslav@63
   108
    }
jaroslav@63
   109
}