@@ -1261,28 +1261,58 @@ fn querying_roles_should_work() {
12611261#[ test]
12621262fn normal_asset_create_and_destroy_callbacks_should_work ( ) {
12631263 new_test_ext ( ) . execute_with ( || {
1264- assert ! ( storage:: get( b"asset_created" ) . is_none( ) ) ;
1265- assert ! ( storage:: get( b"asset_destroyed" ) . is_none( ) ) ;
1264+ assert ! ( storage:: get( AssetsCallbackHandle :: CREATED . as_bytes ( ) ) . is_none( ) ) ;
1265+ assert ! ( storage:: get( AssetsCallbackHandle :: DESTROYED . as_bytes ( ) ) . is_none( ) ) ;
12661266
12671267 Balances :: make_free_balance_be ( & 1 , 100 ) ;
12681268 assert_ok ! ( Assets :: create( RuntimeOrigin :: signed( 1 ) , 0 , 1 , 1 ) ) ;
1269- assert ! ( storage:: get( b"asset_created" ) . is_some( ) ) ;
1270- assert ! ( storage:: get( b"asset_destroyed" ) . is_none( ) ) ;
1269+ assert ! ( storage:: get( AssetsCallbackHandle :: CREATED . as_bytes ( ) ) . is_some( ) ) ;
1270+ assert ! ( storage:: get( AssetsCallbackHandle :: DESTROYED . as_bytes ( ) ) . is_none( ) ) ;
12711271
12721272 assert_ok ! ( Assets :: start_destroy( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
12731273 assert_ok ! ( Assets :: destroy_accounts( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
12741274 assert_ok ! ( Assets :: destroy_approvals( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
1275+ // Callback still hasn't been invoked
1276+ assert ! ( storage:: get( AssetsCallbackHandle :: DESTROYED . as_bytes( ) ) . is_none( ) ) ;
1277+
12751278 assert_ok ! ( Assets :: finish_destroy( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
1276- assert ! ( storage:: get( b"asset_destroyed" ) . is_some( ) ) ;
1279+ assert ! ( storage:: get( AssetsCallbackHandle :: DESTROYED . as_bytes ( ) ) . is_some( ) ) ;
12771280 } ) ;
12781281}
12791282
12801283#[ test]
12811284fn root_asset_create_should_work ( ) {
12821285 new_test_ext ( ) . execute_with ( || {
1283- assert ! ( storage:: get( b"asset_created" ) . is_none( ) ) ;
1286+ assert ! ( storage:: get( AssetsCallbackHandle :: CREATED . as_bytes ( ) ) . is_none( ) ) ;
12841287 assert_ok ! ( Assets :: force_create( RuntimeOrigin :: root( ) , 0 , 1 , true , 1 ) ) ;
1285- assert ! ( storage:: get( b"asset_created" ) . is_some( ) ) ;
1286- assert ! ( storage:: get( b"asset_destroyed" ) . is_none( ) ) ;
1288+ assert ! ( storage:: get( AssetsCallbackHandle :: CREATED . as_bytes( ) ) . is_some( ) ) ;
1289+ assert ! ( storage:: get( AssetsCallbackHandle :: DESTROYED . as_bytes( ) ) . is_none( ) ) ;
1290+ } ) ;
1291+ }
1292+
1293+ #[ test]
1294+ fn asset_create_and_destroy_is_reverted_if_callback_fails ( ) {
1295+ new_test_ext ( ) . execute_with ( || {
1296+ // Asset creation fails due to callback failure
1297+ AssetsCallbackHandle :: set_return_error ( ) ;
1298+ Balances :: make_free_balance_be ( & 1 , 100 ) ;
1299+ assert_noop ! (
1300+ Assets :: create( RuntimeOrigin :: signed( 1 ) , 0 , 1 , 1 ) ,
1301+ Error :: <Test >:: CallbackFailed
1302+ ) ;
1303+
1304+ // Callback succeeds, so asset creation succeeds
1305+ AssetsCallbackHandle :: set_return_ok ( ) ;
1306+ assert_ok ! ( Assets :: create( RuntimeOrigin :: signed( 1 ) , 0 , 1 , 1 ) ) ;
1307+
1308+ // Asset destroy should fail due to callback failure
1309+ AssetsCallbackHandle :: set_return_error ( ) ;
1310+ assert_ok ! ( Assets :: start_destroy( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
1311+ assert_ok ! ( Assets :: destroy_accounts( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
1312+ assert_ok ! ( Assets :: destroy_approvals( RuntimeOrigin :: signed( 1 ) , 0 ) ) ;
1313+ assert_noop ! (
1314+ Assets :: finish_destroy( RuntimeOrigin :: signed( 1 ) , 0 ) ,
1315+ Error :: <Test >:: CallbackFailed
1316+ ) ;
12871317 } ) ;
12881318}
0 commit comments