Package com.opengamma.web.position

Source Code of com.opengamma.web.position.AbstractWebPositionResourceTestCase

/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.position;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;

import java.math.BigDecimal;
import java.util.List;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import org.springframework.core.io.FileSystemResourceLoader;
import org.springframework.mock.web.MockServletContext;
import org.testng.annotations.BeforeMethod;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalTime;
import org.threeten.bp.OffsetTime;
import org.threeten.bp.ZoneOffset;

import com.google.common.collect.Lists;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesSource;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.position.Counterparty;
import com.opengamma.engine.InMemorySecuritySource;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ObjectIdSupplier;
import com.opengamma.id.UniqueId;
import com.opengamma.master.config.impl.InMemoryConfigMaster;
import com.opengamma.master.config.impl.MasterConfigSource;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesResolver;
import com.opengamma.master.historicaltimeseries.impl.DefaultHistoricalTimeSeriesResolver;
import com.opengamma.master.historicaltimeseries.impl.DefaultHistoricalTimeSeriesSelector;
import com.opengamma.master.historicaltimeseries.impl.InMemoryHistoricalTimeSeriesMaster;
import com.opengamma.master.historicaltimeseries.impl.MasterHistoricalTimeSeriesSource;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.master.position.PositionDocument;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.master.position.PositionSearchRequest;
import com.opengamma.master.position.PositionSearchResult;
import com.opengamma.master.position.impl.InMemoryPositionMaster;
import com.opengamma.master.security.ManageableSecurityLink;
import com.opengamma.master.security.SecurityDocument;
import com.opengamma.master.security.SecurityLoader;
import com.opengamma.master.security.SecurityLoaderRequest;
import com.opengamma.master.security.SecurityLoaderResult;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.master.security.impl.AbstractSecurityLoader;
import com.opengamma.master.security.impl.InMemorySecurityMaster;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.web.FreemarkerOutputter;
import com.opengamma.web.MockUriInfo;
import com.opengamma.web.WebResourceTestUtils;

import freemarker.template.Configuration;

/**
* Test base class for WebPositionResource tests
*/
public abstract class AbstractWebPositionResourceTestCase {

  protected static final ExternalId COUNTER_PARTY = ExternalId.of(Counterparty.DEFAULT_SCHEME, "BACS");
  protected static final ZoneOffset ZONE_OFFSET = ZoneOffset.of("+0100");
  protected static final EquitySecurity EQUITY_SECURITY = WebResourceTestUtils.getEquitySecurity();
  protected static final ExternalId SEC_ID = EQUITY_SECURITY.getExternalIdBundle().getExternalId(ExternalSchemes.BLOOMBERG_TICKER);
  protected static final ManageableSecurityLink SECURITY_LINK = new ManageableSecurityLink(EQUITY_SECURITY.getExternalIdBundle());
  protected static final String EMPTY_TRADES = "{\"trades\" : []}";
  protected static final Long QUANTITY = Long.valueOf(100);

  protected SecurityMaster _secMaster;
  protected SecurityLoader _secLoader;
  protected HistoricalTimeSeriesSource _htsSource;
  protected WebPositionsResource _webPositionsResource;
  protected InMemorySecuritySource _securitySource;
  protected PositionMaster _positionMaster;
  protected List<ManageableTrade> _trades;
  protected UriInfo _uriInfo;

  @BeforeMethod(groups = TestGroup.UNIT)
  public void setUp() throws Exception {
    _uriInfo = new MockUriInfo();
    _trades = getTrades();
    _secMaster = new InMemorySecurityMaster(new ObjectIdSupplier("Mock"));
    _positionMaster = new InMemoryPositionMaster();
    final MasterConfigSource configSource = new MasterConfigSource(new InMemoryConfigMaster());
    final InMemoryHistoricalTimeSeriesMaster htsMaster = new InMemoryHistoricalTimeSeriesMaster();
    final HistoricalTimeSeriesResolver htsResolver = new DefaultHistoricalTimeSeriesResolver(new DefaultHistoricalTimeSeriesSelector(configSource), htsMaster);
    _htsSource = new MasterHistoricalTimeSeriesSource(htsMaster, htsResolver);
    _securitySource = new InMemorySecuritySource();
    _secLoader = new AbstractSecurityLoader() {
      @Override
      protected SecurityLoaderResult doBulkLoad(SecurityLoaderRequest request) {
        throw new UnsupportedOperationException("load security not supported");
      }
    };
    populateSecMaster();
    _webPositionsResource = new WebPositionsResource(_positionMaster, _secLoader,  _securitySource, _htsSource);
    final MockServletContext sc = new MockServletContext("/web-engine", new FileSystemResourceLoader());
    final Configuration cfg = FreemarkerOutputter.createConfiguration();
    cfg.setServletContextForTemplateLoading(sc, "WEB-INF/pages");
    FreemarkerOutputter.init(sc, cfg);
    _webPositionsResource.setServletContext(sc);
    _webPositionsResource.setUriInfo(_uriInfo);
  }

