/** * 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 com.opengamma.web.WebResourceTestUtils.assertJSONObjectEquals; import static com.opengamma.web.WebResourceTestUtils.loadJson; 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 org.json.JSONObject; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.LocalTime; import org.threeten.bp.OffsetTime; import com.opengamma.id.UniqueId; import com.opengamma.master.position.ManageablePosition; import com.opengamma.master.position.ManageableTrade; import com.opengamma.master.position.PositionDocument; import com.opengamma.master.security.ManageableSecurityLink; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; /** * Test {@link WebPositionResource}. */ @Test(groups = TestGroup.UNIT) public class WebPositionResourceTest extends AbstractWebPositionResourceTestCase { @Test public void testGetPositionWithTrades() throws Exception { final ManageableTrade trade = new ManageableTrade(BigDecimal.valueOf(50), SEC_ID, LocalDate.parse("2011-12-07"), OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET), COUNTER_PARTY); trade.setPremium(10.0); trade.setPremiumCurrency(Currency.USD); trade.setPremiumDate(LocalDate.parse("2011-12-08")); trade.setPremiumTime(OffsetTime.of(LocalTime.of(15, 4), ZONE_OFFSET)); final ManageablePosition manageablePosition = new ManageablePosition(trade.getQuantity(), SEC_ID); manageablePosition.addTrade(trade); final PositionDocument addedPos = _positionMaster.add(new PositionDocument(manageablePosition)); final WebPositionResource positionResource = _webPositionsResource.findPosition(addedPos.getUniqueId().toString()); final String json = positionResource.getJSON(); assertNotNull(json); assertJSONObjectEquals(loadJson("com/opengamma/web/position/position.txt"), new JSONObject(json)); } @Test public void testGetPositionWithoutTrade() throws Exception { final ManageablePosition manageablePosition = new ManageablePosition(BigDecimal.valueOf(50), SEC_ID); final PositionDocument addedPos = _positionMaster.add(new PositionDocument(manageablePosition)); final WebPositionResource positionResource = _webPositionsResource.findPosition(addedPos.getUniqueId().toString()); final String json = positionResource.getJSON(); assertNotNull(json); assertJSONObjectEquals(loadJson("com/opengamma/web/position/positionWithoutTrades.txt"), new JSONObject(json)); } @Test public void testUpdatePositionWithTrades() throws Exception { final UniqueId uid = addPosition(); final WebPositionResource positionResource = _webPositionsResource.findPosition(uid.toString()); final Response response = positionResource.putJSON(QUANTITY.toString(), getTradesJson(), null, null); assertNotNull(response); assertEquals(200, response.getStatus()); final PositionDocument positionDocument = _positionMaster.get(uid); assertNotNull(positionDocument); final ManageablePosition position = positionDocument.getPosition(); assertEquals(BigDecimal.valueOf(QUANTITY), position.getQuantity()); 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)); } } @Test public void testUpdatePositionWithoutTrades() throws Exception { final UniqueId uid = addPosition(); final WebPositionResource positionResource = _webPositionsResource.findPosition(uid.toString()); final Response response = positionResource.putJSON(QUANTITY.toString(), null, null, null); assertNotNull(response); assertEquals(200, response.getStatus()); final PositionDocument positionDocument = _positionMaster.get(uid); assertNotNull(positionDocument); final ManageablePosition position = positionDocument.getPosition(); assertEquals(BigDecimal.valueOf(QUANTITY), position.getQuantity()); final List<ManageableTrade> trades = position.getTrades(); assertTrue(trades.isEmpty()); } @Test public void testUpdatePositionWithEmptyTrades() throws Exception { final UniqueId uid = addPosition(); final WebPositionResource positionResource = _webPositionsResource.findPosition(uid.toString()); final Response response = positionResource.putJSON(QUANTITY.toString(), EMPTY_TRADES, null, null); assertNotNull(response); assertEquals(200, response.getStatus()); final PositionDocument positionDocument = _positionMaster.get(uid); assertNotNull(positionDocument); final ManageablePosition position = positionDocument.getPosition(); assertEquals(BigDecimal.valueOf(QUANTITY), position.getQuantity()); final List<ManageableTrade> trades = position.getTrades(); assertTrue(trades.isEmpty()); } }