/** * Copyright (c) 2012, 2015, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.javamoney.moneta.convert; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotSame; import static org.javamoney.moneta.convert.ConversionConstants.BRAZILIAN_REAL; import static org.javamoney.moneta.convert.ConversionConstants.DOLLAR; import static org.junit.Assert.assertNotNull; import javax.money.CurrencyUnit; import javax.money.convert.ExchangeRateProvider; import org.javamoney.moneta.Money; import org.javamoney.moneta.function.DefaultMonetarySummaryStatistics; import org.javamoney.moneta.function.MonetarySummaryStatistics; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class ExchangeRateMonetarySummaryStatisticsTest { private ExchangeRateProvider provider; @BeforeTest public void init() { provider = new ExchangeRateProviderMock(); } @Test public void shouldConvertWhenIsDifferentCurrency() { MonetarySummaryStatistics summary = new ExchangeRateMonetarySummaryStatistics( BRAZILIAN_REAL, provider); summary.accept(Money.of(10, DOLLAR)); assertEquals(BRAZILIAN_REAL, summary.getCurrencyUnit()); assertEquals(1L, summary.getCount()); assertNotSame(0L, summary.getMin().getNumber().longValue()); assertNotSame(0L, summary.getMax().getNumber().longValue()); assertNotSame(0L, summary.getSum().getNumber().longValue()); assertNotSame(0L, summary.getAverage().getNumber().longValue()); } @Test public void toTest() { MonetarySummaryStatistics summary = createSummary(BRAZILIAN_REAL); MonetarySummaryStatistics summaryDollar = summary.to(DOLLAR); assertEquals(DOLLAR, summaryDollar.getCurrencyUnit()); assertEquals(3L, summaryDollar.getCount()); assertNotSame(0L, summaryDollar.getMin().getNumber().longValue()); assertNotSame(0L, summaryDollar.getMax().getNumber().longValue()); assertNotSame(0L, summaryDollar.getSum().getNumber().longValue()); assertNotSame(0L, summaryDollar.getAverage().getNumber().longValue()); } @Test public void combineTest() { MonetarySummaryStatistics summaryA = createSummary(BRAZILIAN_REAL); MonetarySummaryStatistics summaryB = createSummary(DOLLAR); MonetarySummaryStatistics result = summaryA.combine(summaryB); assertEquals(BRAZILIAN_REAL, result.getCurrencyUnit()); assertEquals(6L, result.getCount()); assertNotNull(result.getMin()); assertNotSame(110L, result.getMax().getNumber().longValue()); assertNotSame(210L, result.getSum().getNumber().longValue()); assertNotSame(70L, result.getAverage().getNumber().longValue()); } @Test public void combineImplSummaryTest() { MonetarySummaryStatistics summaryA = createSummary(BRAZILIAN_REAL); MonetarySummaryStatistics summaryB = createSummaryDefault(DOLLAR); MonetarySummaryStatistics result = summaryA.combine(summaryB); assertEquals(BRAZILIAN_REAL, result.getCurrencyUnit()); assertEquals(6L, result.getCount()); assertNotNull(result.getMin()); assertNotSame(110L, result.getMax().getNumber().longValue()); assertNotSame(210L, result.getSum().getNumber().longValue()); assertNotSame(70L, result.getAverage().getNumber().longValue()); } private MonetarySummaryStatistics createSummary(CurrencyUnit currencyUnit) { MonetarySummaryStatistics summary = new ExchangeRateMonetarySummaryStatistics( currencyUnit, provider); summary.accept(Money.of(10, currencyUnit)); summary.accept(Money.of(90, currencyUnit)); summary.accept(Money.of(110, currencyUnit)); return summary; } private MonetarySummaryStatistics createSummaryDefault( CurrencyUnit currencyUnit) { MonetarySummaryStatistics summary = DefaultMonetarySummaryStatistics.of( currencyUnit); summary.accept(Money.of(10, currencyUnit)); summary.accept(Money.of(90, currencyUnit)); summary.accept(Money.of(110, currencyUnit)); return summary; } }