Author: Manos Pitsidianakis [manos@pitsidianak.is]
Hash: 0bb08a1b0891eed4d7c2ca7f95bb12071c74e14b
Timestamp: Tue, 25 Apr 2023 09:45:27 +0000 (1 year ago)

+89 -15 +/-2 browse
core/db/queue.rs: add delete_from_queue() test
1diff --git a/core/src/db/policies.rs b/core/src/db/policies.rs
2index 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
61index 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+ }