diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs index 224923d02e304b12ea1055775128954ff6812663..826c096a36e4d5aa63e182561cf645c086147970 100644 --- a/pallets/smith-members/src/tests.rs +++ b/pallets/smith-members/src/tests.rs @@ -556,6 +556,73 @@ fn certifying_on_different_status() { }); } +#[test] +fn certifying_an_online_smith() { + new_test_ext(GenesisConfig { + initial_smiths: btreemap![ + 1 => (false, vec![2, 3, 4]), + 2 => (false, vec![3, 4]), + 3 => (false, vec![1, 2]), + 4 => (false, vec![]), + ], + }) + .execute_with(|| { + // Go online to be able to invite+certify + Pallet::<Runtime>::on_smith_goes_online(1); + Pallet::<Runtime>::on_smith_goes_online(2); + Pallet::<Runtime>::on_smith_goes_online(3); + assert_ok!(Pallet::<Runtime>::invite_smith(RuntimeOrigin::signed(1), 5)); + assert_ok!(Pallet::<Runtime>::accept_invitation(RuntimeOrigin::signed( + 5 + ))); + assert_ok!(Pallet::<Runtime>::certify_smith( + RuntimeOrigin::signed(1), + 5 + )); + assert_ok!(Pallet::<Runtime>::certify_smith( + RuntimeOrigin::signed(2), + 5 + )); + // Smith can expire + assert_eq!( + Smiths::<Runtime>::get(5), + Some(SmithMeta { + status: Smith, + expires_on: Some(5), + issued_certs: vec![], + received_certs: vec![1, 2] + }) + ); + Pallet::<Runtime>::on_smith_goes_online(5); + // After going online, the expiration disappears + assert_eq!( + Smiths::<Runtime>::get(5), + Some(SmithMeta { + status: Smith, + expires_on: None, + issued_certs: vec![], + received_certs: vec![1, 2] + }) + ); + + // We can receive certification without postponing the expiration (because we are online) + assert_ok!(Pallet::<Runtime>::certify_smith( + RuntimeOrigin::signed(3), + 5 + )); + // TODO: this test currently fails because expires_on is not None + assert_eq!( + Smiths::<Runtime>::get(5), + Some(SmithMeta { + status: Smith, + expires_on: None, + issued_certs: vec![], + received_certs: vec![1, 2, 3] + }) + ); + }); +} + #[test] fn invitation_on_non_wot_member() { new_test_ext(GenesisConfig {