/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.target.logger;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.mockito.Mockito;
import org.testng.annotations.Test;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.Trade;
import com.opengamma.core.security.Security;
import com.opengamma.core.security.SecurityLink;
import com.opengamma.core.security.impl.SimpleSecurityLink;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.target.ComputationTargetRequirement;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link LoggedResolutionPosition} class.
*/
@Test(groups = TestGroup.UNIT)
public class LoggedResolutionPositionTest {
public void getQuantity() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
Mockito.when(position.getQuantity()).thenReturn(BigDecimal.ONE);
assertEquals(logged.getQuantity(), BigDecimal.ONE);
Mockito.verifyZeroInteractions(logger);
}
public void getSecurityLink() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
final SecurityLink link = Mockito.mock(SecurityLink.class);
Mockito.when(position.getSecurityLink()).thenReturn(link);
assertSame(logged.getSecurityLink(), link);
Mockito.verifyZeroInteractions(logger);
}
public void getSecurity_externalId() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
final Security security = Mockito.mock(Security.class);
Mockito.when(security.getUniqueId()).thenReturn(UniqueId.of("Foo", "Bar", "Cow"));
Mockito.when(position.getSecurity()).thenReturn(security);
Mockito.when(position.getSecurityLink()).thenReturn(new SimpleSecurityLink(ExternalId.of("Foo", "Bar")));
assertSame(logged.getSecurity(), security);
Mockito.verify(logger).log(new ComputationTargetRequirement(ComputationTargetType.SECURITY, ExternalId.of("Foo", "Bar")), UniqueId.of("Foo", "Bar", "Cow"));
Mockito.verifyNoMoreInteractions(logger);
}
public void getSecurity_objectId() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
final Security security = Mockito.mock(Security.class);
Mockito.when(security.getUniqueId()).thenReturn(UniqueId.of("Foo", "Bar", "Cow"));
Mockito.when(position.getSecurity()).thenReturn(security);
Mockito.when(position.getSecurityLink()).thenReturn(new SimpleSecurityLink(ObjectId.of("Foo", "Bar")));
assertSame(logged.getSecurity(), security);
Mockito.verify(logger).log(new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Foo", "Bar")), UniqueId.of("Foo", "Bar", "Cow"));
Mockito.verifyNoMoreInteractions(logger);
}
public void getTrades() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
final List<Trade> trades = new ArrayList<Trade>();
for (int i = 0; i < 3; i++) {
final Trade trade = Mockito.mock(Trade.class);
Mockito.when(trade.getUniqueId()).thenReturn(UniqueId.of("Trade", Integer.toString(i), "0"));
trades.add(trade);
}
Mockito.when(position.getTrades()).thenReturn(trades);
final Collection<Trade> loggedTrades = logged.getTrades();
assertEquals(loggedTrades.size(), 3);
int i = 0;
for (Trade trade : loggedTrades) {
assertTrue(trade instanceof LoggedResolutionTrade);
// Mockito.verify(logger).log(new ComputationTargetSpecification(ComputationTargetType.TRADE, UniqueId.of("Trade", Integer.toString(i))), UniqueId.of("Trade", Integer.toString(i), "0"));
i++;
}
Mockito.verifyNoMoreInteractions(logger);
}
@SuppressWarnings("unchecked")
public void getAttributes() {
final Position position = Mockito.mock(Position.class);
final ResolutionLogger logger = Mockito.mock(ResolutionLogger.class);
final Position logged = new LoggedResolutionPosition(position, logger);
final Map<String, String> attributes = Mockito.mock(Map.class);
Mockito.when(position.getAttributes()).thenReturn(attributes);
assertSame(logged.getAttributes(), attributes);
Mockito.verifyZeroInteractions(logger);
}
}