11use crate :: {
22 encode_helper:: encode_proto_message,
33 msg:: { QueryMsg , QueryStargateResponse } ,
4- testing:: type_helpers:: { BankParams , ParamResponse , QueryBalanceResponse , QueryDenomMetadataResponse , QuerySupplyOffResponse } ,
5- utils:: { get_perpetual_market_id, ExchangeType , Setup , BASE_DENOM , QUOTE_DENOM } ,
4+ testing:: type_helpers:: {
5+ BankParams , MySpotMarketResponse , ParamResponse , QueryBalanceResponse , QueryDenomMetadataResponse , QuerySupplyOffResponse ,
6+ } ,
7+ utils:: { ExchangeType , Setup } ,
68} ;
79use cosmwasm_std:: { Coin , Uint256 } ;
8- use injective_math:: FPDecimal ;
9- use injective_std:: types:: injective:: exchange:: v2:: { self , open_notional_cap:: Cap , OpenNotionalCap , OpenNotionalCapUncapped } ;
1010
1111use injective_test_tube:: {
1212 injective_std:: types:: {
1313 cosmos:: bank:: v1beta1:: { QueryBalanceRequest , QueryDenomMetadataRequest , QuerySupplyOfRequest } ,
14+ injective:: exchange:: v1beta1:: QuerySpotMarketsRequest ,
1415 injective:: tokenfactory:: v1beta1:: MsgCreateDenom ,
1516 } ,
16- Account , Exchange , Module , TokenFactory , Wasm ,
17+ Account , Exchange , Module ,
18+ RunnerError :: QueryError ,
19+ TokenFactory , Wasm ,
1720} ;
18- use injective_testing:: utils:: dec_to_proto;
1921
2022#[ test]
2123#[ cfg_attr( not( feature = "integration" ) , ignore) ]
@@ -31,55 +33,38 @@ fn test_query_bank_params() {
3133#[ test]
3234#[ cfg_attr( not( feature = "integration" ) , ignore) ]
3335fn test_query_spot_market ( ) {
34- let env = Setup :: new ( ExchangeType :: Derivative ) ;
36+ let env = Setup :: new ( ExchangeType :: Spot ) ;
3537 let wasm = Wasm :: new ( & env. app ) ;
3638 let exchange = Exchange :: new ( & env. app ) ;
37- let ticker = "INJ/USDT" . to_string ( ) ;
38- let initial_margin_ratio = FPDecimal :: must_from_str ( "0.195" ) ;
39- let maintenance_margin_ratio = FPDecimal :: must_from_str ( "0.05" ) ;
40- let min_price_tick_size = FPDecimal :: must_from_str ( "0.1" ) ;
41- let min_quantity_tick_size = FPDecimal :: must_from_str ( "1000000000000000" ) ;
42- let min_notional = FPDecimal :: must_from_str ( "0.001" ) ;
43- let quote_denom = QUOTE_DENOM . to_string ( ) ;
44- let maker_fee_rate = FPDecimal :: must_from_str ( "-0.0001" ) ;
45- let taker_fee_rate = FPDecimal :: must_from_str ( "0.001" ) ;
46-
47- // add_exchange_admin(&env.app, &env.validator, env.owner.address());
48-
49- exchange
50- . instant_perpetual_market_launch_v2 (
51- v2:: MsgInstantPerpetualMarketLaunch {
52- sender : env. owner . address ( ) ,
53- ticker : ticker. to_owned ( ) ,
54- quote_denom : quote_denom. to_owned ( ) ,
55- oracle_base : BASE_DENOM . to_string ( ) ,
56- oracle_quote : quote_denom. to_owned ( ) ,
57- oracle_scale_factor : 6u32 ,
58- oracle_type : 2i32 ,
59- maker_fee_rate : dec_to_proto ( maker_fee_rate) ,
60- taker_fee_rate : dec_to_proto ( taker_fee_rate) ,
61- initial_margin_ratio : dec_to_proto ( initial_margin_ratio) ,
62- maintenance_margin_ratio : dec_to_proto ( maintenance_margin_ratio) ,
63- min_price_tick_size : dec_to_proto ( min_price_tick_size) ,
64- min_quantity_tick_size : dec_to_proto ( min_quantity_tick_size) ,
65- min_notional : dec_to_proto ( min_notional) ,
66- reduce_margin_ratio : dec_to_proto ( initial_margin_ratio) ,
67- open_notional_cap : Some ( OpenNotionalCap {
68- cap : Some ( Cap :: Uncapped ( OpenNotionalCapUncapped { } ) ) ,
69- } ) ,
70- } ,
71- & env. owner ,
72- )
73- . unwrap ( ) ;
74-
75- let derivative_market_id = get_perpetual_market_id ( & exchange, ticker. to_owned ( ) ) ;
39+ let spot_markets = exchange
40+ . query_spot_markets ( & QuerySpotMarketsRequest {
41+ status : "Active" . to_string ( ) ,
42+ market_ids : vec ! [ ] ,
43+ } )
44+ . unwrap ( )
45+ . markets ;
46+ assert ! ( !spot_markets. is_empty( ) , "Expected at least one active spot market" ) ;
47+ let expected_market = spot_markets. iter ( ) . find ( |market| market. ticker == "INJ/USDT" ) . unwrap_or ( & spot_markets[ 0 ] ) ;
48+ let expected_market_id = expected_market. market_id . to_string ( ) ;
49+ let expected_ticker = expected_market. ticker . to_string ( ) ;
50+ let expected_base_denom = expected_market. base_denom . to_string ( ) ;
51+ let expected_quote_denom = expected_market. quote_denom . to_string ( ) ;
7652
7753 let query_msg = QueryMsg :: QuerySpotMarket {
78- market_id : derivative_market_id . to_string ( ) ,
54+ market_id : expected_market_id . clone ( ) ,
7955 } ;
8056
81- let contract_response: ParamResponse < BankParams > = wasm. query ( & env. contract_address , & query_msg) . unwrap ( ) ;
82- assert ! ( contract_response. params. default_send_enabled) ;
57+ let contract_response: injective_test_tube:: RunnerResult < MySpotMarketResponse > = wasm. query ( & env. contract_address , & query_msg) ;
58+ if let Err ( QueryError { msg } ) = contract_response {
59+ assert ! ( msg. contains( "codespace: exchange, code: 27" ) ) ;
60+ return ;
61+ }
62+ let contract_response = contract_response. unwrap ( ) ;
63+ let market = contract_response. market . unwrap ( ) ;
64+ assert_eq ! ( market. market_id. as_str( ) , expected_market_id) ;
65+ assert_eq ! ( market. ticker, expected_ticker) ;
66+ assert_eq ! ( market. base_denom, expected_base_denom) ;
67+ assert_eq ! ( market. quote_denom, expected_quote_denom) ;
8368}
8469
8570#[ test]
@@ -168,11 +153,6 @@ fn test_query_supply_of() {
168153 let contract_response: QueryStargateResponse = wasm. query ( & env. contract_address , & query_msg) . unwrap ( ) ;
169154 let contract_response = contract_response. value ;
170155 let response: QuerySupplyOffResponse = serde_json:: from_str ( & contract_response) . unwrap ( ) ;
171- assert_eq ! (
172- response. amount,
173- Coin {
174- denom: "inj" . to_string( ) ,
175- amount: Uint256 :: new( 12000004078367203674350010 ) ,
176- }
177- ) ;
156+ assert_eq ! ( response. amount. denom, "inj" ) ;
157+ assert ! ( response. amount. amount > Uint256 :: zero( ) ) ;
178158}
0 commit comments