def test_aggregation_for_multiple_trades_pending_state( mock_pre_transform_data): mock_pre_transform_data.return_value = [ Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=100), Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=100), ] actual = get_aggregated_data(test_input_file) expected = { 234: TradeAggregate( number_of_trades=3, trade_limit=1000, trade_value=200, trade_count=2, state="Pending", ) } assert actual == expected
def test_aggregation_for_multiple_trades_mock_aggregated_state( mock_pre_transform_data, mock_aggregate): mock_pre_transform_data.return_value = [ Trade(correlation_id=234, number_of_trades=2, trade_limit=1000, trade_value=100), Trade(correlation_id=234, number_of_trades=2, trade_limit=1000, trade_value=200), ] mock_aggregate.return_value = TradeAggregate( number_of_trades=2, trade_limit=1000, trade_value=300, trade_count=2, state="Accepted", ) actual = get_aggregated_data(test_input_file) expected = { 234: TradeAggregate( number_of_trades=2, trade_limit=1000, trade_value=300, trade_count=2, state="Accepted", ), } assert actual == expected
def test_pre_transform_multiple_row_data(mock_load_data): mock_load_data.return_value = [ '\t<Trade CorrelationId="234" NumberOfTrades="3" Limit="1000" TradeID="654">100</Trade>\n', '\t<Trade CorrelationId="255" NumberOfTrades="6" Limit="1000" TradeID="444">300</Trade>\n' ] expected = [ Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=100), Trade(correlation_id=255, number_of_trades=6, trade_limit=1000, trade_value=300) ] actual = pre_transform_data('') assert expected == actual
def test_aggregation_for_multiple_trades_all_three_states( mock_pre_transform_data): mock_pre_transform_data.return_value = [ Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=100), Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=200), Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=200), Trade(correlation_id=222, number_of_trades=1, trade_limit=500, trade_value=600), Trade(correlation_id=200, number_of_trades=2, trade_limit=2000, trade_value=1000), ] actual = get_aggregated_data(test_input_file) expected = { 234: TradeAggregate( number_of_trades=3, trade_limit=1000, trade_value=500, trade_count=3, state="Accepted", ), 222: TradeAggregate( number_of_trades=1, trade_limit=500, trade_value=600, trade_count=1, state="Rejected", ), 200: TradeAggregate( number_of_trades=2, trade_limit=2000, trade_value=1000, trade_count=1, state="Pending", ), } assert actual == expected
def test_pre_transform_row_data(mock_load_data): mock_load_data.return_value = [ '\t<Trade CorrelationId="234" NumberOfTrades="3" Limit="1000" TradeID="654">100</Trade>\n', ] expected = Trade(correlation_id=234, number_of_trades=3, trade_limit=1000, trade_value=100) actual = pre_transform_data('') assert expected == actual[0]
def pre_transform_data(file_name): entire_lines = load_data(file_name) row_data = map(extract, entire_lines) extra = [] for item in row_data: *rest, _, trade_value = list(item) extra.append(Trade(*rest, trade_value)) return extra
def test_aggregate_first_time(): trade = Trade(correlation_id=3, number_of_trades=2, trade_limit=100, trade_value=1) actual = aggregate(trade, False) expected = TradeAggregate( number_of_trades=2, trade_limit=100, trade_value=1, trade_count=1, state="Pending", ) assert actual == expected
def test_accepted_single_trade_rejected_state(mock_pre_transform_data): mock_pre_transform_data.return_value = [ Trade(correlation_id=234, number_of_trades=1, trade_limit=50, trade_value=100) ] actual = get_aggregated_data(test_input_file) expected = { 234: TradeAggregate( number_of_trades=1, trade_limit=50, trade_value=100, trade_count=1, state="Rejected", ) } assert actual == expected
def test_aggregate_existing_trade(): trade = Trade(correlation_id=2, number_of_trades=2, trade_limit=100, trade_value=1) existing_trade = TradeAggregate( number_of_trades=2, trade_limit=100, trade_value=75, trade_count=1, state="Pending", ) actual = aggregate(trade, existing_trade) expected = TradeAggregate( number_of_trades=2, trade_limit=100, trade_value=76, trade_count=2, state="Accepted", ) assert actual == expected