task4/solution13/test/org/apidesign/apifest08/test/ConvertorWithDateExchangeRateTest.java
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 +}