1pub mod list;
2pub mod list_item;
3
4use crate::list::List;
5use crate::list_item::ListItem;
6
7pub fn get_sample_list() -> List {
8 let mut list = List::new();
9
10 let top_item_1 = ListItem::new("First item".to_string());
11 let top_item_2 = ListItem::new("Second item".to_string());
12
13 let parent_1_id = top_item_1.id.clone();
14 let parent_2_id = top_item_2.id.clone();
15
16 list.add_list_item(top_item_1, None);
17 list.add_list_item(top_item_2, None);
18
19 let _ = list.add_child_list_item(
20 ListItem::new("First child item".to_string()),
21 &parent_1_id,
22 None,
23 );
24 let _ = list.add_child_list_item(
25 ListItem::new("Second child item".to_string()),
26 &parent_2_id,
27 None,
28 );
29
30 list
31}
32
33#[cfg(test)]
34mod tests {
35 use core::panic;
36
37 use crate::list::List;
38 use crate::list_item::ListItem;
39
40 #[test]
41 fn can_get_new_list() {
42 let _ = List::new();
43 }
44
45 #[test]
46 fn can_add_item_to_list() {
47 let mut list = List::new();
48 list.add_list_item(ListItem::new("First list item".to_string()), None);
49
50 let mut list_length = list.get_top_level_list_items().len();
51 assert!(
52 list_length == 1,
53 "List item length was not 1. Actual: {list_length}"
54 );
55
56 list.add_list_item(ListItem::new("Second item".to_string()), None);
57
58 list_length = list.get_top_level_list_items().len();
59 assert!(
60 list_length == 2,
61 "List item length was not 2. Actual: {list_length}"
62 );
63 }
64
65 #[test]
66 fn can_serialize_and_deserialize() {
67 let list = super::get_sample_list();
68
69 let serialized = list.into_string();
70 let deserialized: List = List::from_string(serialized);
71
72 println!("{:?}", deserialized);
73 }
74
75 #[test]
76 fn can_remove_list_items() {
77 let mut list = super::get_sample_list();
78
79 let top_level_items = list.get_top_level_list_items();
80
81 let item_1_id = top_level_items.first().unwrap().id.clone();
82 let item_2_id = top_level_items.last().unwrap().id.clone();
83
84 match list.remove_list_item(&item_1_id) {
85 Ok(_value) => (),
86 Err(error) => panic!(
87 "Expected to successfully remove top level item. Actual:{:?}",
88 error
89 ),
90 };
91
92 let first_child_of_2_id = list
93 .get_list_item(
94 list.get_list_item(&item_2_id)
95 .unwrap()
96 .children
97 .first()
98 .unwrap(),
99 )
100 .unwrap()
101 .id
102 .clone();
103
104 match list.remove_list_item(&first_child_of_2_id) {
105 Ok(_value) => (),
106 Err(error) => panic!(
107 "Expected to successfully remove child level item. Actual:{:?}",
108 error
109 ),
110 }
111 }
112}