ibapi 5.4.0

An unofficial Rust client for the Interactive Brokers TWS API: market data, orders, and account data, with async (Tokio) and blocking clients for TWS and IB Gateway.
Documentation
use super::*;
use crate::common::test_utils::helpers::proto_response;
use crate::testdata::builders::display_groups::display_group_updated;
use crate::testdata::builders::ResponseProtoEncoder;

fn test_context() -> DecoderContext {
    DecoderContext::new(176)
}

fn updated_proto_message(contract_info: &str) -> ResponseMessage {
    let bytes = display_group_updated().contract_info(contract_info).encode_proto();
    proto_response(IncomingMessages::DisplayGroupUpdated, bytes)
}

#[test]
fn decode_display_group_update() {
    let message = updated_proto_message("265598@SMART");

    let result = DisplayGroupUpdate::decode(&test_context(), &message).expect("decoding failed");

    assert_eq!(result.contract_info, "265598@SMART");
}

#[test]
fn decode_display_group_update_empty() {
    let message = updated_proto_message("");

    let result = DisplayGroupUpdate::decode(&test_context(), &message).expect("decoding failed");

    assert_eq!(result.contract_info, "");
}

#[test]
fn decode_wrong_message_type() {
    let bytes = display_group_updated().contract_info("data").encode_proto();
    let message = proto_response(IncomingMessages::DisplayGroupList, bytes);

    let result = DisplayGroupUpdate::decode(&test_context(), &message);

    assert!(result.is_err());
}

#[test]
fn cancel_message_works() {
    use crate::testdata::builders::display_groups::unsubscribe_from_group_events_request;
    use crate::testdata::builders::RequestEncoder;

    let message = DisplayGroupUpdate::cancel_message(176, Some(9000), None).expect("cancel message failed");
    assert_eq!(message, unsubscribe_from_group_events_request().request_id(9000).encode_request());
}

#[test]
fn cancel_message_no_request_id() {
    let result = DisplayGroupUpdate::cancel_message(176, None, None);

    assert!(result.is_err());
}