1#[cfg(test)]
15mod tests {
16 use super::*;
17
18 #[test]
19 fn should_create_an_event_works_test() {
20 let t = SystemTime::now();
21 let e = Event::new("Product_Added".to_string(), t);
22 assert_eq!(e.to_str(), format!("Product_Added [{:?}]", t));
23 }
24
25 #[test]
26 fn should_create_an_eventqueue_works_test() {
27 let mut event_queue = EventQueue::new();
28 assert_eq!(event_queue.count(), 0);
29
30 let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
31 event_queue.enqueue(event_1);
32 let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
33 event_queue.enqueue(event_2);
34 let event_3 = Event::new("Product_Added".to_string(), SystemTime::now());
35 event_queue.enqueue(event_3);
36 assert_eq!(event_queue.count(), 3);
37 }
38
39 #[test]
40 fn should_dequeue_fn_works_test() {
41 let mut event_queue = EventQueue::new();
42 let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
43 event_queue.enqueue(event_1);
44 let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
45 event_queue.enqueue(event_2);
46 let some_event = event_queue.dequeue();
47 assert_eq!(some_event.name, "Product_Created");
48 assert_eq!(event_queue.count(), 1);
49 let other_event = event_queue.dequeue();
50 assert_eq!(other_event.name, "Basket_Refreshed");
51 assert_eq!(event_queue.count(), 0);
52 }
53
54 #[test]
55 fn should_peek_fn_works_test() {
56 let mut event_queue = EventQueue::new();
57 let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
58 event_queue.enqueue(event_1);
59 let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
60 event_queue.enqueue(event_2);
61 let e = event_queue.peek();
62 assert_eq!(e.unwrap().name, "Product_Created");
63 event_queue.dequeue();
64 event_queue.dequeue();
65 assert_eq!(event_queue.peek(), None);
66 }
67
68 #[test]
69 #[should_panic]
70 fn should_dequeue_fn_panic_test() {
71 let mut event_queue = EventQueue::new();
72 let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
73 event_queue.enqueue(event_1);
74 event_queue.dequeue();
75 event_queue.dequeue();
76 }
77}
78
79use std::time::SystemTime;
80
81#[derive(Debug, PartialEq)]
88pub struct Event {
89 pub name: String,
90 pub time: SystemTime,
91}
92
93impl Event {
95 pub fn new(n: String, t: SystemTime) -> Self {
97 Event { name: n, time: t }
98 }
99
100 pub fn to_str(&self) -> String {
102 format!("{} [{:?}]", self.name, self.time)
103 }
104}
105
106pub struct EventQueue {
111 pub events: Vec<Event>,
112}
113
114impl EventQueue {
115 pub fn new() -> Self {
117 EventQueue { events: Vec::new() }
118 }
119
120 pub fn enqueue(&mut self, e: Event) {
122 self.events.push(e)
123 }
124
125 pub fn dequeue(&mut self) -> Event {
127 self.events.remove(0)
128 }
129
130 pub fn count(&self) -> usize {
132 self.events.len()
133 }
134
135 pub fn peek(&self) -> Option<&Event> {
137 let e = self.events.first();
138 match e {
139 Some(_) => e,
140 _ => None,
141 }
142 }
143}