Browse Source

Move start_leaving() from RoomMap to RoomEntry.

main
Titouan Rigoudy 2 years ago
parent
commit
8f05c12430
1 changed files with 61 additions and 28 deletions
  1. +61
    -28
      client/src/room/map.rs

+ 61
- 28
client/src/room/map.rs View File

@ -92,6 +92,24 @@ impl RoomEntry {
self.state.operators = operators.drain(..).collect(); self.state.operators = operators.drain(..).collect();
self.state.members = members.iter().map(|user| user.name.clone()).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 /// Contains the mapping from room names to room data and provides a clean
@ -212,25 +230,6 @@ impl RoomMap {
rooms 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. /// Records that we have now left the given room.
pub fn leave(&mut self, room_name: &str) -> Result<(), RoomError> { pub fn leave(&mut self, room_name: &str) -> Result<(), RoomError> {
let room = self.get_mut_strict(room_name)?; let room = self.get_mut_strict(room_name)?;
@ -299,17 +298,16 @@ mod tests {
#[test] #[test]
fn entry_start_joining_error() { 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(); room.start_joining().unwrap_err();
assert_eq!(room.clone_state().membership, RoomMembership::Member);
assert_eq!(room.into_state(), initial_state);
} }
#[test] #[test]
@ -318,7 +316,13 @@ mod tests {
room.start_joining().unwrap(); room.start_joining().unwrap();
assert_eq!(room.clone_state().membership, RoomMembership::Joining);
assert_eq!(
room.into_state(),
RoomState {
membership: RoomMembership::Joining,
..RoomState::default()
}
);
} }
#[test] #[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] #[test]
fn map_new_is_empty() { fn map_new_is_empty() {
assert_eq!(RoomMap::new().get_room_list(), vec![]); assert_eq!(RoomMap::new().get_room_list(), vec![]);


Loading…
Cancel
Save