use super::message::Message;
use std::sync::{Arc, Mutex};
#[derive(Clone)]
pub struct MessagesContainer {
messages: Arc<Mutex<Vec<Message>>>,
}
impl MessagesContainer {
pub fn new(messages: Vec<Message>) -> Self {
Self {
messages: Arc::new(Mutex::new(messages)),
}
}
pub fn add(&self, message: Message) {
let mut messages = self.messages.lock().unwrap_or_else(|e| e.into_inner());
messages.push(message);
}
pub fn get_messages(&self) -> Vec<Message> {
let messages = self.messages.lock().unwrap_or_else(|e| e.into_inner());
messages.clone()
}
pub fn clear(&self) {
let mut messages = self.messages.lock().unwrap_or_else(|e| e.into_inner());
messages.clear();
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::messages::Level;
#[test]
fn test_messages_container_new() {
let messages = vec![Message::info("Test message")];
let container = MessagesContainer::new(messages);
let loaded_messages = container.get_messages();
assert_eq!(loaded_messages.len(), 1);
assert_eq!(loaded_messages[0].text, "Test message");
}
#[test]
fn test_messages_container_add() {
let container = MessagesContainer::new(vec![]);
container.add(Message::success("Success"));
container.add(Message::error("Error"));
let messages = container.get_messages();
assert_eq!(messages.len(), 2);
assert_eq!(messages[0].text, "Success");
assert_eq!(messages[1].text, "Error");
}
#[test]
fn test_messages_container_clear() {
let container = MessagesContainer::new(vec![Message::info("Test")]);
assert_eq!(container.get_messages().len(), 1);
container.clear();
assert_eq!(container.get_messages().len(), 0);
}
#[test]
fn test_messages_container_with_different_levels() {
let container = MessagesContainer::new(vec![]);
container.add(Message::debug("Debug message"));
container.add(Message::info("Info message"));
container.add(Message::success("Success message"));
container.add(Message::warning("Warning message"));
container.add(Message::error("Error message"));
let messages = container.get_messages();
assert_eq!(messages.len(), 5);
assert_eq!(messages[0].level, Level::Debug);
assert_eq!(messages[1].level, Level::Info);
assert_eq!(messages[2].level, Level::Success);
assert_eq!(messages[3].level, Level::Warning);
assert_eq!(messages[4].level, Level::Error);
}
}