|
|
|
@ -7,6 +7,7 @@ use solstice_proto::ServerRequest; |
|
|
|
|
|
|
|
use crate::context::Context;
|
|
|
|
use crate::control;
|
|
|
|
use crate::event::EventHandler;
|
|
|
|
use crate::room::RoomMessage;
|
|
|
|
|
|
|
|
/// An event affecting the chat room module.
|
|
|
|
@ -20,19 +21,7 @@ pub enum RoomEvent { |
|
|
|
MessageResponse(server::RoomMessageResponse),
|
|
|
|
}
|
|
|
|
|
|
|
|
/// An interface for room event handlers.
|
|
|
|
///
|
|
|
|
/// Allows mocking of handlers in tests.
|
|
|
|
pub trait HandleRoomEvent {
|
|
|
|
/// Handles the given `event` against the given global `context`.
|
|
|
|
fn handle(
|
|
|
|
&mut self,
|
|
|
|
context: &mut Context,
|
|
|
|
event: RoomEvent,
|
|
|
|
) -> anyhow::Result<()>;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// The real, default implementation of `HandleRoomEvent`.
|
|
|
|
/// The real, default room event handler.
|
|
|
|
#[derive(Default)]
|
|
|
|
pub struct RoomEventHandler;
|
|
|
|
|
|
|
|
@ -168,7 +157,9 @@ fn handle_message_response( |
|
|
|
.context("sending control response")
|
|
|
|
}
|
|
|
|
|
|
|
|
impl HandleRoomEvent for RoomEventHandler {
|
|
|
|
impl EventHandler for RoomEventHandler {
|
|
|
|
type Event = RoomEvent;
|
|
|
|
|
|
|
|
fn handle(
|
|
|
|
&mut self,
|
|
|
|
context: &mut Context,
|
|
|
|
@ -199,19 +190,22 @@ impl HandleRoomEvent for RoomEventHandler { |
|
|
|
#[cfg(test)]
|
|
|
|
pub mod testing {
|
|
|
|
use crate::context::Context;
|
|
|
|
use crate::event::EventHandler;
|
|
|
|
|
|
|
|
use super::{HandleRoomEvent, RoomEvent};
|
|
|
|
use super::RoomEvent;
|
|
|
|
|
|
|
|
#[derive(Default)]
|
|
|
|
pub struct FakeRoomEventHandler {
|
|
|
|
pub events: Vec<RoomEvent>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl HandleRoomEvent for FakeRoomEventHandler {
|
|
|
|
impl EventHandler for FakeRoomEventHandler {
|
|
|
|
type Event = RoomEvent;
|
|
|
|
|
|
|
|
fn handle(
|
|
|
|
&mut self,
|
|
|
|
_context: &mut Context,
|
|
|
|
event: RoomEvent,
|
|
|
|
event: Self::Event,
|
|
|
|
) -> anyhow::Result<()> {
|
|
|
|
self.events.push(event);
|
|
|
|
Ok(())
|
|
|
|
@ -229,9 +223,10 @@ mod tests { |
|
|
|
use crate::clock::SimulatedSystemClock;
|
|
|
|
use crate::context::{ContextBundle, ContextOptions};
|
|
|
|
use crate::control;
|
|
|
|
use crate::event::EventHandler;
|
|
|
|
use crate::room::{RoomMembership, RoomMessage, RoomState, RoomVisibility};
|
|
|
|
|
|
|
|
use super::{HandleRoomEvent, RoomEvent, RoomEventHandler};
|
|
|
|
use super::{RoomEvent, RoomEventHandler};
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn handle_join_request_failure() {
|
|
|
|
|