/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.holiday.impl;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.Test;
import org.threeten.bp.DayOfWeek;
import org.threeten.bp.LocalDate;
import com.opengamma.core.holiday.Holiday;
import com.opengamma.core.holiday.HolidayType;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.AbstractRedisTestCase;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.INTEGRATION, enabled = false)
public class NonVersionedRedisHolidaySourceTest extends AbstractRedisTestCase {
@Test
public void addGetByUniqueIdEmpty() {
NonVersionedRedisHolidaySource source = new NonVersionedRedisHolidaySource(getJedisPool(), getRedisPrefix());
Holiday result = source.get(UniqueId.of("TEST", "No Such Thing"));
assertNull(result);
}
@Test
public void addGetByUniqueIdCurrency() {
NonVersionedRedisHolidaySource source = new NonVersionedRedisHolidaySource(getJedisPool(), getRedisPrefix());
SimpleHoliday usd = generateHoliday(20);
usd.setCurrency(Currency.USD);
usd.setType(HolidayType.CURRENCY);
usd.setUniqueId(UniqueId.of("TEST", "USD Test Holiday"));
source.addHoliday(usd);
Holiday result = source.get(usd.getUniqueId());
assertNotNull(result);
assertEquals(Currency.USD, result.getCurrency());
assertEquals(usd.getUniqueId(), result.getUniqueId());
assertEquals(HolidayType.CURRENCY, result.getType());
assertNull(usd.getExchangeExternalId());
assertNull(usd.getRegionExternalId());
}
@Test
public void isHolidayCurrency() {
NonVersionedRedisHolidaySource source = new NonVersionedRedisHolidaySource(getJedisPool(), getRedisPrefix());
SimpleHoliday usd = generateHoliday(20);
usd.setCurrency(Currency.USD);
usd.setType(HolidayType.CURRENCY);
usd.setUniqueId(UniqueId.of("TEST", "USD Test Holiday"));
source.addHoliday(usd);
assertTrue(source.isHoliday(LocalDate.now(), Currency.USD));
assertFalse(source.isHoliday(LocalDate.now(), Currency.CAD));
assertFalse(source.isHoliday(LocalDate.now().plusDays(1), Currency.USD));
LocalDate saturday = LocalDate.of(2012, 2, 11);
assertTrue(source.isHoliday(saturday, Currency.USD));
}
@Test
public void addGetByUniqueIdRegion() {
NonVersionedRedisHolidaySource source = new NonVersionedRedisHolidaySource(getJedisPool(), getRedisPrefix());
SimpleHoliday usBank = generateHoliday(20);
usBank.setType(HolidayType.BANK);
usBank.setRegionExternalId(ExternalId.of("RegionScheme", "Chicago"));
usBank.setUniqueId(UniqueId.of("TEST", "USD Test Bank Holiday"));
source.addHoliday(usBank);
Holiday result = source.get(usBank.getUniqueId());
assertNotNull(result);
assertEquals(usBank.getUniqueId(), result.getUniqueId());
assertEquals(HolidayType.BANK, result.getType());
assertNull(usBank.getCurrency());
assertEquals(usBank.getRegionExternalId(), result.getRegionExternalId());
assertNull(result.getExchangeExternalId());
}
@Test
public void isHolidayByTypeExternalId() {
NonVersionedRedisHolidaySource source = new NonVersionedRedisHolidaySource(getJedisPool(), getRedisPrefix());
ExternalId exchangeId = ExternalId.of("ExchangeScheme", "Eurex");
SimpleHoliday holiday1 = generateHoliday(20);
holiday1.setType(HolidayType.TRADING);
holiday1.setExchangeExternalId(exchangeId);
holiday1.setUniqueId(UniqueId.of("EUREX", "1"));
source.addHoliday(holiday1);
SimpleHoliday holiday2 = generateHoliday(20);
holiday2.setType(HolidayType.SETTLEMENT);
holiday2.setExchangeExternalId(exchangeId);
holiday2.setUniqueId(UniqueId.of("EUREX", "2"));
source.addHoliday(holiday2);
assertTrue(source.isHoliday(LocalDate.now(), HolidayType.TRADING, exchangeId));
compareVsWeekends(LocalDate.now().minusDays(10), source, HolidayType.TRADING, exchangeId);
compareVsWeekends(LocalDate.now().plusYears(1), source, HolidayType.TRADING, exchangeId);
assertTrue(source.isHoliday(LocalDate.now(), HolidayType.SETTLEMENT, exchangeId));
compareVsWeekends(LocalDate.now().minusDays(10), source, HolidayType.SETTLEMENT, exchangeId);
compareVsWeekends(LocalDate.now().plusYears(1), source, HolidayType.SETTLEMENT, exchangeId);
LocalDate saturday = LocalDate.of(2012, 2, 11);
assertTrue(source.isHoliday(saturday, HolidayType.SETTLEMENT, exchangeId));
assertTrue(source.isHoliday(saturday, HolidayType.TRADING, exchangeId));
}
protected void compareVsWeekends(final LocalDate date, final NonVersionedRedisHolidaySource source, HolidayType holidayType, ExternalId id) {
boolean isWeekend = date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY;
assertEquals(isWeekend, source.isHoliday(date, holidayType, id));
}
protected SimpleHoliday generateHoliday(int nHolidays) {
SimpleHoliday holiday = new SimpleHoliday();
LocalDate date = LocalDate.now();
for (int i = 0; i < nHolidays; i++) {
holiday.addHolidayDate(date);
date = date.plusDays(3);
}
return holiday;
}
}