task3/solution07/test/org/apidesign/apifest08/test/Task3Test.java
changeset 57 be49855c7fa2
parent 48 79a576394dd7
child 59 c1d43bc1e9c0
     1.1 --- a/task3/solution07/test/org/apidesign/apifest08/test/Task3Test.java	Tue Oct 07 11:19:36 2008 +0200
     1.2 +++ b/task3/solution07/test/org/apidesign/apifest08/test/Task3Test.java	Fri Oct 10 22:10:25 2008 +0200
     1.3 @@ -1,7 +1,11 @@
     1.4  package org.apidesign.apifest08.test;
     1.5  
     1.6 +import java.math.BigDecimal;
     1.7 +import java.util.Currency;
     1.8  import junit.framework.TestCase;
     1.9  import org.apidesign.apifest08.currency.Convertor;
    1.10 +import org.apidesign.apifest08.currency.MonetaryAmount;
    1.11 +import org.apidesign.apifest08.currency.anothervendor.ZigZaggingBidirectionalConvertor;
    1.12  
    1.13  /** The exchange rates are not always the same. They are changing. Day by day,
    1.14   * hour by hour, minute by minute. For every bank it is important to always
    1.15 @@ -28,6 +32,10 @@
    1.16      protected void tearDown() throws Exception {
    1.17      }
    1.18  
    1.19 +    protected static final Currency CZK = Currency.getInstance( "CZK" );
    1.20 +    protected static final Currency SKK = Currency.getInstance( "SKK" );
    1.21 +    protected static final Currency USD = Currency.getInstance( "USD" );
    1.22 +
    1.23      // Backward compatibly enhance your existing API to support following
    1.24      // usecases:
    1.25      //
    1.26 @@ -51,7 +59,11 @@
    1.27          // then 1USD = 15.02CZK
    1.28          // and so on and on up to 1USD = 16CZK
    1.29          // and then another round to 15, etc.
    1.30 -        return null;
    1.31 +        final MonetaryAmount oneUSD = new MonetaryAmount( 1, USD );
    1.32 +        final BigDecimal startAmount = new BigDecimal( 16 );
    1.33 +        final BigDecimal endAmount = new BigDecimal( 15 );
    1.34 +        final BigDecimal stepAmount = BigDecimal.ONE.movePointLeft( 2 ).negate();
    1.35 +        return new ContractImposingDelegatingConvertor( new ZigZaggingBidirectionalConvertor( oneUSD, CZK, startAmount, endAmount, stepAmount ) );
    1.36      }
    1.37  
    1.38      public void testFewQueriesForOnlineConvertor() {
    1.39 @@ -64,20 +76,39 @@
    1.40          doFewQueriesForOnlineConvertor(c);
    1.41      }
    1.42  
    1.43 -    static void doFewQueriesForOnlineConvertor(Convertor c) {
    1.44 +    static void doFewQueriesForOnlineConvertor( final Convertor c ) {
    1.45          // convert $5 to CZK using c:
    1.46 +        final Convertor.ConversionResult r1 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( 5, USD ), CZK ) );
    1.47 +        final MonetaryAmount a1 = r1.getNetAmount();
    1.48          //assertEquals("Result is 80 CZK");
    1.49 +        assertNotNull( a1 );
    1.50 +        assertEquals( 80.0, a1.getAmount().doubleValue() );
    1.51 +        assertEquals( CZK, a1.getCurrency() );
    1.52  
    1.53          // convert $8 to CZK using c:
    1.54 +        final Convertor.ConversionResult r2 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( 8, USD ), CZK ) );
    1.55 +        final MonetaryAmount a2 = r2.getNetAmount();
    1.56          //assertEquals("Result is 127.92 CZK");
    1.57 +        assertNotNull( a2 );
    1.58 +        assertEquals( 12792.0, a2.getAmount().movePointRight( 2 ).doubleValue() );
    1.59 +        assertEquals( CZK, a2.getCurrency() );
    1.60  
    1.61          // convert $1 to CZK using c:
    1.62 +        final Convertor.ConversionResult r3 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( 1, USD ), CZK ) );
    1.63 +        final MonetaryAmount a3 = r3.getNetAmount();
    1.64          //assertEquals("Result is 15.98 CZK");
    1.65 +        assertNotNull( a3 );
    1.66 +        assertEquals( 1598.0, a3.getAmount().movePointRight( 2 ).doubleValue() );
    1.67 +        assertEquals( CZK, a3.getCurrency() );
    1.68  
    1.69          // convert 15.97CZK to USD using c:
    1.70 +        final BigDecimal s4 = new BigDecimal( 1597 ).movePointLeft( 2 );
    1.71 +        final Convertor.ConversionResult r4 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( s4, CZK ), USD ) );
    1.72 +        final MonetaryAmount a4 = r4.getNetAmount();
    1.73          //assertEquals("Result is 1$");
    1.74 -
    1.75 -        fail("Implement me!");
    1.76 +        assertNotNull( a4 );
    1.77 +        assertEquals( 1.0, a4.getAmount().doubleValue() );
    1.78 +        assertEquals( USD, a4.getCurrency() );
    1.79      }
    1.80  
    1.81      /** Join the convertors and show they behave sane.
    1.82 @@ -88,16 +119,26 @@
    1.83              return;
    1.84          }
    1.85          
    1.86 -        Convertor c = Task2Test.merge(
    1.87 +        final Convertor c = Task2Test.merge(
    1.88              createOnlineCZKUSDConvertor(),
    1.89              Task1Test.createSKKtoCZK()
    1.90          );
    1.91  
    1.92 -        // convert 16CZK to SKK using c:
    1.93 +        // convert 16CZK using c:
    1.94 +        final Convertor.ConversionResult r4 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( 16, CZK ), SKK ) );
    1.95 +        final MonetaryAmount a4 = r4.getNetAmount();
    1.96          // assertEquals("Result is 20 SKK");
    1.97 +        assertNotNull( a4 );
    1.98 +        assertEquals( 20.0, a4.getAmount().doubleValue() );
    1.99 +        assertEquals( SKK, a4.getCurrency() );
   1.100  
   1.101          // convert 500SKK to CZK using c:
   1.102 +        final Convertor.ConversionResult r5 = c.convert( new Convertor.ConversionRequest( new MonetaryAmount( 500, SKK ), CZK ) );
   1.103 +        final MonetaryAmount a5 = r5.getNetAmount();
   1.104          // assertEquals("Result is 400 CZK");
   1.105 +        assertNotNull( a5 );
   1.106 +        assertEquals( 400.0, a5.getAmount().doubleValue() );
   1.107 +        assertEquals( CZK, a5.getCurrency() );
   1.108  
   1.109          doFewQueriesForOnlineConvertor(c);
   1.110      }