/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.region.impl;
import static org.testng.AssertJUnit.assertEquals;
import org.threeten.bp.ZoneId;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.region.RegionClassification;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ExternalIdSearchType;
import com.opengamma.id.UniqueId;
import com.opengamma.master.region.ManageableRegion;
import com.opengamma.master.region.RegionDocument;
import com.opengamma.master.region.RegionSearchRequest;
import com.opengamma.master.region.RegionSearchResult;
import com.opengamma.util.i18n.Country;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Test {@link InMemoryRegionMaster}.
*/
@Test(groups = TestGroup.UNIT)
public class InMemoryRegionMasterTest {
private static String NAME = "France";
private static ExternalId ID_COUNTRY = ExternalSchemes.countryRegionId(Country.FR);
private static ExternalId ID_CURENCY = ExternalSchemes.currencyRegionId(Currency.EUR);
private static ExternalId ID_TIME_ZONE = ExternalSchemes.timeZoneRegionId(ZoneId.of("Europe/Paris"));
private static ExternalId ID_OTHER1 = ExternalId.of("TEST_SCHEME", "The French");
private static ExternalId ID_OTHER2 = ExternalId.of("TEST_SCHEME", "France");
private static ExternalIdBundle BUNDLE_FULL = ExternalIdBundle.of(ID_COUNTRY, ID_TIME_ZONE, ID_CURENCY);
private static ExternalIdBundle BUNDLE_PART = ExternalIdBundle.of(ID_COUNTRY, ID_CURENCY);
private static ExternalIdBundle BUNDLE_OTHER = ExternalIdBundle.of(ID_COUNTRY, ID_TIME_ZONE, ID_OTHER1);
private InMemoryRegionMaster master;
private RegionDocument addedDoc;
@BeforeMethod
public void setUp() {
master = new InMemoryRegionMaster();
ManageableRegion inputRegion = new ManageableRegion();
inputRegion.setName(NAME);
inputRegion.setFullName(NAME);
inputRegion.setClassification(RegionClassification.INDEPENDENT_STATE);
inputRegion.setCountry(Country.FR);
inputRegion.setCurrency(Currency.EUR);
inputRegion.setTimeZone(ZoneId.of("Europe/Paris"));
RegionDocument inputDoc = new RegionDocument(inputRegion);
addedDoc = master.add(inputDoc);
}
//-------------------------------------------------------------------------
@Test(expectedExceptions = DataNotFoundException.class)
public void test_get_noMatch() {
master.get(UniqueId.of("A", "B"));
}
public void test_get_match() {
RegionDocument result = master.get(addedDoc.getUniqueId());
assertEquals(UniqueId.of("MemReg", "1"), result.getUniqueId());
assertEquals(addedDoc, result);
}
//-------------------------------------------------------------------------
public void test_search_oneId_noMatch() {
RegionSearchRequest request = new RegionSearchRequest(ID_OTHER1);
RegionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_oneId_mic() {
RegionSearchRequest request = new RegionSearchRequest(ID_COUNTRY);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_oneId_ccid() {
RegionSearchRequest request = new RegionSearchRequest(ID_COUNTRY);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_oneBundle_noMatch() {
RegionSearchRequest request = new RegionSearchRequest(BUNDLE_OTHER);
request.setExternalIdSearch(request.getExternalIdSearch().withSearchType(ExternalIdSearchType.ALL));
RegionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_oneBundle_full() {
RegionSearchRequest request = new RegionSearchRequest(BUNDLE_FULL);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_oneBundle_part() {
RegionSearchRequest request = new RegionSearchRequest(BUNDLE_PART);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_twoBundles_noMatch() {
RegionSearchRequest request = new RegionSearchRequest();
request.addExternalId(ID_OTHER1);
request.addExternalId(ID_OTHER2);
RegionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_twoBundles_oneMatch() {
RegionSearchRequest request = new RegionSearchRequest();
request.addExternalId(ID_COUNTRY);
request.addExternalId(ID_OTHER1);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_twoBundles_bothMatch() {
RegionSearchRequest request = new RegionSearchRequest();
request.addExternalId(ID_COUNTRY);
request.addExternalId(ID_CURENCY);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_name_noMatch() {
RegionSearchRequest request = new RegionSearchRequest();
request.setName("No match");
RegionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_name_match() {
RegionSearchRequest request = new RegionSearchRequest();
request.setName(NAME);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_classification_noMatch() {
RegionSearchRequest request = new RegionSearchRequest();
request.setClassification(RegionClassification.DEPENDENCY);
RegionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_classification_match() {
RegionSearchRequest request = new RegionSearchRequest();
request.setClassification(RegionClassification.INDEPENDENT_STATE);
RegionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
}