@@ -218,42 +218,89 @@ fn respond_should_fail_when_signer_is_removed() {
218218}
219219
220220// -----------------------------------------------------------------------------
221- // feeless (Pays::No) annotation
221+ // fee: refunded on success, charged on failure
222222// -----------------------------------------------------------------------------
223223
224224#[ test]
225- fn respond_should_be_feeless_when_called ( ) {
225+ fn respond_should_refund_fee_when_successful ( ) {
226226 new_test_ext ( ) . execute_with ( || {
227- let call = RuntimeCall :: Signet ( crate :: Call :: respond {
228- request_ids : bounded_array :: < 100 > ( vec ! [ [ 1u8 ; 32 ] ] ) ,
229- signatures : bounded_sig :: < 100 > ( vec ! [ create_test_signature( ) ] ) ,
230- } ) ;
231- assert_eq ! ( call. get_dispatch_info( ) . pays_fee, Pays :: No ) ;
227+ assert_ok ! ( Signet :: add_signer( RuntimeOrigin :: root( ) , SIGNER ) ) ;
228+
229+ let info = Signet :: respond (
230+ RuntimeOrigin :: signed ( SIGNER ) ,
231+ bounded_array :: < 100 > ( vec ! [ [ 1u8 ; 32 ] ] ) ,
232+ bounded_sig :: < 100 > ( vec ! [ create_test_signature( ) ] ) ,
233+ )
234+ . expect ( "respond should succeed" ) ;
235+
236+ assert_eq ! ( info. pays_fee, Pays :: No ) ;
232237 } ) ;
233238}
234239
235240#[ test]
236- fn respond_error_should_be_feeless_when_called ( ) {
241+ fn respond_error_should_refund_fee_when_successful ( ) {
237242 new_test_ext ( ) . execute_with ( || {
238- let call = RuntimeCall :: Signet ( crate :: Call :: respond_error {
239- errors : bounded_err :: < 100 > ( vec ! [ ErrorResponse {
243+ assert_ok ! ( Signet :: add_signer( RuntimeOrigin :: root( ) , SIGNER ) ) ;
244+
245+ let info = Signet :: respond_error (
246+ RuntimeOrigin :: signed ( SIGNER ) ,
247+ bounded_err :: < 100 > ( vec ! [ ErrorResponse {
240248 request_id: [ 1u8 ; 32 ] ,
241249 error_message: bounded_u8:: <1024 >( b"boom" . to_vec( ) ) ,
242250 } ] ) ,
243- } ) ;
244- assert_eq ! ( call. get_dispatch_info( ) . pays_fee, Pays :: No ) ;
251+ )
252+ . expect ( "respond_error should succeed" ) ;
253+
254+ assert_eq ! ( info. pays_fee, Pays :: No ) ;
245255 } ) ;
246256}
247257
248258#[ test]
249- fn respond_bidirectional_should_be_feeless_when_called ( ) {
259+ fn respond_bidirectional_should_refund_fee_when_successful ( ) {
250260 new_test_ext ( ) . execute_with ( || {
251- let call = RuntimeCall :: Signet ( crate :: Call :: respond_bidirectional {
252- request_id : [ 1u8 ; 32 ] ,
253- serialized_output : bounded_u8 :: < 65536 > ( b"out" . to_vec ( ) ) ,
254- signature : create_test_signature ( ) ,
255- } ) ;
256- assert_eq ! ( call. get_dispatch_info( ) . pays_fee, Pays :: No ) ;
261+ assert_ok ! ( Signet :: add_signer( RuntimeOrigin :: root( ) , SIGNER ) ) ;
262+
263+ let info = Signet :: respond_bidirectional (
264+ RuntimeOrigin :: signed ( SIGNER ) ,
265+ [ 1u8 ; 32 ] ,
266+ bounded_u8 :: < 65536 > ( b"out" . to_vec ( ) ) ,
267+ create_test_signature ( ) ,
268+ )
269+ . expect ( "respond_bidirectional should succeed" ) ;
270+
271+ assert_eq ! ( info. pays_fee, Pays :: No ) ;
272+ } ) ;
273+ }
274+
275+ #[ test]
276+ fn respond_should_charge_fee_when_unauthorized ( ) {
277+ new_test_ext ( ) . execute_with ( || {
278+ let err = Signet :: respond (
279+ RuntimeOrigin :: signed ( OUTSIDER ) ,
280+ bounded_array :: < 100 > ( vec ! [ [ 1u8 ; 32 ] ] ) ,
281+ bounded_sig :: < 100 > ( vec ! [ create_test_signature( ) ] ) ,
282+ )
283+ . expect_err ( "respond should fail for an unauthorized caller" ) ;
284+
285+ assert_eq ! ( err. error, Error :: <Test >:: NotAuthorizedSigner . into( ) ) ;
286+ assert_eq ! ( err. post_info. pays_fee, Pays :: Yes ) ;
287+ } ) ;
288+ }
289+
290+ #[ test]
291+ fn respond_should_charge_fee_when_input_lengths_mismatch ( ) {
292+ new_test_ext ( ) . execute_with ( || {
293+ assert_ok ! ( Signet :: add_signer( RuntimeOrigin :: root( ) , SIGNER ) ) ;
294+
295+ let err = Signet :: respond (
296+ RuntimeOrigin :: signed ( SIGNER ) ,
297+ bounded_array :: < 100 > ( vec ! [ [ 1u8 ; 32 ] , [ 2u8 ; 32 ] ] ) ,
298+ bounded_sig :: < 100 > ( vec ! [ create_test_signature( ) ] ) ,
299+ )
300+ . expect_err ( "respond should fail on length mismatch" ) ;
301+
302+ assert_eq ! ( err. error, Error :: <Test >:: InvalidInputLength . into( ) ) ;
303+ assert_eq ! ( err. post_info. pays_fee, Pays :: Yes ) ;
257304 } ) ;
258305}
259306
0 commit comments