use ccxt_core::types::EndpointType;
pub trait BitgetEndpointRouter {
fn rest_endpoint(&self) -> &'static str;
fn ws_endpoint(&self, endpoint_type: EndpointType) -> &str;
}
use super::Bitget;
impl BitgetEndpointRouter for Bitget {
fn rest_endpoint(&self) -> &'static str {
if self.is_sandbox() {
"https://api-testnet.bitget.com"
} else {
"https://api.bitget.com"
}
}
fn ws_endpoint(&self, endpoint_type: EndpointType) -> &str {
if self.is_sandbox() {
match endpoint_type {
EndpointType::Public => "wss://ws-testnet.bitget.com/v2/ws/public",
EndpointType::Private => "wss://ws-testnet.bitget.com/v2/ws/private",
}
} else {
match endpoint_type {
EndpointType::Public => "wss://ws.bitget.com/v2/ws/public",
EndpointType::Private => "wss://ws.bitget.com/v2/ws/private",
}
}
}
}
#[cfg(test)]
mod tests {
#![allow(clippy::disallowed_methods)]
use super::*;
use crate::bitget::BitgetOptions;
use ccxt_core::ExchangeConfig;
fn create_test_bitget() -> Bitget {
Bitget::new(ExchangeConfig::default()).unwrap()
}
fn create_sandbox_bitget() -> Bitget {
let config = ExchangeConfig {
sandbox: true,
..Default::default()
};
Bitget::new(config).unwrap()
}
#[test]
fn test_rest_endpoint_production() {
let bitget = create_test_bitget();
let url = bitget.rest_endpoint();
assert_eq!(url, "https://api.bitget.com");
assert!(!url.contains("testnet"));
}
#[test]
fn test_rest_endpoint_sandbox() {
let bitget = create_sandbox_bitget();
let url = bitget.rest_endpoint();
assert_eq!(url, "https://api-testnet.bitget.com");
}
#[test]
fn test_ws_endpoint_public_production() {
let bitget = create_test_bitget();
let url = bitget.ws_endpoint(EndpointType::Public);
assert_eq!(url, "wss://ws.bitget.com/v2/ws/public");
assert!(!url.contains("testnet"));
}
#[test]
fn test_ws_endpoint_public_sandbox() {
let bitget = create_sandbox_bitget();
let url = bitget.ws_endpoint(EndpointType::Public);
assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
}
#[test]
fn test_ws_endpoint_private_production() {
let bitget = create_test_bitget();
let url = bitget.ws_endpoint(EndpointType::Private);
assert_eq!(url, "wss://ws.bitget.com/v2/ws/private");
assert!(!url.contains("testnet"));
}
#[test]
fn test_ws_endpoint_private_sandbox() {
let bitget = create_sandbox_bitget();
let url = bitget.ws_endpoint(EndpointType::Private);
assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
}
#[test]
fn test_rest_endpoint_with_testnet_option() {
let config = ExchangeConfig::default();
let options = BitgetOptions {
testnet: true,
..Default::default()
};
let bitget = Bitget::new_with_options(config, options).unwrap();
let url = bitget.rest_endpoint();
assert_eq!(url, "https://api-testnet.bitget.com");
}
#[test]
fn test_ws_endpoint_public_with_testnet_option() {
let config = ExchangeConfig::default();
let options = BitgetOptions {
testnet: true,
..Default::default()
};
let bitget = Bitget::new_with_options(config, options).unwrap();
let url = bitget.ws_endpoint(EndpointType::Public);
assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/public");
}
#[test]
fn test_ws_endpoint_private_with_testnet_option() {
let config = ExchangeConfig::default();
let options = BitgetOptions {
testnet: true,
..Default::default()
};
let bitget = Bitget::new_with_options(config, options).unwrap();
let url = bitget.ws_endpoint(EndpointType::Private);
assert_eq!(url, "wss://ws-testnet.bitget.com/v2/ws/private");
}
#[test]
fn test_rest_endpoint_consistency_with_urls() {
let bitget = create_test_bitget();
let router_url = bitget.rest_endpoint();
let urls_rest = bitget.urls().rest;
assert_eq!(router_url, urls_rest);
}
#[test]
fn test_ws_public_endpoint_consistency_with_urls() {
let bitget = create_test_bitget();
let router_url = bitget.ws_endpoint(EndpointType::Public);
let urls_ws_public = bitget.urls().ws_public;
assert_eq!(router_url, urls_ws_public);
}
#[test]
fn test_ws_private_endpoint_consistency_with_urls() {
let bitget = create_test_bitget();
let router_url = bitget.ws_endpoint(EndpointType::Private);
let urls_ws_private = bitget.urls().ws_private;
assert_eq!(router_url, urls_ws_private);
}
#[test]
fn test_sandbox_rest_endpoint_consistency_with_urls() {
let bitget = create_sandbox_bitget();
let router_url = bitget.rest_endpoint();
let urls_rest = bitget.urls().rest;
assert_eq!(router_url, urls_rest);
}
#[test]
fn test_sandbox_ws_public_endpoint_consistency_with_urls() {
let bitget = create_sandbox_bitget();
let router_url = bitget.ws_endpoint(EndpointType::Public);
let urls_ws_public = bitget.urls().ws_public;
assert_eq!(router_url, urls_ws_public);
}
#[test]
fn test_sandbox_ws_private_endpoint_consistency_with_urls() {
let bitget = create_sandbox_bitget();
let router_url = bitget.ws_endpoint(EndpointType::Private);
let urls_ws_private = bitget.urls().ws_private;
assert_eq!(router_url, urls_ws_private);
}
#[test]
fn test_endpoint_type_public_is_public() {
assert!(EndpointType::Public.is_public());
assert!(!EndpointType::Public.is_private());
}
#[test]
fn test_endpoint_type_private_is_private() {
assert!(EndpointType::Private.is_private());
assert!(!EndpointType::Private.is_public());
}
#[test]
fn test_rest_endpoint_uses_https() {
let bitget = create_test_bitget();
let url = bitget.rest_endpoint();
assert!(url.starts_with("https://"));
}
#[test]
fn test_ws_endpoint_uses_wss() {
let bitget = create_test_bitget();
let ws_public = bitget.ws_endpoint(EndpointType::Public);
assert!(ws_public.starts_with("wss://"));
let ws_private = bitget.ws_endpoint(EndpointType::Private);
assert!(ws_private.starts_with("wss://"));
}
#[test]
fn test_ws_endpoint_contains_v2_path() {
let bitget = create_test_bitget();
let ws_public = bitget.ws_endpoint(EndpointType::Public);
assert!(ws_public.contains("/v2/ws/"));
let ws_private = bitget.ws_endpoint(EndpointType::Private);
assert!(ws_private.contains("/v2/ws/"));
}
}