+96 -41 +/-2 browse
1 | diff --git a/core/src/db/templates.rs b/core/src/db/templates.rs |
2 | index 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 |
17 | index 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", |