package org.marketcetera.quickfix.messagefactory; import junit.framework.Test; import org.marketcetera.core.ClassVersion; import org.marketcetera.core.FIXVersionTestSuite; import org.marketcetera.core.FIXVersionedTestCase; import org.marketcetera.quickfix.FIXMessageFactory; import org.marketcetera.quickfix.FIXMessageUtilTest; import org.marketcetera.quickfix.FIXVersion; import quickfix.Message; import quickfix.field.OrdType; import quickfix.field.Side; import quickfix.field.TimeInForce; import java.math.BigDecimal; /** * @author toli * @version $Id: FIXMessageAugmentor_40Test.java 16154 2012-07-14 16:34:05Z colin $ */ @ClassVersion("$Id: FIXMessageAugmentor_40Test.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$ public class FIXMessageAugmentor_40Test extends FIXVersionedTestCase { public FIXMessageAugmentor_40Test(String inName, FIXVersion version) { super(inName, version); } public static Test suite() { // we dont' really want to setup multi-versioned tests, but it's the easiest way to create the factories return new FIXVersionTestSuite(FIXMessageAugmentor_40Test.class, new FIXVersion[] {FIXVersion.FIX40}); } public void testCountTT_applicableTypes() throws Exception { assertEquals(4, new FIXMessageAugmentor_40().getApplicableMsgTypes().size()); } /* Verify the behaviour where we have a MarketOnClose order We get a Market order and At_The_Close, and we since AtTheClose only shows up in FIX.4.3 we need to translate it into MARKET_ON_CLOSE and DAY order */ public void testMarketOnClose() throws Exception { FIXMessageFactory factory = FIXVersion.FIX40.getMessageFactory(); Message buy = FIXMessageUtilTest.createMarketNOS("TOLI", new BigDecimal("123"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals(OrdType.MARKET, buy.getChar(OrdType.FIELD)); buy.setField(new TimeInForce(TimeInForce.AT_THE_CLOSE)); FIXMessageAugmentor_40 augmentor = new FIXMessageAugmentor_40(); buy = augmentor.newOrderSingleAugment(buy); assertEquals(OrdType.MARKET_ON_CLOSE, buy.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, buy.getChar(TimeInForce.FIELD)); // now send a non-MoC order make sure no changes are made buy = FIXMessageUtilTest.createMarketNOS("TOLI", new BigDecimal("213"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ buy.setField(new TimeInForce(TimeInForce.DAY)); buy = augmentor.newOrderSingleAugment(buy); assertEquals(OrdType.MARKET, buy.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, buy.getChar(TimeInForce.FIELD)); } // same but for cancel/replace orders public void testMarketOnClose_cxr() throws Exception { FIXMessageFactory factory = FIXVersion.FIX40.getMessageFactory(); Message buy = FIXMessageUtilTest.createMarketNOS("TOLI", new BigDecimal("123"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ Message cancelReplace = factory.newCancelReplaceFromMessage(buy); assertEquals(OrdType.MARKET, cancelReplace.getChar(OrdType.FIELD)); cancelReplace.setField(new TimeInForce(TimeInForce.AT_THE_CLOSE)); FIXMessageAugmentor_40 augmentor = new FIXMessageAugmentor_40(); cancelReplace = augmentor.cancelReplaceRequestAugment(cancelReplace); assertEquals(OrdType.MARKET_ON_CLOSE, cancelReplace.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, cancelReplace.getChar(TimeInForce.FIELD)); // now send a non-MoC order make sure no changes are made buy = FIXMessageUtilTest.createMarketNOS("TOLI", new BigDecimal("213"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ buy.setField(new TimeInForce(TimeInForce.DAY)); cancelReplace = factory.newCancelReplaceFromMessage(buy); buy = augmentor.cancelReplaceRequestAugment(cancelReplace); assertEquals(OrdType.MARKET, cancelReplace.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, cancelReplace.getChar(TimeInForce.FIELD)); } public void testLimitOnClose_cxr() throws Exception { FIXMessageFactory factory = FIXVersion.FIX40.getMessageFactory(); Message buy = FIXMessageUtilTest.createNOS("TOLI", new BigDecimal("123"), new BigDecimal("100"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ assertEquals(OrdType.LIMIT, buy.getChar(OrdType.FIELD)); buy.setField(new TimeInForce(TimeInForce.AT_THE_CLOSE)); Message cancelReplace = factory.newCancelReplaceFromMessage(buy); FIXMessageAugmentor_40 augmentor = new FIXMessageAugmentor_40(); cancelReplace = augmentor.cancelReplaceRequestAugment(buy); assertEquals(OrdType.LIMIT_ON_CLOSE, cancelReplace.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, cancelReplace.getChar(TimeInForce.FIELD)); // now send a non-LoC order make sure no changes are made buy = FIXMessageUtilTest.createNOS("TOLI", new BigDecimal("213"), new BigDecimal("100"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ buy.setField(new TimeInForce(TimeInForce.DAY)); cancelReplace = factory.newCancelReplaceFromMessage(buy); cancelReplace = augmentor.newOrderSingleAugment(cancelReplace); assertEquals(OrdType.LIMIT, cancelReplace.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, cancelReplace.getChar(TimeInForce.FIELD)); } public void testLimitOnClose() throws Exception { FIXMessageFactory factory = FIXVersion.FIX40.getMessageFactory(); Message buy = FIXMessageUtilTest.createNOS("TOLI", new BigDecimal("123"), new BigDecimal("100"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ assertEquals(OrdType.LIMIT, buy.getChar(OrdType.FIELD)); buy.setField(new TimeInForce(TimeInForce.AT_THE_CLOSE)); FIXMessageAugmentor_40 augmentor = new FIXMessageAugmentor_40(); buy = augmentor.newOrderSingleAugment(buy); assertEquals(OrdType.LIMIT_ON_CLOSE, buy.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, buy.getChar(TimeInForce.FIELD)); // now send a non-LoC order make sure no changes are made buy = FIXMessageUtilTest.createNOS("TOLI", new BigDecimal("213"), new BigDecimal("100"), Side.BUY, factory); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ buy.setField(new TimeInForce(TimeInForce.DAY)); buy = augmentor.newOrderSingleAugment(buy); assertEquals(OrdType.LIMIT, buy.getChar(OrdType.FIELD)); assertEquals(TimeInForce.DAY, buy.getChar(TimeInForce.FIELD)); } }