summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Korber <philippkorber@gmail.com>2018-05-11 16:52:41 +0200
committerPhilipp Korber <philippkorber@gmail.com>2018-05-11 16:52:41 +0200
commit4dbfd98e2378f3b3939dfe7f45ea1676adec8da8 (patch)
tree6a32ba927a712b31f7a19bc2da5c439c0d5c89fc
parent180df621fdeb4496851c4088c3c3a57ac6cb8e3e (diff)
test(request): implemented tests
-rw-r--r--src/request.rs118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/request.rs b/src/request.rs
index bcfede4..7c10b96 100644
--- a/src/request.rs
+++ b/src/request.rs
@@ -100,4 +100,122 @@ pub fn derive_envelop_data_from_mail(mail: &Mail)
from: Some(smtp_from),
to: smtp_to
})
+}
+
+#[cfg(test)]
+mod test {
+
+ mod derive_envelop_data_from_mail {
+ use super::super::derive_envelop_data_from_mail;
+ use mail::{Builder, Resource};
+ use headers::{_From, _To, Sender};
+ use headers::components::MediaType;
+ use mail::file_buffer::FileBuffer;
+
+ fn mock_resource() -> Resource {
+ let mt = MediaType::parse("text/plain; charset=utf-8").unwrap();
+ let fb = FileBuffer::new(mt, "abcd↓efg".to_owned().into());
+ Resource::sourceless_from_buffer(fb)
+ }
+
+ #[test]
+ fn use_sender_if_given() {
+ let mut builder = Builder::singlepart(mock_resource());
+ builder.header(Sender, "strange@caffe.test").unwrap();
+ builder.header(_From, ["ape@caffe.test", "epa@caffe.test"]).unwrap();
+ builder.header(_To, ["das@ding.test"]).unwrap();
+
+ let mail = builder.build().unwrap();
+
+ let envelop_data = derive_envelop_data_from_mail(&mail).unwrap();
+
+ assert_eq!(
+ envelop_data.from.as_ref().unwrap().as_str(),
+ "strange@caffe.test"
+ );
+ }
+
+ #[test]
+ fn use_from_if_no_sender_given() {
+ let mut builder = Builder::singlepart(mock_resource());
+ builder.header(_From, ["ape@caffe.test"]).unwrap();
+ builder.header(_To, ["das@ding.test"]).unwrap();
+
+ let mail = builder.build().unwrap();
+
+ let envelop_data = derive_envelop_data_from_mail(&mail).unwrap();
+
+ assert_eq!(
+ envelop_data.from.as_ref().unwrap().as_str(),
+ "ape@caffe.test"
+ );
+ }
+
+ #[test]
+ fn fail_if_no_sender_but_multi_mailbox_from() {
+ let mut builder = Builder::singlepart(mock_resource());
+ builder.header(_From, ["ape@caffe.test", "a@b.test"]).unwrap();
+ builder.header(_To, ["das@ding.test"]).unwrap();
+
+ let mail = builder.build().unwrap();
+
+ let envelop_data = derive_envelop_data_from_mail(&mail);
+
+ //assert is_err
+ envelop_data.unwrap_err();
+ }
+
+ #[test]
+ fn use_to() {
+ let mut builder = Builder::singlepart(mock_resource());
+ builder.header(_From, ["ape@caffe.test"]).unwrap();
+ builder.header(_To, ["das@ding.test"]).unwrap();
+
+ let mail = builder.build().unwrap();
+
+ let envelop_data = derive_envelop_data_from_mail(&mail).unwrap();
+
+ assert_eq!(
+ envelop_data.to.first().as_str(),
+ "das@ding.test"
+ );
+ }
+ }
+
+ mod mailaddress_from_mailbox {
+ use super::super::mailaddress_from_mailbox;
+ use headers::components::{Mailbox, Email};
+
+ #[test]
+ fn correctly_converts_mailbox() {
+ let mb = Mailbox::from(Email::new("tast@tost.test").unwrap());
+ let address = mailaddress_from_mailbox(&mb).unwrap();
+ assert_eq!(address.as_str(), "tast@tost.test");
+ assert_eq!(address.needs_smtputf8(), false);
+ }
+
+ #[test]
+ fn tracks_if_smtputf8_is_needed() {
+ let mb = Mailbox::from(Email::new("tüst@tost.test").unwrap());
+ let address = mailaddress_from_mailbox(&mb).unwrap();
+ assert_eq!(address.as_str(), "tüst@tost.test");
+ assert_eq!(address.needs_smtputf8(), true);
+ }
+
+ #[test]
+ fn puny_encodes_domain_if_smtputf8_is_not_needed() {
+ let mb = Mailbox::from(Email::new("tast@tüst.test").unwrap());
+ let address = mailaddress_from_mailbox(&mb).unwrap();
+ assert_eq!(address.as_str(), "tast@xn--tst-hoa.test");
+ assert_eq!(address.needs_smtputf8(), false);
+ }
+
+ #[test]
+ fn does_not_puny_encodes_domain_if_smtputf8_is_needed() {
+ let mb = Mailbox::from(Email::new("töst@tüst.test").unwrap());
+ let address = mailaddress_from_mailbox(&mb).unwrap();
+ assert_eq!(address.as_str(), "töst@tüst.test");
+ assert_eq!(address.needs_smtputf8(), true);
+ }
+ }
} \ No newline at end of file