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 |
}
|