/**
* 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.StandardId;
import com.opengamma.strata.collect.io.ResourceLocator;
import com.opengamma.strata.market.observable.QuoteId;
/**
* Test {@link QuotesCsvLoader}.
*/
@Test
public class QuotesCsvLoaderTest {
private static final QuoteId FGBL_MAR14 = QuoteId.of(StandardId.of("OG-Future", "Eurex-FGBL-Mar14"));
private static final QuoteId ED_MAR14 = QuoteId.of(StandardId.of("OG-Future", "CME-ED-Mar14"));
private static final QuoteId FGBL_JUN14 = QuoteId.of(StandardId.of("OG-Future", "Eurex-FGBL-Jun14"));
private static final LocalDate DATE1 = date(2014, 1, 22);
private static final LocalDate DATE2 = date(2014, 1, 23);
private static final ResourceLocator QUOTES_1 =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/quotes-1.csv");
private static final ResourceLocator QUOTES_2 =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/quotes-2.csv");
private static final ResourceLocator QUOTES_INVALID_DATE =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/quotes-invalid-date.csv");
private static final ResourceLocator QUOTES_INVALID_DUPLICATE =
ResourceLocator.of("classpath:com/opengamma/strata/loader/csv/quotes-invalid-duplicate.csv");
//-------------------------------------------------------------------------
public void test_noFiles() {
Map<QuoteId, Double> map = QuotesCsvLoader.load(DATE1);
assertEquals(map.size(), 0);
}
public void test_load_oneDate_file1_date1() {
Map<QuoteId, Double> map = QuotesCsvLoader.load(DATE1, QUOTES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map);
}
public void test_load_oneDate_file1_date1date2() {
Map<LocalDate, ImmutableMap<QuoteId, Double>> map = QuotesCsvLoader.load(ImmutableSet.of(DATE1, DATE2), QUOTES_1);
assertEquals(map.size(), 2);
assertFile1Date1Date2(map);
}
public void test_load_oneDate_file1_date2() {
Map<QuoteId, Double> map = QuotesCsvLoader.load(DATE2, ImmutableList.of(QUOTES_1));
assertEquals(map.size(), 2);
assertFile1Date2(map);
}
public void test_load_oneDate_file1file2_date1() {
Map<QuoteId, Double> map = QuotesCsvLoader.load(DATE1, ImmutableList.of(QUOTES_1, QUOTES_2));
assertEquals(map.size(), 3);
assertFile1Date1(map);
assertFile2Date1(map);
}
public void test_load_oneDate_invalidDate() {
assertThrows(
() -> QuotesCsvLoader.load(date(2015, 10, 2), QUOTES_INVALID_DATE),
IllegalArgumentException.class,
"Error processing resource as CSV file: .*");
}
public void test_invalidDuplicate() {
assertThrowsIllegalArg(() -> QuotesCsvLoader.load(DATE1, QUOTES_INVALID_DUPLICATE));
}
public void test_load_dateSet_file1_date1() {
Map<LocalDate, ImmutableMap<QuoteId, Double>> map = QuotesCsvLoader.load(ImmutableSet.of(DATE1, DATE2), QUOTES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map.get(DATE1));
assertFile1Date2(map.get(DATE2));
}
public void test_load_alLDates_file1_date1() {
Map<LocalDate, ImmutableMap<QuoteId, Double>> map = QuotesCsvLoader.loadAllDates(QUOTES_1);
assertEquals(map.size(), 2);
assertFile1Date1(map.get(DATE1));
assertFile1Date2(map.get(DATE2));
}
//-------------------------------------------------------------------------
private void assertFile1Date1(Map<QuoteId, Double> map) {
assertTrue(map.containsKey(FGBL_MAR14));
assertTrue(map.containsKey(ED_MAR14));
assertEquals(map.get(FGBL_MAR14), 150.43, 1e-6);
assertEquals(map.get(ED_MAR14), 99.62, 1e-6);
}
private void assertFile1Date1Date2(Map<LocalDate, ImmutableMap<QuoteId, Double>> map) {
assertTrue(map.containsKey(DATE1));
assertTrue(map.containsKey(DATE2));
assertTrue(map.get(DATE1).containsKey(FGBL_MAR14));
assertTrue(map.get(DATE2).containsKey(FGBL_MAR14));
assertTrue(map.get(DATE1).containsKey(ED_MAR14));
assertTrue(map.get(DATE2).containsKey(ED_MAR14));
assertEquals(map.get(DATE1).get(FGBL_MAR14), 150.43, 1e-6);
assertEquals(map.get(DATE1).get(ED_MAR14), 99.62, 1e-6);
assertEquals(map.get(DATE2).get(FGBL_MAR14), 150.5, 1e-6);
assertEquals(map.get(DATE2).get(ED_MAR14), 99.63, 1e-6);
}
private void assertFile1Date2(Map<QuoteId, Double> map) {
assertTrue(map.containsKey(FGBL_MAR14));
assertTrue(map.containsKey(ED_MAR14));
assertEquals(map.get(FGBL_MAR14), 150.50, 1e-6);
assertEquals(map.get(ED_MAR14), 99.63, 1e-6);
}
private void assertFile2Date1(Map<QuoteId, Double> map) {
assertTrue(map.containsKey(FGBL_JUN14));
assertEquals(map.get(FGBL_JUN14), 150.99, 1e-6);
}
//-------------------------------------------------------------------------
public void coverage() {
coverPrivateConstructor(QuotesCsvLoader.class);
}
}