From eb66ddf9bc4ccdc63eb61acdc2e625e7b8070ae7 Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Tue, 30 Mar 2021 03:08:18 -0400 Subject: [PATCH 1/7] tests for assets --- frame/assets/src/tests.rs | 73 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 953164a0b9380..c1a82ce73b402 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -556,3 +556,76 @@ fn imbalances_should_work() { assert_eq!(Assets::total_supply(0), 30); }); } +#[test] +fn force_metadata_should_work() { + new_test_ext().execute_with(|| { + //force set metadata works + assert_ok!(Assets::force_create(Origin::root(), 0, 1, true, 1)); + assert_ok!(Assets::force_set_metadata(Origin::root(), 0, vec![0u8; 10], vec![0u8; 10], 8, false)); + assert!(Metadata::::contains_key(0)); + + //overwrites existing metadata + let asset_original_metadata = Metadata::::get(0); + assert_ok!(Assets::force_set_metadata(Origin::root(), 0, vec![1u8; 10], vec![1u8; 10], 8, false)); + assert_ne!(Metadata::::get(0), asset_original_metadata); + + //attempt to set metadata for non-existent asset class + assert_noop!( + Assets::force_set_metadata(Origin::root(), 1, vec![0u8; 10], vec![0u8; 10], 8, false), + Error::::Unknown + ); + + //string length limit check + let limit = StringLimit::get() as usize; + assert_noop!( + Assets::force_set_metadata(Origin::root(), 0, vec![0u8; limit + 1], vec![0u8; 10], 8, false), + Error::::BadMetadata + ); + assert_noop!( + Assets::force_set_metadata(Origin::root(), 0, vec![0u8; 10], vec![0u8; limit + 1], 8, false), + Error::::BadMetadata + ); + + //force clear metadata works + assert!(Metadata::::contains_key(0)); + assert_ok!(Assets::force_clear_metadata(Origin::root(), 0)); + assert!(!Metadata::::contains_key(0)); + + //Error handles clearing non-existent asset class + assert_noop!(Assets::force_clear_metadata(Origin::root(), 1), Error::::Unknown); + + }); +} + +#[test] +fn force_asset_status_should_work(){ + new_test_ext().execute_with(|| { + Balances::make_free_balance_be(&1, 10); + assert_ok!(Assets::create(Origin::signed(1), 0, 1, 30)); + assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 100)); + + //force asset status to change min_balance > balance + assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 101, true, false)); + assert_eq!(Assets::balance(0, 1), 100); + //asset in practice becomes frozen until balance >= min_balance + assert_noop!( + Assets::transfer(Origin::signed(1), 0, 2, 50), + DispatchError::Token(TokenError::BelowMinimum) + ); + + //force asset status will not execute for non-existent class + assert_noop!( + Assets::force_asset_status(Origin::root(), 1, 1, 1, 1, 1, 90, true, false), + Error::::Unknown + ); + + //account drains to completion when funds dip below min_balance + assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 90, true, false)); + assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 50)); + assert_eq!(Assets::balance(0, 1), 0); + assert_eq!(Assets::balance(0, 2), 100); + assert_eq!(Assets::total_supply(0), 100); + }); + +} + From 9e755950fbc72809838ba67ac0a81dda8f2fbcae Mon Sep 17 00:00:00 2001 From: ferrell-code <70108835+ferrell-code@users.noreply.github.com> Date: Tue, 30 Mar 2021 14:15:25 -0400 Subject: [PATCH 2/7] Update frame/assets/src/tests.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bastian Köcher --- frame/assets/src/tests.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index c1a82ce73b402..2201d9c4a9567 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -593,7 +593,6 @@ fn force_metadata_should_work() { //Error handles clearing non-existent asset class assert_noop!(Assets::force_clear_metadata(Origin::root(), 1), Error::::Unknown); - }); } @@ -628,4 +627,3 @@ fn force_asset_status_should_work(){ }); } - From 02b580361d9f4f1a1bf5f195513486ac40ce5f19 Mon Sep 17 00:00:00 2001 From: ferrell-code <70108835+ferrell-code@users.noreply.github.com> Date: Tue, 30 Mar 2021 14:16:01 -0400 Subject: [PATCH 3/7] Update frame/assets/src/tests.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bastian Köcher --- frame/assets/src/tests.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 2201d9c4a9567..7256fd4e60d98 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -625,5 +625,4 @@ fn force_asset_status_should_work(){ assert_eq!(Assets::balance(0, 2), 100); assert_eq!(Assets::total_supply(0), 100); }); - } From 90fecf52267c1edb10d060643f3e3fd21ec481aa Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Wed, 31 Mar 2021 16:28:41 -0400 Subject: [PATCH 4/7] add force asset status check --- frame/assets/src/tests.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 7256fd4e60d98..3bdfc004b49d4 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -556,6 +556,7 @@ fn imbalances_should_work() { assert_eq!(Assets::total_supply(0), 30); }); } + #[test] fn force_metadata_should_work() { new_test_ext().execute_with(|| { @@ -612,6 +613,10 @@ fn force_asset_status_should_work(){ DispatchError::Token(TokenError::BelowMinimum) ); + //give account asset so balance == min_balance + assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 1)); + assert_eq!(Assets::balance(0, 1), 101); + //force asset status will not execute for non-existent class assert_noop!( Assets::force_asset_status(Origin::root(), 1, 1, 1, 1, 1, 90, true, false), @@ -622,7 +627,7 @@ fn force_asset_status_should_work(){ assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 90, true, false)); assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 50)); assert_eq!(Assets::balance(0, 1), 0); - assert_eq!(Assets::balance(0, 2), 100); - assert_eq!(Assets::total_supply(0), 100); + assert_eq!(Assets::balance(0, 2), 101); + assert_eq!(Assets::total_supply(0), 101); }); } From d46df60cb2733449f19756449c4297fa91a2d4c3 Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Wed, 31 Mar 2021 16:30:07 -0400 Subject: [PATCH 5/7] remove TODO --- frame/assets/src/tests.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 3bdfc004b49d4..035c07d18390c 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -624,7 +624,6 @@ fn force_asset_status_should_work(){ ); //account drains to completion when funds dip below min_balance - assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 90, true, false)); assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 50)); assert_eq!(Assets::balance(0, 1), 0); assert_eq!(Assets::balance(0, 2), 101); From ae8e12b674832ff11fb1def983457d3e65bfc83f Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Wed, 31 Mar 2021 16:36:36 -0400 Subject: [PATCH 6/7] actually remove TODO --- frame/assets/src/tests.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 035c07d18390c..9340942e1d188 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -492,9 +492,6 @@ fn set_metadata_should_work() { }); } -// TODO: tests for force_set_metadata, force_clear_metadata, force_asset_status -// https://github.com/paritytech/substrate/issues/8470 - #[test] fn freezer_should_work() { new_test_ext().execute_with(|| { @@ -624,6 +621,7 @@ fn force_asset_status_should_work(){ ); //account drains to completion when funds dip below min_balance + assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 90, true, false)); assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 50)); assert_eq!(Assets::balance(0, 1), 0); assert_eq!(Assets::balance(0, 2), 101); From af352e93d0e774560e43969690ede84008ffc1d7 Mon Sep 17 00:00:00 2001 From: ferrell-code Date: Wed, 31 Mar 2021 21:45:03 -0400 Subject: [PATCH 7/7] add force asset status tests --- frame/assets/src/tests.rs | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/frame/assets/src/tests.rs b/frame/assets/src/tests.rs index 9340942e1d188..f4976af023627 100644 --- a/frame/assets/src/tests.rs +++ b/frame/assets/src/tests.rs @@ -598,22 +598,26 @@ fn force_metadata_should_work() { fn force_asset_status_should_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 10); + Balances::make_free_balance_be(&2, 10); assert_ok!(Assets::create(Origin::signed(1), 0, 1, 30)); - assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 100)); + assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 50)); + assert_ok!(Assets::mint(Origin::signed(1), 0, 2, 150)); //force asset status to change min_balance > balance - assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 101, true, false)); - assert_eq!(Assets::balance(0, 1), 100); - //asset in practice becomes frozen until balance >= min_balance - assert_noop!( - Assets::transfer(Origin::signed(1), 0, 2, 50), - DispatchError::Token(TokenError::BelowMinimum) - ); + assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 100, true, false)); + assert_eq!(Assets::balance(0, 1), 50); + + //account can recieve assets for balance < min_balance + assert_ok!(Assets::transfer(Origin::signed(2), 0, 1, 1)); + assert_eq!(Assets::balance(0, 1), 51); + + //account on outbound transfer will cleanup for balance < min_balance + assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 1)); + assert_eq!(Assets::balance(0,1), 0); + + //won't create new account with balance below min_balance + assert_noop!(Assets::transfer(Origin::signed(2), 0, 3, 50), TokenError::BelowMinimum); - //give account asset so balance == min_balance - assert_ok!(Assets::mint(Origin::signed(1), 0, 1, 1)); - assert_eq!(Assets::balance(0, 1), 101); - //force asset status will not execute for non-existent class assert_noop!( Assets::force_asset_status(Origin::root(), 1, 1, 1, 1, 1, 90, true, false), @@ -621,10 +625,10 @@ fn force_asset_status_should_work(){ ); //account drains to completion when funds dip below min_balance - assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 90, true, false)); - assert_ok!(Assets::transfer(Origin::signed(1), 0, 2, 50)); - assert_eq!(Assets::balance(0, 1), 0); - assert_eq!(Assets::balance(0, 2), 101); - assert_eq!(Assets::total_supply(0), 101); + assert_ok!(Assets::force_asset_status(Origin::root(), 0, 1, 1, 1, 1, 110, true, false)); + assert_ok!(Assets::transfer(Origin::signed(2), 0, 1, 110)); + assert_eq!(Assets::balance(0, 1), 200); + assert_eq!(Assets::balance(0, 2), 0); + assert_eq!(Assets::total_supply(0), 200); }); }