diff --git a/client/src/room/map.rs b/client/src/room/map.rs index d4fd755..e59db4b 100644 --- a/client/src/room/map.rs +++ b/client/src/room/map.rs @@ -92,6 +92,24 @@ impl RoomEntry { self.state.operators = operators.drain(..).collect(); self.state.members = members.iter().map(|user| user.name.clone()).collect(); } + + /// Records that we are now trying to leave the given room. + /// If the room is not found, or if its membership status is not `Member`, + /// returns an error. + #[cfg(test)] + pub fn start_leaving(&mut self) -> Result<(), RoomMembershipChangeError> { + match self.state.membership { + RoomMembership::Member => { + self.state.membership = RoomMembership::Leaving; + Ok(()) + } + + membership => Err(RoomMembershipChangeError( + membership, + RoomMembership::Leaving, + )), + } + } } /// Contains the mapping from room names to room data and provides a clean @@ -212,25 +230,6 @@ impl RoomMap { rooms } - #[allow(dead_code)] - /// Records that we are now trying to leave the given room. - /// If the room is not found, or if its membership status is not `Member`, - /// returns an error. - pub fn start_leaving(&mut self, room_name: &str) -> Result<(), RoomError> { - let room = self.get_mut_strict(room_name)?; - - match room.state.membership { - RoomMembership::Member => { - room.state.membership = RoomMembership::Leaving; - Ok(()) - } - - membership => Err(RoomError::MembershipChangeInvalid( - RoomMembershipChangeError(membership, RoomMembership::Leaving), - )), - } - } - /// Records that we have now left the given room. pub fn leave(&mut self, room_name: &str) -> Result<(), RoomError> { let room = self.get_mut_strict(room_name)?; @@ -299,17 +298,16 @@ mod tests { #[test] fn entry_start_joining_error() { - let mut room = RoomEntry::new( - "bleep".to_string(), - RoomState { - membership: RoomMembership::Member, - ..RoomState::default() - }, - ); + let initial_state = RoomState { + membership: RoomMembership::Member, + ..RoomState::default() + }; + + let mut room = RoomEntry::new("bleep".to_string(), initial_state.clone()); room.start_joining().unwrap_err(); - assert_eq!(room.clone_state().membership, RoomMembership::Member); + assert_eq!(room.into_state(), initial_state); } #[test] @@ -318,7 +316,13 @@ mod tests { room.start_joining().unwrap(); - assert_eq!(room.clone_state().membership, RoomMembership::Joining); + assert_eq!( + room.into_state(), + RoomState { + membership: RoomMembership::Joining, + ..RoomState::default() + } + ); } #[test] @@ -356,6 +360,35 @@ mod tests { ); } + #[test] + fn entry_start_leaving_error() { + let mut room = RoomEntry::new("bleep".to_string(), RoomState::default()); + + room.start_leaving().unwrap_err(); + + assert_eq!(room.into_state(), RoomState::default()); + } + + #[test] + fn entry_start_leaving_success() { + let initial_state = RoomState { + membership: RoomMembership::Member, + ..RoomState::default() + }; + + let mut room = RoomEntry::new("bleep".to_string(), initial_state.clone()); + + room.start_leaving().unwrap(); + + assert_eq!( + room.into_state(), + RoomState { + membership: RoomMembership::Leaving, + ..initial_state + } + ); + } + #[test] fn map_new_is_empty() { assert_eq!(RoomMap::new().get_room_list(), vec![]);