@@ -211,3 +211,43 @@ fn issue_193_paginate_with_remove_readd_beneficiary() {
211211 assert_eq ! ( ids_in_pages. len( ) , page1. len( ) , "Should retrieve all beneficiary wills without gaps" ) ;
212212 }
213213}
214+
215+ /// Regression test for stale guardian votes after a guardian is removed and re-added.
216+ #[ test]
217+ fn stale_guardian_vote_cleared_when_guardian_removed ( ) {
218+ let ( env, client, owner, _token, token_address) = setup ( ) ;
219+ let guardian = Address :: generate ( & env) ;
220+ let replacement_guardian = Address :: generate ( & env) ;
221+ let beneficiary = Address :: generate ( & env) ;
222+
223+ let beneficiaries: SorobanVec < Beneficiary > = vec ! [
224+ & env,
225+ Beneficiary {
226+ address: beneficiary. clone( ) ,
227+ allocation: Allocation :: Percentage ( 10_000 ) ,
228+ } ,
229+ ] ;
230+ let tokens: SorobanVec < ( Address , i128 ) > = vec ! [ & env, ( token_address, 100_000_i128 ) ] ;
231+ let will_id = client. create_will (
232+ & owner,
233+ & tokens,
234+ & beneficiaries,
235+ & 90 ,
236+ & 7 ,
237+ & vec ! [ & env, guardian. clone( ) ] ,
238+ & 1 ,
239+ & None ,
240+ & 0 ,
241+ ) ;
242+
243+ client. submit_guardian_vote ( & will_id, & guardian) ;
244+ assert ! ( client. has_guardian_voted( & will_id, & guardian) ) ;
245+
246+ client. update_guardians ( & will_id, & owner, & vec ! [ & env, replacement_guardian. clone( ) ] ) ;
247+ client. update_guardians ( & will_id, & owner, & vec ! [ & env, guardian. clone( ) ] ) ;
248+
249+ assert ! (
250+ !client. has_guardian_voted( & will_id, & guardian) ,
251+ "re-added guardian should not retain a vote from before removal"
252+ ) ;
253+ }
0 commit comments