Skip to content

Commit

Permalink
update tests (#130)
Browse files Browse the repository at this point in the history
  • Loading branch information
wboayue authored Oct 17, 2024
1 parent b70f4d2 commit 4c2ab8b
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 57 deletions.
16 changes: 8 additions & 8 deletions examples/tick_by_tick.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ fn contract_gc() -> Contract {
contract
}

fn contract_zn() -> Contract {
let mut contract = Contract::futures("ZN");
contract.exchange = "CBOT".to_owned();
contract.contract_id = 568735904;
contract
}

fn stream_all_last(client: &Client, symbol: &str) -> anyhow::Result<()> {
// fn contract_zn() -> Contract {
// let mut contract = Contract::futures("ZN");
// contract.exchange = "CBOT".to_owned();
// contract.contract_id = 568735904;
// contract
// }

fn stream_all_last(client: &Client, _symbol: &str) -> anyhow::Result<()> {
let contract = contract_es();
let ticks = client.tick_by_tick_all_last(&contract, 0, false)?;

Expand Down
22 changes: 2 additions & 20 deletions src/accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,6 @@ pub enum AccountSummaries {
End,
}

impl From<AccountSummary> for AccountSummaries {
fn from(val: AccountSummary) -> Self {
AccountSummaries::Summary(val)
}
}

impl Subscribable<AccountSummaries> for AccountSummaries {
const RESPONSE_MESSAGE_IDS: &[IncomingMessages] = &[IncomingMessages::AccountSummary, IncomingMessages::AccountSummaryEnd];

Expand Down Expand Up @@ -196,12 +190,6 @@ pub enum PositionUpdate {
PositionEnd,
}

impl From<Position> for PositionUpdate {
fn from(val: Position) -> Self {
PositionUpdate::Position(val)
}
}

impl Subscribable<PositionUpdate> for PositionUpdate {
const RESPONSE_MESSAGE_IDS: &[IncomingMessages] = &[IncomingMessages::Position, IncomingMessages::PositionEnd];

Expand All @@ -225,12 +213,6 @@ pub enum PositionUpdateMulti {
PositionEnd,
}

impl From<PositionMulti> for PositionUpdateMulti {
fn from(val: PositionMulti) -> Self {
PositionUpdateMulti::Position(val)
}
}

/// Portfolio's open positions.
#[derive(Debug, Clone, Default)]
pub struct PositionMulti {
Expand Down Expand Up @@ -354,7 +336,7 @@ pub struct AccountUpdateTime {

/// Account's information, portfolio and last update time
#[allow(clippy::large_enum_variant)]
#[derive(Debug)]
#[derive(Debug, PartialEq)]
pub enum AccountUpdateMulti {
/// Receives the subscribed account's information.
AccountMultiValue(AccountMultiValue),
Expand All @@ -363,7 +345,7 @@ pub enum AccountUpdateMulti {
}

// Provides the account updates.
#[derive(Debug, Default)]
#[derive(Debug, Default, PartialEq)]
pub struct AccountMultiValue {
/// he account with updates.
pub account: String,
Expand Down
61 changes: 61 additions & 0 deletions src/accounts/encoders/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,64 @@ fn test_encode_request_account_summary() {
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");
}
22 changes: 15 additions & 7 deletions src/accounts/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ fn test_account_updates_multi() {
response_messages: vec![
responses::ACCOUNT_UPDATE_MULTI_CASH_BALANCE.into(),
responses::ACCOUNT_UPDATE_MULTI_CURRENCY.into(),
responses::ACCOUNT_UPDATE_MULTI_STOCK_MARKET_VALUE.into(),
responses::ACCOUNT_UPDATE_MULTI_END.into(),
],
});
Expand All @@ -144,16 +145,23 @@ fn test_account_updates_multi() {
let account = Some("DU1234567");
let subscription = client.account_updates_multi(account, None).expect("request managed accounts failed");

let update = subscription.next().unwrap();
match update {
AccountUpdateMulti::AccountMultiValue(value) => {
assert_eq!(value.key, "CashBalance");
}
AccountUpdateMulti::End => {
panic!("value expected")
let expected_keys = &["CashBalance", "Currency", "StockMarketValue"];

for key in expected_keys {
let update = subscription.next().unwrap();
match update {
AccountUpdateMulti::AccountMultiValue(value) => {
assert_eq!(value.key, *key);
}
AccountUpdateMulti::End => {
panic!("value expected")
}
}
}

let end = subscription.next().unwrap();
assert_eq!(end, AccountUpdateMulti::End);

subscription.cancel();

let request_messages = client.message_bus.request_messages();
Expand Down
27 changes: 6 additions & 21 deletions src/stubs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl MessageBus for MessageBusStub {
}

fn send_request(&self, request_id: i32, message: &RequestMessage) -> Result<InternalSubscription, Error> {
mock_request(self, Some(request_id), None, message)
Ok(mock_request(self, Some(request_id), None, message))
}

fn cancel_subscription(&self, request_id: i32, packet: &RequestMessage) -> Result<(), Error> {
Expand All @@ -29,7 +29,7 @@ impl MessageBus for MessageBusStub {
}

fn send_order_request(&self, request_id: i32, message: &RequestMessage) -> Result<InternalSubscription, Error> {
mock_request(self, Some(request_id), None, message)
Ok(mock_request(self, Some(request_id), None, message))
}

fn cancel_order_subscription(&self, request_id: i32, packet: &RequestMessage) -> Result<(), Error> {
Expand All @@ -38,11 +38,11 @@ impl MessageBus for MessageBusStub {
}

fn send_shared_request(&self, message_type: OutgoingMessages, message: &RequestMessage) -> Result<InternalSubscription, Error> {
mock_request(self, None, Some(message_type), message)
Ok(mock_request(self, None, Some(message_type), message))
}

fn cancel_shared_subscription(&self, message_type: OutgoingMessages, packet: &RequestMessage) -> Result<(), Error> {
mock_request(self, None, Some(message_type), packet)?;
mock_request(self, None, Some(message_type), packet);
Ok(())
}

Expand All @@ -58,7 +58,7 @@ fn mock_request(
request_id: Option<i32>,
message_type: Option<OutgoingMessages>,
message: &RequestMessage,
) -> Result<InternalSubscription, Error> {
) -> InternalSubscription {
stub.request_messages.write().unwrap().push(message.clone());

let (sender, receiver) = channel::unbounded();
Expand All @@ -77,20 +77,5 @@ fn mock_request(
subscription = subscription.message_type(message_type);
}

Ok(subscription.build())
}

fn mock_global_request(stub: &mut MessageBusStub, message: &RequestMessage) -> Result<InternalSubscription, Error> {
stub.request_messages.write().unwrap().push(message.clone());

let (sender, receiver) = channel::unbounded();

for message in &stub.response_messages {
let message = ResponseMessage::from(&message.replace('|', "\0"));
sender.send(Response::from(message)).unwrap();
}

let subscription = SubscriptionBuilder::new().shared_receiver(Arc::new(receiver)).build();

Ok(subscription)
subscription.build()
}
2 changes: 1 addition & 1 deletion src/testdata/responses.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pub const POSITION: &str = "61\03\0DU1234567\076792991\0TSLA\0STK\0\00.0\0\0\0NASDAQ\0USD\0TSLA\0NMS\0500\0196.77\0";
//pub const POSITION: &str = "61\03\0DU1234567\076792991\0TSLA\0STK\0\00.0\0\0\0NASDAQ\0USD\0TSLA\0NMS\0500\0196.77\0";
pub const MANAGED_ACCOUNT: &str = "15|1|DU1234567,DU7654321|";

pub const ACCOUNT_UPDATE_MULTI_CASH_BALANCE: &str = "73|1|9000|DU1234567||CashBalance|94629.71|USD||";
Expand Down

0 comments on commit 4c2ab8b

Please sign in to comment.