task4/solution13/test/org/apidesign/apifest08/test/ConvertorWithDateExchangeRateTest.java
changeset 63 20d332739f60
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/task4/solution13/test/org/apidesign/apifest08/test/ConvertorWithDateExchangeRateTest.java	Fri Oct 17 17:31:48 2008 +0200
     1.3 @@ -0,0 +1,109 @@
     1.4 +/*
     1.5 + * To change this template, choose Tools | Templates
     1.6 + * and open the template in the editor.
     1.7 + */
     1.8 +package org.apidesign.apifest08.test;
     1.9 +
    1.10 +import java.math.BigDecimal;
    1.11 +import java.text.ParseException;
    1.12 +import java.text.SimpleDateFormat;
    1.13 +import java.util.Date;
    1.14 +import junit.framework.TestCase;
    1.15 +import org.apidesign.apifest08.currency.ConversionResult;
    1.16 +import org.apidesign.apifest08.currency.Convertor;
    1.17 +import org.apidesign.apifest08.currency.ConvertorCurrency;
    1.18 +import org.apidesign.apifest08.currency.ExchangeRate;
    1.19 +import org.apidesign.apifest08.currency.ExchangeRateProvider;
    1.20 +import org.apidesign.apifest08.currency.IDateExchangeRateEngine;
    1.21 +import org.apidesign.apifest08.currency.IDateProviderEngine;
    1.22 +
    1.23 +/**
    1.24 + *
    1.25 + * @author arnostvalicek
    1.26 + */
    1.27 +public class ConvertorWithDateExchangeRateTest extends TestCase {
    1.28 +
    1.29 +    private static ConvertorCurrency CZK = ConvertorCurrency.getInstance("CZK");
    1.30 +    private static ConvertorCurrency SKK = ConvertorCurrency.getInstance("SKK");
    1.31 +    private static ConvertorCurrency USD = ConvertorCurrency.getInstance("USD");
    1.32 +    private SimpleDateFormat df;
    1.33 +
    1.34 +    @Override
    1.35 +    protected void setUp() throws Exception {
    1.36 +        super.setUp();
    1.37 +        df = new SimpleDateFormat("yyyy-MM-dd HH:mm zzzz");
    1.38 +    }
    1.39 +
    1.40 +    @Override
    1.41 +    protected void tearDown() throws Exception {
    1.42 +        super.tearDown();
    1.43 +        df = null;
    1.44 +    }
    1.45 +
    1.46 +    private IDateExchangeRateEngine createDateEngine() {
    1.47 +        IDateExchangeRateEngine engine = new IDateExchangeRateEngine() {
    1.48 +
    1.49 +            public ExchangeRate getExchangeRate(ConvertorCurrency fromCurrency, ConvertorCurrency toCurrency, Date date) {
    1.50 +                int day = date.getDay();
    1.51 +                if (day >= 1 && day <= 5) {
    1.52 +                    //weekday
    1.53 +                    return new ExchangeRate(new BigDecimal(1), new BigDecimal(2));
    1.54 +                } else {
    1.55 +                    //weekend
    1.56 +                    return new ExchangeRate(new BigDecimal(1), new BigDecimal(3));
    1.57 +                }
    1.58 +            }
    1.59 +        };
    1.60 +        return engine;
    1.61 +    }
    1.62 +
    1.63 +    private Convertor createConvertor() {
    1.64 +        ExchangeRateProvider exchangeRateProvider = ExchangeRateProvider.createDateExchangeRateProvider(createDateEngine());
    1.65 +        Convertor c = Convertor.createConvertor(exchangeRateProvider);
    1.66 +        return c;
    1.67 +    }
    1.68 +
    1.69 +    public void testConvertuUsingDifferentRatesForDays() throws ParseException {
    1.70 +        Convertor c = createConvertor();
    1.71 +        {
    1.72 +            Date d1 = df.parse("2008-10-15 9:00 GMT");  //Wednesday
    1.73 +            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
    1.74 +            assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
    1.75 +        }
    1.76 +        {
    1.77 +            Date d1 = df.parse("2008-10-18 9:00 GMT");  //Saturday
    1.78 +            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"), d1);
    1.79 +            assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());
    1.80 +        }
    1.81 +    }
    1.82 +
    1.83 +    public void testConvertUsingDifferenDefaultDay() throws ParseException {
    1.84 +        class MyDateProvider implements IDateProviderEngine {
    1.85 +
    1.86 +            private Date date;
    1.87 +
    1.88 +            void setDate(Date date) {
    1.89 +                this.date = date;
    1.90 +            }
    1.91 +
    1.92 +            public Date getCurrentDate() {
    1.93 +                return date;
    1.94 +            }
    1.95 +        }
    1.96 +
    1.97 +        Convertor c = createConvertor();
    1.98 +        MyDateProvider dp = new MyDateProvider();
    1.99 +        c.setDateProvider(dp);
   1.100 +
   1.101 +        {
   1.102 +            dp.setDate(df.parse("2008-10-15 9:00 GMT")); //Wednesday
   1.103 +            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
   1.104 +            assertEquals("Weekday conversion", new BigDecimal("4.60"), resultWeekday.getConverted());
   1.105 +        }
   1.106 +        {
   1.107 +            dp.setDate(df.parse("2008-10-18 9:00 GMT"));  //Saturday
   1.108 +            ConversionResult resultWeekday = c.convert(CZK, SKK, new BigDecimal("2.3"));
   1.109 +            assertEquals("Weekday conversion", new BigDecimal("6.90"), resultWeekday.getConverted());
   1.110 +        }
   1.111 +    }
   1.112 +}