/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.convention.impl;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Collections;
import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ExternalIdSearchType;
import com.opengamma.id.UniqueId;
import com.opengamma.master.convention.ConventionDocument;
import com.opengamma.master.convention.ConventionSearchRequest;
import com.opengamma.master.convention.ConventionSearchResult;
import com.opengamma.master.convention.ManageableConvention;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.master.security.SecurityDocument;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Test {@link InMemoryConventionMaster}.
*/
@Test(groups = TestGroup.UNIT)
public class InMemoryConventionMasterTest {
private static String NAME = "FooBar";
private static ExternalId ID_ISIN_12345 = ExternalId.of(ExternalSchemes.ISIN, "12345");
private static ExternalId ID_FOO = ExternalId.of("FOO", "979");
private static ExternalId ID_BAR = ExternalId.of("BAR", "987654");
private static ExternalId ID_OTHER1 = ExternalId.of("TEST_SCHEME", "VAL1");
private static ExternalId ID_OTHER2 = ExternalId.of("TEST_SCHEME", "VAL2");
private static ExternalIdBundle BUNDLE_FULL = ExternalIdBundle.of(ID_ISIN_12345, ID_BAR, ID_FOO);
private static ExternalIdBundle BUNDLE_PART = ExternalIdBundle.of(ID_ISIN_12345, ID_FOO);
private static ExternalIdBundle BUNDLE_OTHER = ExternalIdBundle.of(ID_ISIN_12345, ID_BAR, ID_OTHER1);
private InMemoryConventionMaster master;
private ConventionDocument addedDoc;
@BeforeMethod
public void setUp() {
master = new InMemoryConventionMaster();
final ManageableConvention inputConvention = new MockConvention(NAME, BUNDLE_FULL, Currency.GBP);
ConventionDocument inputDoc = new ConventionDocument(inputConvention);
addedDoc = master.add(inputDoc);
}
//-------------------------------------------------------------------------
@Test(expectedExceptions = DataNotFoundException.class)
public void test_get_noMatch() {
master.get(UniqueId.of("A", "B"));
}
public void test_get_match() {
ConventionDocument result = master.get(addedDoc.getUniqueId());
assertEquals(UniqueId.of("MemCnv", "1"), result.getUniqueId());
assertEquals(addedDoc, result);
}
//-------------------------------------------------------------------------
public void test_search_oneId_noMatch() {
ConventionSearchRequest request = new ConventionSearchRequest(ID_OTHER1);
ConventionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_oneId_mic() {
ConventionSearchRequest request = new ConventionSearchRequest(ID_ISIN_12345);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_oneId_ccid() {
ConventionSearchRequest request = new ConventionSearchRequest(ID_ISIN_12345);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_oneBundle_noMatch() {
ConventionSearchRequest request = new ConventionSearchRequest(BUNDLE_OTHER);
request.setExternalIdSearch(request.getExternalIdSearch().withSearchType(ExternalIdSearchType.ALL));
ConventionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_oneBundle_full() {
ConventionSearchRequest request = new ConventionSearchRequest(BUNDLE_FULL);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_oneBundle_part() {
ConventionSearchRequest request = new ConventionSearchRequest(BUNDLE_PART);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_twoBundles_noMatch() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.addExternalId(ID_OTHER1);
request.addExternalId(ID_OTHER2);
ConventionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_twoBundles_oneMatch() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.addExternalId(ID_ISIN_12345);
request.addExternalId(ID_OTHER1);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_search_twoBundles_bothMatch() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.addExternalId(ID_ISIN_12345);
request.addExternalId(ID_FOO);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
//-------------------------------------------------------------------------
public void test_search_name_noMatch() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.setName("No match");
ConventionSearchResult result = master.search(request);
assertEquals(0, result.getDocuments().size());
}
public void test_search_name_match() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.setName(NAME);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
assertEquals(addedDoc, result.getFirstDocument());
}
public void test_replace_adds_uniqueid() {
ConventionSearchRequest request = new ConventionSearchRequest();
request.setName(NAME);
ConventionSearchResult result = master.search(request);
assertEquals(1, result.getDocuments().size());
ConventionDocument retrievedDoc = result.getFirstDocument();
UniqueId uniqueId = retrievedDoc.getUniqueId();
retrievedDoc.getValue().setUniqueId(null);
ConventionDocument updatedDoc = master.update(retrievedDoc);
assertEquals(uniqueId.toLatest(), updatedDoc.getUniqueId().toLatest());
assertEquals(uniqueId.toLatest(), updatedDoc.getConvention().getUniqueId().toLatest());
}
}