ibapi 1.0.8

A Rust implementation of the Interactive Brokers TWS API, providing a reliable and user friendly interface for TWS and IB Gateway. Designed with a focus on simplicity and performance.
Documentation
use crate::ToField;

use super::*;

#[test]
fn test_encode_request_positions() {
    let message = super::encode_request_positions().expect("error encoding request");

    assert_eq!(message[0], OutgoingMessages::RequestPositions.to_field(), "message.type");
    assert_eq!(message[1], "1", "message.version");
}

#[test]
fn test_encode_cancel_positions() {
    let message = super::encode_cancel_positions().expect("error encoding request");

    assert_eq!(message[0], OutgoingMessages::CancelPositions.to_field(), "message.type");
    assert_eq!(message[1], "1", "message.version");
}

#[test]
fn test_encode_request_positions_multi() {
    let request_id = 9000;
    let version = 1;
    let account = Some("U1234567");
    let model_code = Some("TARGET2024");

    let message = super::encode_request_positions_multi(request_id, account, model_code).expect("error encoding request");

    assert_eq!(message[0], OutgoingMessages::RequestPositionsMulti.to_field(), "message.type");
    assert_eq!(message[1], version.to_field(), "message.version");
    assert_eq!(message[2], request_id.to_field(), "message.request_id");
    assert_eq!(message[3], account.to_field(), "message.account");
    assert_eq!(message[4], model_code.to_field(), "message.model_code");
}

#[test]
fn test_encode_cancel_positions_multi() {
    let request_id = 9000;
    let version = 1;

    let message = super::encode_cancel_positions_multi(request_id).expect("error encoding request");

    assert_eq!(message[0], OutgoingMessages::CancelPositionsMulti.to_field(), "message.type");
    assert_eq!(message[1], version.to_field(), "message.version");
    assert_eq!(message[2], request_id.to_field(), "message.request_id");
}

#[test]
fn test_encode_request_family_codes() {
    let message = super::encode_request_family_codes().expect("error encoding request");

    assert_eq!(message[0], OutgoingMessages::RequestFamilyCodes.to_field(), "message.type");
    assert_eq!(message[1], "1", "message.version");
}

#[test]
fn test_encode_request_pnl() {
    let request_id = 3000;
    let account = "DU1234567";
    let model_code: Option<&str> = None;

    let request = super::encode_request_pnl(request_id, &account, model_code).expect("encode request pnl failed");

    assert_eq!(request[0], OutgoingMessages::RequestPnL.to_field(), "message.type");
    assert_eq!(request[1], request_id.to_field(), "message.request_id");
    assert_eq!(request[2], account, "message.account");
    assert_eq!(request[3], "", "message.model_code");
}

#[test]
fn test_encode_request_pnl_single() {
    let request_id = 3000;
    let account = "DU1234567";
    let model_code: Option<&str> = None;
    let contract_id = 1001;

    let request = super::encode_request_pnl_single(request_id, &account, contract_id, model_code).expect("encode request pnl failed");

    assert_eq!(request[0], OutgoingMessages::RequestPnLSingle.to_field(), "message.type");
    assert_eq!(request[1], request_id.to_field(), "message.request_id");
    assert_eq!(request[2], account, "message.account");
    assert_eq!(request[3], "", "message.model_code");
    assert_eq!(request[4], contract_id.to_field(), "message.contract_id");
}

#[test]
fn test_encode_request_account_summary() {
    let version = 1;
    let request_id = 3000;
    let group = "All";
    let tags: &[&str] = &["AccountType", "TotalCashValue"];

    let request = super::encode_request_account_summary(request_id, group, tags).expect("encode request pnl failed");

    assert_eq!(request[0], OutgoingMessages::RequestAccountSummary.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], request_id.to_field(), "message.request_id");
    assert_eq!(request[3], group.to_field(), "message.group");
    assert_eq!(request[4], tags.join(","), "message.tags");
}

#[test]
fn test_encode_request_account_updates() {
    let server_version = 9;
    let version = 2;
    let account = "DU1234567";

    let request = super::encode_request_account_updates(server_version, &account).expect("encode request account updates");

    assert_eq!(request[0], OutgoingMessages::RequestAccountData.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], true.to_field(), "message.subscribe");

    let server_version = 10;

    let request = super::encode_request_account_updates(server_version, &account).expect("encode request account updates");

    assert_eq!(request[0], OutgoingMessages::RequestAccountData.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], true.to_field(), "message.subscribe");
    assert_eq!(request[3], account.to_field(), "message.account");
}

#[test]
fn test_encode_cancel_account_updates() {
    let server_version = 9;
    let version = 2;

    let request = super::encode_cancel_account_updates(server_version).expect("encode cancel account updates");

    assert_eq!(request[0], OutgoingMessages::RequestAccountData.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], false.to_field(), "message.subscribe");

    let server_version = 10;
    let account = "";

    let request = super::encode_cancel_account_updates(server_version).expect("encode cancel account updates");

    assert_eq!(request[0], OutgoingMessages::RequestAccountData.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], false.to_field(), "message.subscribe");
    assert_eq!(request[3], account.to_field(), "message.account");
}

#[test]
fn test_encode_request_account_updates_multi() {
    let request_id = 9000;
    let version = 1;
    let account = "DU1234567";
    let model_code = None;

    let request = super::encode_request_account_updates_multi(request_id, Some(&account), model_code).expect("encode request account updates");

    assert_eq!(request[0], OutgoingMessages::RequestAccountUpdatesMulti.to_field(), "message.type");
    assert_eq!(request[1], version.to_field(), "message.version");
    assert_eq!(request[2], request_id.to_field(), "message.request_id");
    assert_eq!(request[3], account.to_field(), "message.account");
    assert_eq!(request[4], model_code.to_field(), "message.model_code");
    assert_eq!(request[5], true.to_field(), "message.subscribe");
}