Author: Manos Pitsidianakis [manos@pitsidianak.is]
Hash: a2b8a65c33a81a985191b782b2919676c634a5f4
Timestamp: Sat, 29 Apr 2023 10:49:28 +0000 (1 year ago)

+96 -41 +/-2 browse
core: add more template replies tests
1diff --git a/core/src/db/templates.rs b/core/src/db/templates.rs
2index e0b4863..acfb955 100644
3--- a/core/src/db/templates.rs
4+++ b/core/src/db/templates.rs
5 @@ -24,7 +24,9 @@ use super::*;
6 impl Connection {
7 /// Fetch all.
8 pub fn fetch_templates(&self) -> Result<Vec<DbVal<Template>>> {
9- let mut stmt = self.connection.prepare("SELECT * FROM templates;")?;
10+ let mut stmt = self
11+ .connection
12+ .prepare("SELECT * FROM templates ORDER BY pk;")?;
13 let iter = stmt.query_map(rusqlite::params![], |row| {
14 let pk = row.get("pk")?;
15 Ok(DbVal(
16 diff --git a/core/tests/template_replies.rs b/core/tests/template_replies.rs
17index f68eff6..fb890cf 100644
18--- a/core/tests/template_replies.rs
19+++ b/core/tests/template_replies.rs
20 @@ -25,6 +25,29 @@ use tempfile::TempDir;
21 fn test_template_replies() {
22 init_stderr_logging();
23
24+ const SUB_BYTES: &[u8] = b"From: Name <user@example.com>
25+ To: <foo-chat+subscribe@example.com>
26+ Subject: subscribe
27+ Date: Thu, 29 Oct 2020 13:58:16 +0000
28+ Message-ID: <abcdefgh@sator.example.com>
29+ Content-Language: en-US
30+ Content-Type: text/html
31+ Content-Transfer-Encoding: base64
32+ MIME-Version: 1.0
33+
34+ ";
35+ const UNSUB_BYTES: &[u8] = b"From: Name <user@example.com>
36+ To: <foo-chat+request@example.com>
37+ Subject: unsubscribe
38+ Date: Thu, 29 Oct 2020 13:58:17 +0000
39+ Message-ID: <abcdefgh@sator.example.com>
40+ Content-Language: en-US
41+ Content-Type: text/html
42+ Content-Transfer-Encoding: base64
43+ MIME-Version: 1.0
44+
45+ ";
46+
47 let tmp_dir = TempDir::new().unwrap();
48
49 let db_path = tmp_dir.path().join("mpot.db");
50 @@ -68,42 +91,59 @@ fn test_template_replies() {
51 assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
52 assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 0);
53
54+ let _templ_gen = db
55+ .add_template(Template {
56+ pk: -1,
57+ name: Template::SUBSCRIPTION_CONFIRMATION.into(),
58+ list: None,
59+ subject: Some("You have subscribed to a list".into()),
60+ headers_json: None,
61+ body: "You have subscribed to a list".into(),
62+ })
63+ .unwrap();
64 /* create custom subscribe confirm template, and check that it is used in
65 * action */
66 let _templ = db
67 .add_template(Template {
68- pk: 0,
69+ pk: -1,
70 name: Template::SUBSCRIPTION_CONFIRMATION.into(),
71- list: None,
72+ list: Some(foo_chat.pk()),
73 subject: Some("You have subscribed to {{ list.name }}".into()),
74 headers_json: None,
75 body: "You have subscribed to {{ list.name }}".into(),
76 })
77 .unwrap();
78+ let _all = db.fetch_templates().unwrap();
79+ assert_eq!(&_all[0], &_templ_gen);
80+ assert_eq!(&_all[1], &_templ);
81+ assert_eq!(_all.len(), 2);
82+
83+ let sub_fn = |db: &mut Connection| {
84+ let subenvelope =
85+ melib::Envelope::from_bytes(SUB_BYTES, None).expect("Could not parse message");
86+ db.post(&subenvelope, SUB_BYTES, /* dry_run */ false)
87+ .unwrap();
88+ assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 1);
89+ assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
90+ };
91+ let unsub_fn = |db: &mut Connection| {
92+ let envelope =
93+ melib::Envelope::from_bytes(UNSUB_BYTES, None).expect("Could not parse message");
94+ db.post(&envelope, UNSUB_BYTES, /* dry_run */ false)
95+ .unwrap();
96+ assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 0);
97+ assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
98+ };
99
100 /* subscribe first */
101
102- let bytes = b"From: Name <user@example.com>
103- To: <foo-chat+subscribe@example.com>
104- Subject: subscribe
105- Date: Thu, 29 Oct 2020 13:58:16 +0000
106- Message-ID: <abcdefgh@sator.example.com>
107- Content-Language: en-US
108- Content-Type: text/html
109- Content-Transfer-Encoding: base64
110- MIME-Version: 1.0
111-
112- ";
113- let subenvelope = melib::Envelope::from_bytes(bytes, None).expect("Could not parse message");
114- db.post(&subenvelope, bytes, /* dry_run */ false).unwrap();
115- assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 1);
116- assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
117+ sub_fn(&mut db);
118
119 let out_queue = db.queue(Queue::Out).unwrap();
120 assert_eq!(out_queue.len(), 1);
121 let out = &out_queue[0];
122 let out_env = melib::Envelope::from_bytes(&out.message, None).unwrap();
123- // eprintln!("{}", String::from_utf8_lossy(&out_bytes));
124+
125 assert_eq!(
126 &out_env.from()[0].get_email(),
127 "foo-chat+request@example.com",
128 @@ -122,45 +162,58 @@ MIME-Version: 1.0
129
130 /* then unsubscribe, remove custom template and subscribe again */
131
132- let unbytes = b"From: Name <user@example.com>
133- To: <foo-chat+request@example.com>
134- Subject: unsubscribe
135- Date: Thu, 29 Oct 2020 13:58:17 +0000
136- Message-ID: <abcdefgh@sator.example.com>
137- Content-Language: en-US
138- Content-Type: text/html
139- Content-Transfer-Encoding: base64
140- MIME-Version: 1.0
141-
142- ";
143- let envelope = melib::Envelope::from_bytes(unbytes, None).expect("Could not parse message");
144- db.post(&envelope, unbytes, /* dry_run */ false).unwrap();
145- assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 0);
146- assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
147+ unsub_fn(&mut db);
148
149 let out_queue = db.queue(Queue::Out).unwrap();
150 assert_eq!(out_queue.len(), 2);
151
152 let mut _templ = _templ.into_inner();
153 let _templ2 = db
154- .remove_template(Template::SUBSCRIPTION_CONFIRMATION, None)
155+ .remove_template(Template::SUBSCRIPTION_CONFIRMATION, Some(foo_chat.pk()))
156 .unwrap();
157 _templ.pk = _templ2.pk;
158 assert_eq!(_templ, _templ2);
159
160- /* now this template should be used: */
161- // let default_templ = Template::default_subscription_confirmation();
162+ /* now the first inserted template should be used: */
163
164- db.post(&subenvelope, bytes, /* dry_run */ false).unwrap();
165- assert_eq!(db.list_subscriptions(foo_chat.pk()).unwrap().len(), 1);
166- assert_eq!(db.queue(Queue::Error).unwrap().len(), 0);
167+ sub_fn(&mut db);
168
169 let out_queue = db.queue(Queue::Out).unwrap();
170
171 assert_eq!(out_queue.len(), 3);
172 let out = &out_queue[2];
173 let out_env = melib::Envelope::from_bytes(&out.message, None).unwrap();
174- // eprintln!("{}", String::from_utf8_lossy(&out_bytes));
175+
176+ assert_eq!(
177+ &out_env.from()[0].get_email(),
178+ "foo-chat+request@example.com",
179+ );
180+ assert_eq!(
181+ (
182+ out_env.to()[0].get_display_name().as_deref(),
183+ out_env.to()[0].get_email().as_str()
184+ ),
185+ (Some("Name"), "user@example.com"),
186+ );
187+ assert_eq!(&out.subject, "You have subscribed to a list");
188+
189+ unsub_fn(&mut db);
190+ let mut _templ_gen_2 = db
191+ .remove_template(Template::SUBSCRIPTION_CONFIRMATION, None)
192+ .unwrap();
193+ _templ_gen_2.pk = _templ_gen.pk;
194+ assert_eq!(_templ_gen_2, _templ_gen.into_inner());
195+
196+ /* now this template should be used: */
197+
198+ sub_fn(&mut db);
199+
200+ let out_queue = db.queue(Queue::Out).unwrap();
201+
202+ assert_eq!(out_queue.len(), 5);
203+ let out = &out_queue[4];
204+ let out_env = melib::Envelope::from_bytes(&out.message, None).unwrap();
205+
206 assert_eq!(
207 &out_env.from()[0].get_email(),
208 "foo-chat+request@example.com",