/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.loader.csv;
import static com.opengamma.strata.collect.TestHelper.assertThrows;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.time.LocalDate;
import java.util.Map;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.basics.currency.Currency;
import com.opengamma.strata.basics.currency.FxRate;
import com.opengamma.strata.collect.io.ResourceLocator;
import com.opengamma.strata.data.FxRateId;
/**
* Test {@link FxRatesCsvLoader}.
*/
@Test
public class FxRatesCsvLoaderTest {
private static final FxRateId EUR_USD_ID = FxRateId.of(Currency.EUR, Currency.USD);
private static final FxRateId GBP_USD_ID = FxRateId.of(Currency.GBP, Currency.USD);
private static final FxRateId EUR_CHF_ID = FxRateId.of(Currency.EUR, Currency.CHF);
private static final LocalDate DATE1 = date(2014, 1, 22);
private static final LocalDate DATE2 = date(2014, 1, 23);
private static final ResourceLocator RATES_1 =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fx-rates-1.csv");
private static final ResourceLocator RATES_2 =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fx-rates-2.csv");
private static final ResourceLocator RATES_INVALID_DATE =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fx-rates-invalid-date.csv");
private static final ResourceLocator RATES_INVALID_DUPLICATE =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/fx-rates-invalid-duplicate.csv");
//-------------------------------------------------------------------------
public void test_load_oneDate_file1_date1() {
Map<FxRateId, FxRate> map = FxRatesCsvLoader.load(DATE1, RATES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map);
}
public void test_load_oneDate_file1_date2() {
Map<FxRateId, FxRate> map = FxRatesCsvLoader.load(DATE2, ImmutableList.of(RATES_1));
assertEquals(map.size(), 2);
assertFile1Date2(map);
}
public void test_load_oneDate_file1file2_date1() {
Map<FxRateId, FxRate> map = FxRatesCsvLoader.load(DATE1, ImmutableList.of(RATES_1, RATES_2));
assertEquals(map.size(), 3);
assertFile1Date1(map);
assertFile2Date1(map);
}
public void test_load_oneDate_invalidDate() {
assertThrows(
() -> FxRatesCsvLoader.load(date(2015, 10, 2), RATES_INVALID_DATE),
IllegalArgumentException.class,
"Error processing resource as CSV file: .*");
}
public void test_invalidDuplicate() {
assertThrowsIllegalArg(() -> FxRatesCsvLoader.load(DATE1, RATES_INVALID_DUPLICATE));
}
public void test_load_dateSet_file1_date1() {
Map<LocalDate, ImmutableMap<FxRateId, FxRate>> map = FxRatesCsvLoader.load(ImmutableSet.of(DATE1, DATE2), RATES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map.get(DATE1));
assertFile1Date2(map.get(DATE2));
}
public void test_load_alLDates_file1_date1() {
Map<LocalDate, ImmutableMap<FxRateId, FxRate>> map = FxRatesCsvLoader.loadAllDates(RATES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map.get(DATE1));
assertFile1Date2(map.get(DATE2));
}
//-------------------------------------------------------------------------
private void assertFile1Date1(Map<FxRateId, FxRate> map) {
assertTrue(map.containsKey(EUR_USD_ID));
assertTrue(map.containsKey(GBP_USD_ID));
assertEquals(map.get(EUR_USD_ID), FxRate.of(Currency.EUR, Currency.USD, 1.11));
assertEquals(map.get(GBP_USD_ID), FxRate.of(Currency.GBP, Currency.USD, 1.51));
}
private void assertFile1Date2(Map<FxRateId, FxRate> map) {
assertTrue(map.containsKey(EUR_USD_ID));
assertTrue(map.containsKey(GBP_USD_ID));
assertEquals(map.get(EUR_USD_ID), FxRate.of(Currency.EUR, Currency.USD, 1.12));
assertEquals(map.get(GBP_USD_ID), FxRate.of(Currency.GBP, Currency.USD, 1.52));
}
private void assertFile2Date1(Map<FxRateId, FxRate> map) {
assertTrue(map.containsKey(EUR_CHF_ID));
assertEquals(map.get(EUR_CHF_ID), FxRate.of(Currency.EUR, Currency.CHF, 1.09));
}
//-------------------------------------------------------------------------
public void coverage() {
coverPrivateConstructor(FxRatesCsvLoader.class);
}
}