use openfigi_rs::model::enums::{Currency, ExchCode, MarketSecDesc, SecurityType};
use serial_test::serial;
mod common;
use common::{create_test_client, rate_limit_delay};
#[tokio::test]
#[serial]
async fn test_filter_basic_query() {
let client = create_test_client();
let filter_data = client
.filter()
.query("technology")
.send()
.await
.expect("Filter request should succeed");
assert!(
filter_data.next_page().is_some(),
"Pagination information should be present"
);
assert!(
filter_data.total_results().is_some(),
"Total results count should be present"
);
let figi_result = filter_data.data();
assert!(
!figi_result.is_empty(),
"Filter results should not be empty"
);
for data in figi_result {
assert!(!data.figi.is_empty(), "FIGI should not be empty");
assert!(data.name.is_some(), "Name should be present");
}
rate_limit_delay().await;
}
#[tokio::test]
#[serial]
async fn test_filter_with_multiple_criteria() {
let client = create_test_client();
let filter_data = client
.filter()
.query("energy")
.currency(Currency::USD)
.exch_code(ExchCode::US)
.market_sec_des(MarketSecDesc::Equity)
.security_type(SecurityType::CommonStock)
.send()
.await
.expect("Filter request with multiple criteria should succeed");
assert!(
filter_data.next_page().is_some(),
"Pagination information should be present"
);
assert!(
filter_data.total_results().is_some(),
"Total results count should be present"
);
let figi_result = filter_data.data();
for data in figi_result {
if let Some(exch_code) = &data.exch_code {
assert_eq!(exch_code, &ExchCode::US);
}
if let Some(market_sector) = &data.market_sector {
assert_eq!(market_sector, &MarketSecDesc::Equity);
}
if let Some(security_type) = &data.security_type {
assert_eq!(security_type, &SecurityType::CommonStock);
}
}
rate_limit_delay().await;
}
#[tokio::test]
#[serial]
async fn test_filter_empty_results() {
let client = create_test_client();
let filter_data = client
.filter()
.query("xyzneverexistingsecurityname123456")
.send()
.await
.expect("Empty filter request should succeed");
let figi_result = filter_data.data();
assert!(
figi_result.is_empty(),
"Filter results should be empty for non-existent query"
);
rate_limit_delay().await;
}