  protected List<ManageableTrade> getTrades() {
    final List<ManageableTrade> trades = Lists.newArrayList();
    final ManageableTrade trade1 = new ManageableTrade(BigDecimal.valueOf(50), SEC_ID, LocalDate.parse("2011-12-07"), OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET), COUNTER_PARTY);
    trade1.setPremium(10.0);
    trade1.setPremiumCurrency(Currency.USD);
    trade1.setPremiumDate(LocalDate.parse("2011-12-08"));
    trade1.setPremiumTime(OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET));
    trades.add(trade1);

    final ManageableTrade trade2 = new ManageableTrade(BigDecimal.valueOf(60), SEC_ID, LocalDate.parse("2011-12-08"), OffsetTime.of(LocalTime.of(16, 4), ZONE_OFFSET), COUNTER_PARTY);
    trade2.setPremium(20.0);
    trade2.setPremiumCurrency(Currency.USD);
    trade2.setPremiumDate(LocalDate.parse("2011-12-09"));
    trade2.setPremiumTime(OffsetTime.of(LocalTime.of(16, 4), ZONE_OFFSET));
    trades.add(trade2);

    final ManageableTrade trade3 = new ManageableTrade(BigDecimal.valueOf(70), SEC_ID, LocalDate.parse("2011-12-09"), OffsetTime.of(LocalTime.of(17, 4), ZONE_OFFSET), COUNTER_PARTY);
    trade3.setPremium(30.0);
    trade3.setPremiumCurrency(Currency.USD);
    trade3.setPremiumDate(LocalDate.parse("2011-12-10"));
    trade3.setPremiumTime(OffsetTime.of(LocalTime.of(17, 4), ZONE_OFFSET));
    trades.add(trade3);
    return trades;
  }

  protected void populateSecMaster() {
    final SecurityDocument added = _secMaster.add(new SecurityDocument(EQUITY_SECURITY));
    _securitySource.addSecurity(added.getSecurity());
  }

  protected void populatePositionMaster() {
    for (final ManageableTrade trade : _trades) {
      final ManageablePosition manageablePosition = new ManageablePosition(trade.getQuantity(), SEC_ID);
      manageablePosition.addTrade(trade);
      final PositionDocument positionDocument = new PositionDocument(manageablePosition);
      _positionMaster.add(positionDocument);
    }
  }

  protected String getTradesJson() throws Exception {
    return WebResourceTestUtils.loadJson("com/opengamma/web/position/tradesJson.txt").toString();
  }

  protected void assertPositionWithNoTrades() {
    final PositionSearchRequest request = new PositionSearchRequest();
    final PositionSearchResult searchResult = _positionMaster.search(request);
    assertNotNull(searchResult);
    final List<PositionDocument> docs = searchResult.getDocuments();
    assertNotNull(docs);
    assertEquals(1, docs.size());
    final ManageablePosition position = docs.get(0).getPosition();
    assertEquals(BigDecimal.TEN, position.getQuantity());
    assertEquals(SECURITY_LINK, position.getSecurityLink());
    assertTrue(position.getTrades().isEmpty());
  }

  protected void assertPositionAndTrades() {
    final PositionSearchRequest request = new PositionSearchRequest();
    final PositionSearchResult searchResult = _positionMaster.search(request);
    assertNotNull(searchResult);
    final List<PositionDocument> docs = searchResult.getDocuments();
    assertNotNull(docs);
    assertEquals(1, docs.size());
    final ManageablePosition position = docs.get(0).getPosition();
    assertEquals(BigDecimal.TEN, position.getQuantity());
    assertEquals(SECURITY_LINK, position.getSecurityLink());

    final List<ManageableTrade> trades = position.getTrades();
    assertEquals(3, trades.size());
    for (final ManageableTrade trade : trades) {
      assertEquals(SECURITY_LINK, trade.getSecurityLink());
      trade.setUniqueId(null);
      trade.setSecurityLink(new ManageableSecurityLink(SEC_ID));
      trade.setParentPositionId(null);
      assertTrue(_trades.contains(trade));
    }
  }

  protected UniqueId addPosition() {
    final ManageableTrade origTrade = new ManageableTrade(BigDecimal.valueOf(50), SEC_ID, LocalDate.parse("2011-12-07"), OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET), COUNTER_PARTY);
    origTrade.setPremium(10.0);
    origTrade.setPremiumCurrency(Currency.USD);
    origTrade.setPremiumDate(LocalDate.parse("2011-12-08"));
    origTrade.setPremiumTime(OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET));

    final ManageablePosition manageablePosition = new ManageablePosition(origTrade.getQuantity(), EQUITY_SECURITY.getExternalIdBundle());
    manageablePosition.addTrade(origTrade);
    final PositionDocument addedPos = _positionMaster.add(new PositionDocument(manageablePosition));
    final UniqueId uid = addedPos.getUniqueId();
    return uid;
  }

  protected String getActualURL(final Response response) {
    return response.getMetadata().getFirst("Location").toString();
  }

}
TOP

Related Classes of com.opengamma.web.position.AbstractWebPositionResourceTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.