def testCannotAddIfPrevRecordExists(self): # len 8 1 12 1 6 6 10 1 msg = '11111111' 'A' '000000000001' 'S' '000001' 'XYZxyz' '0000000005' 'Y' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(self.order_id, result.order_id) self.assertEqual('Duplicate Add record', result.message.split(':')[0])
def testCannotHnadleUnknownMessage(self): # len 8 1 12 6 12 msg = '00000011' '#' '000000000003' '000002' '0123456789ab' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(3, result.order_id) self.assertEqual('Unknown message type %r' % '#', result.message)
def testCannotCancelIfOrderIsNotOpen(self): # len 8 1 12 6 msg = '11111111' 'X' '000000000002' '000011' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(2, result.order_id) self.assertEqual('Cannot cancel', result.message.split('order')[0].strip())
def testCannotHnadleMessageFromPast(self): # len 8 1 12 6 12 msg = '00000011' 'E' '000000000001' '000002' '0123456789ab' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(self.order_id, result.order_id) self.assertEqual('Event \'E\' from past; already seen %d' % self.prev_timestamp, result.message)
def testCanPartlyExecuteAnOpenOrder(self): # len 8 1 12 6 12 msg = '11111111' 'E' '000000000001' '000002' '0123456789ab' result = H.handleMessage(self.orders_state, msg) self.assertTrue(result.success) self.assertEqual(self.order_id, result.record.order_id) self.assertEqual(11111111, result.record.timestamp) self.assertEqual(self.prev_record.amount - 2, result.record.amount) self.assertEqual(self.prev_record.price * 2, result.value)
def testCannotCancelMoreThanTheOpenOrderHas(self): # len 8 1 12 6 msg = '11111111' 'X' '000000000001' '000011' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(self.order_id, result.order_id) # Built-in unittestslack a nice assertStartsWith() self.assertEqual('Trying to cancel 11 shares when only got 10', result.message.split(':')[0])
def testCanComplelyCancelAnOpenOrder(self): # len 8 1 12 6 msg = '11111111' 'X' '000000000001' '000010' result = H.handleMessage(self.orders_state, msg) self.assertTrue(result.success) self.assertEqual(self.order_id, result.record.order_id) self.assertEqual(11111111, result.record.timestamp) self.assertEqual(0, result.record.amount) self.assertEqual(0, result.value)
def testCannotHnadleMessageFromPast(self): # len 8 1 12 6 12 msg = '00000011' 'E' '000000000001' '000002' '0123456789ab' result = H.handleMessage(self.orders_state, msg) self.assertFalse(result.success) self.assertEqual(self.order_id, result.order_id) self.assertEqual( 'Event \'E\' from past; already seen %d' % self.prev_timestamp, result.message)
def testCanAddIfNoPrevRecord(self): # len 8 1 12 1 6 6 10 1 msg = '11111111' 'A' '000000000007' 'S' '000001' 'XYZxyz' '0000000005' 'Y' result = H.handleMessage(self.orders_state, msg) self.assertTrue(result.success) self.assertEqual(7, result.record.order_id) self.assertEqual(11111111, result.record.timestamp) self.assertEqual('XYZxyz', result.record.ticker) self.assertEqual(1, result.record.amount) self.assertEqual(5, result.record.price) self.assertEqual('XYZxyz', result.ticker) self.assertEqual(0, result.value)
def processLine(orders, failures, summary, line): outcome = handleMessage(orders, line) if outcome.success: summary[outcome.ticker] += outcome.value if outcome.record: # trades return no records order_id = outcome.record.order_id if outcome.record.amount: orders[order_id] = outcome.record else: del orders[order_id] # the order was completly executed / closed. else: failures.append(outcome) return orders, failures, summary
def processLine(orders, failures, summary, line): outcome = handleMessage(orders, line) if outcome.success: summary[outcome.ticker] += outcome.value if outcome.record: # trades return no records order_id = outcome.record.order_id if outcome.record.amount: orders[order_id] = outcome.record else: del orders[ order_id] # the order was completly executed / closed. else: failures.append(outcome) return orders, failures, summary