Skip to main content

just_lists_core/
lib.rs

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}