diff --git a/contracts/sorosave/src/group.rs b/contracts/sorosave/src/group.rs index 5033347..999d859 100644 --- a/contracts/sorosave/src/group.rs +++ b/contracts/sorosave/src/group.rs @@ -74,11 +74,14 @@ pub fn join_group(env: &Env, member: Address, group_id: u64) -> Result<(), Contr } group.members.push_back(member.clone()); + let member_count = group.members.len(); storage::set_group(env, &group); storage::add_member_group(env, &member, group_id); - env.events() - .publish((crate::symbol_short!("grp_join"),), (group_id, member)); + env.events().publish( + (crate::symbol_short!("mem_join"),), + (group_id, member, env.ledger().timestamp(), member_count), + ); Ok(()) } @@ -112,11 +115,14 @@ pub fn leave_group(env: &Env, member: Address, group_id: u64) -> Result<(), Cont } group.members = new_members; + let member_count = group.members.len(); storage::set_group(env, &group); storage::remove_member_group(env, &member, group_id); - env.events() - .publish((crate::symbol_short!("grp_leav"),), (group_id, member)); + env.events().publish( + (crate::symbol_short!("mem_leav"),), + (group_id, member, env.ledger().timestamp(), member_count), + ); Ok(()) } diff --git a/contracts/sorosave/src/test.rs b/contracts/sorosave/src/test.rs index f1ac1ef..b6c52aa 100644 --- a/contracts/sorosave/src/test.rs +++ b/contracts/sorosave/src/test.rs @@ -222,3 +222,23 @@ fn test_set_group_admin() { let group = client.get_group(&group_id); assert_eq!(group.admin, new_admin); } + +#[test] +fn test_member_join_leave_events() { + let (env, admin, client, token) = setup_env(); + let group_id = create_test_group(&env, &client, &admin, &token); + + let member1 = Address::generate(&env); + + // Join event should include group_id, member, timestamp, and member_count + client.join_group(&member1, &group_id); + + let group = client.get_group(&group_id); + assert_eq!(group.members.len(), 2); // admin + member1 + + // Leave event should include group_id, member, timestamp, and updated member_count + client.leave_group(&member1, &group_id); + + let group = client.get_group(&group_id); + assert_eq!(group.members.len(), 1); // only admin remains +}