+89 -15 +/-2 browse
1 | diff --git a/core/src/db/policies.rs b/core/src/db/policies.rs |
2 | index ad9db4d..27326ed 100644 |
3 | --- a/core/src/db/policies.rs |
4 | +++ b/core/src/db/policies.rs |
5 | @@ -239,7 +239,7 @@ mod subscription_policy { |
6 | Ok(ret) |
7 | } |
8 | |
9 | - /// Remove an existing list policy. |
10 | + /// Remove an existing subscription policy. |
11 | /// |
12 | /// ``` |
13 | /// # use mailpot::{models::*, Configuration, Connection, SendMail}; |
14 | @@ -256,7 +256,7 @@ mod subscription_policy { |
15 | /// |
16 | /// # fn do_test(config: Configuration) { |
17 | /// let db = Connection::open_or_create_db(config).unwrap().trusted(); |
18 | - /// let list_pk = db |
19 | + /// let list = db |
20 | /// .create_list(MailingList { |
21 | /// pk: 0, |
22 | /// name: "foobar chat".into(), |
23 | @@ -265,19 +265,23 @@ mod subscription_policy { |
24 | /// description: None, |
25 | /// archive_url: None, |
26 | /// }) |
27 | - /// .unwrap() |
28 | - /// .pk; |
29 | - /// db.set_list_post_policy(PostPolicy { |
30 | - /// pk: 0, |
31 | - /// list: list_pk, |
32 | - /// announce_only: false, |
33 | - /// subscription_only: true, |
34 | - /// approval_needed: false, |
35 | - /// open: false, |
36 | - /// custom: false, |
37 | - /// }) |
38 | - /// .unwrap(); |
39 | - /// db.remove_list_post_policy(1, 1).unwrap(); |
40 | + /// .unwrap(); |
41 | + /// # assert!(db.list_subscription_policy(list.pk()).unwrap().is_none()); |
42 | + /// let pol = db |
43 | + /// .set_list_subscription_policy(SubscriptionPolicy { |
44 | + /// pk: -1, |
45 | + /// list: list.pk(), |
46 | + /// send_confirmation: false, |
47 | + /// open: true, |
48 | + /// manual: false, |
49 | + /// request: false, |
50 | + /// custom: false, |
51 | + /// }) |
52 | + /// .unwrap(); |
53 | + /// # assert_eq!(db.list_subscription_policy(list.pk()).unwrap().as_ref(), Some(&pol)); |
54 | + /// db.remove_list_subscription_policy(list.pk(), pol.pk()) |
55 | + /// .unwrap(); |
56 | + /// # assert!(db.list_subscription_policy(list.pk()).unwrap().is_none()); |
57 | /// # } |
58 | /// # do_test(config); |
59 | /// ``` |
60 | diff --git a/core/src/db/queue.rs b/core/src/db/queue.rs |
61 | index 20574b5..392bf45 100644 |
62 | --- a/core/src/db/queue.rs |
63 | +++ b/core/src/db/queue.rs |
64 | @@ -258,3 +258,73 @@ impl Connection { |
65 | Ok(ret) |
66 | } |
67 | } |
68 | + |
69 | + #[cfg(test)] |
70 | + mod tests { |
71 | + use super::*; |
72 | + |
73 | + #[test] |
74 | + fn test_queue_delete_array() { |
75 | + use tempfile::TempDir; |
76 | + |
77 | + let tmp_dir = TempDir::new().unwrap(); |
78 | + let db_path = tmp_dir.path().join("mpot.db"); |
79 | + let config = Configuration { |
80 | + send_mail: SendMail::ShellCommand("/usr/bin/false".to_string()), |
81 | + db_path, |
82 | + data_path: tmp_dir.path().to_path_buf(), |
83 | + administrators: vec![], |
84 | + }; |
85 | + |
86 | + let mut db = Connection::open_or_create_db(config).unwrap().trusted(); |
87 | + for i in 0..5 { |
88 | + db.insert_to_queue( |
89 | + QueueEntry::new( |
90 | + Queue::Hold, |
91 | + None, |
92 | + None, |
93 | + format!("Subject: testing\r\nMessage-Id: {i}@localhost\r\n\r\nHello\r\n") |
94 | + .as_bytes(), |
95 | + None, |
96 | + ) |
97 | + .unwrap(), |
98 | + ) |
99 | + .unwrap(); |
100 | + } |
101 | + let entries = db.queue(Queue::Hold).unwrap(); |
102 | + assert_eq!(entries.len(), 5); |
103 | + let out_entries = db.delete_from_queue(Queue::Out, vec![]).unwrap(); |
104 | + assert_eq!(db.queue(Queue::Hold).unwrap().len(), 5); |
105 | + assert!(out_entries.is_empty()); |
106 | + let deleted_entries = db.delete_from_queue(Queue::Hold, vec![]).unwrap(); |
107 | + assert_eq!(deleted_entries.len(), 5); |
108 | + assert_eq!( |
109 | + &entries |
110 | + .iter() |
111 | + .cloned() |
112 | + .map(DbVal::into_inner) |
113 | + .map(|mut e| { |
114 | + e.pk = -1; |
115 | + e |
116 | + }) |
117 | + .collect::<Vec<_>>(), |
118 | + &deleted_entries |
119 | + ); |
120 | + |
121 | + for e in deleted_entries { |
122 | + db.insert_to_queue(e).unwrap(); |
123 | + } |
124 | + |
125 | + let index = db |
126 | + .queue(Queue::Hold) |
127 | + .unwrap() |
128 | + .into_iter() |
129 | + .skip(2) |
130 | + .map(|e| e.pk()) |
131 | + .take(2) |
132 | + .collect::<Vec<i64>>(); |
133 | + let deleted_entries = db.delete_from_queue(Queue::Hold, index).unwrap(); |
134 | + assert_eq!(deleted_entries.len(), 2); |
135 | + assert_eq!(db.queue(Queue::Hold).unwrap().len(), 3); |
136 | + } |
137 | + } |