package name.abuchen.portfolio.money.impl; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.math.BigDecimal; import java.time.LocalDate; import name.abuchen.portfolio.money.ExchangeRate; import org.junit.Test; @SuppressWarnings("nls") public class ExchangeRateTimeSeriesImplTest { @Test public void testLookupOfExchangeRate() { ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(1))); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-02"), BigDecimal.valueOf(2))); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-03"), BigDecimal.valueOf(3))); assertThat(series.lookupRate(LocalDate.parse("2014-11-30")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-01")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-02")).get().getValue(), is(BigDecimal.valueOf(2))); assertThat(series.lookupRate(LocalDate.parse("2014-12-03")).get().getValue(), is(BigDecimal.valueOf(3))); assertThat(series.lookupRate(LocalDate.parse("2014-12-04")).get().getValue(), is(BigDecimal.valueOf(3))); } @Test public void testAddingOfExchangeRates() { ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(null, "EUR", "USD"); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(1))); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(2))); assertProperties(series); } @Test public void testCreationFromTemplate() { ExchangeRateTimeSeriesImpl template = new ExchangeRateTimeSeriesImpl(null, "EUR", "USD"); template.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(1))); template.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(2))); ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(template); assertProperties(series); } private void assertProperties(ExchangeRateTimeSeriesImpl series) { assertThat(series.getBaseCurrency(), is("EUR")); assertThat(series.getTermCurrency(), is("USD")); assertThat(series.lookupRate(LocalDate.parse("2014-12-01")).get().getValue(), is(BigDecimal.valueOf(2))); assertThat(series.getLatest().get(), is(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(2)))); } @Test public void testLookupOfExchangeRateWithGaps() { ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(1))); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-03"), BigDecimal.valueOf(3))); assertThat(series.lookupRate(LocalDate.parse("2014-11-30")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-01")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-02")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-03")).get().getValue(), is(BigDecimal.valueOf(3))); assertThat(series.lookupRate(LocalDate.parse("2014-12-04")).get().getValue(), is(BigDecimal.valueOf(3))); } @Test public void testLookupOfExchangeRateWithNoRates() { ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(); assertThat(series.lookupRate(LocalDate.parse("2014-12-01")).isPresent(), is(false)); } @Test public void testLookupOfExchangeRateWithOneRateOnly() { ExchangeRateTimeSeriesImpl series = new ExchangeRateTimeSeriesImpl(); series.addRate(new ExchangeRate(LocalDate.parse("2014-12-01"), BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-11-30")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-01")).get().getValue(), is(BigDecimal.valueOf(1))); assertThat(series.lookupRate(LocalDate.parse("2014-12-02")).get().getValue(), is(BigDecimal.valueOf(1))); } }