use crate::helpers::{
TestInfoBuilder, DEFAULT_BODY, DEFAULT_MESSAGE, DEFAULT_RECIPIENT, DEFAULT_RECIPIENTS_SET,
DEFAULT_SENDER, DNE_USER, EMPTY_MESSAGE, EMPTY_MESSAGES,
};
use lettre::{transport::smtp::client::Tls, Transport};
use maik::MailAssertion;
use regex::bytes::Regex;
use std::iter;
#[test]
fn sender_is() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let ma = MailAssertion::new().sender_is(DEFAULT_SENDER);
assert!(test_info.server.assert(ma));
}
#[test]
fn sender_is_not() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let ma = MailAssertion::new().sender_is(DNE_USER);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_are_with_one_recipient() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let ma = MailAssertion::new().recipients_are([DEFAULT_RECIPIENT]);
assert!(test_info.server.assert(ma));
}
#[test]
fn recipients_are_not_with_one_recipient() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let ma = MailAssertion::new().recipients_are([DNE_USER]);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_are_subset_with_one_recipient() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let empty: [&str; 0] = [];
let ma = MailAssertion::new().recipients_are(empty);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_are_superset_with_one_recipient() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGE).is_ok());
let ma = MailAssertion::new().recipients_are([DEFAULT_RECIPIENT, DNE_USER]);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_are_with_multiple_recipients() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let ma = MailAssertion::new().recipients_are(DEFAULT_RECIPIENTS_SET.iter());
assert!(test_info.server.assert(ma));
}
#[test]
fn recipients_are_not_with_multiple_recipients() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let recipients = DEFAULT_RECIPIENTS_SET
.iter()
.copied()
.skip(1)
.chain(iter::once(DNE_USER));
let ma = MailAssertion::new().recipients_are(recipients);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_contain_subset() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let recipients = DEFAULT_RECIPIENTS_SET.iter().copied().skip(1);
let ma = MailAssertion::new().recipients_contain(recipients);
assert!(test_info.server.assert(ma));
}
#[test]
fn recipients_contain_equal() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let recipients = DEFAULT_RECIPIENTS_SET.iter().copied();
let ma = MailAssertion::new().recipients_contain(recipients);
assert!(test_info.server.assert(ma));
}
#[test]
fn recipients_contain_no_contain() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let ma = MailAssertion::new().recipients_contain([DNE_USER]);
assert!(!test_info.server.assert(ma));
}
#[test]
fn recipients_contain_supserset() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&EMPTY_MESSAGES).is_ok());
let recipients = DEFAULT_RECIPIENTS_SET
.iter()
.copied()
.chain(iter::once(DNE_USER));
let ma = MailAssertion::new().recipients_contain(recipients);
assert!(!test_info.server.assert(ma));
}
#[test]
fn body_is() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&DEFAULT_MESSAGE).is_ok());
let ma = MailAssertion::new().body_is(DEFAULT_BODY);
assert!(test_info.server.assert(ma));
}
#[test]
fn body_is_not() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&DEFAULT_MESSAGE).is_ok());
let ma = MailAssertion::new().body_is("not body");
assert!(!test_info.server.assert(ma));
}
#[test]
fn body_matches_partial() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&DEFAULT_MESSAGE).is_ok());
let regex = Regex::new(r"code: \d{6}$").unwrap();
let ma = MailAssertion::new().body_matches(regex);
assert!(test_info.server.assert(ma));
}
#[test]
fn body_matches_whole() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&DEFAULT_MESSAGE).is_ok());
let regex = Regex::new(r"^.* code: \d{6}$").unwrap();
let ma = MailAssertion::new().body_matches(regex);
assert!(test_info.server.assert(ma));
}
#[test]
fn body_matches_no_matches() {
let test_info = TestInfoBuilder::new().default_auth_user().build();
let mailer = test_info.mailer_builder.tls(Tls::None).build();
assert!(mailer.send(&DEFAULT_MESSAGE).is_ok());
let regex = Regex::new(r"code: \d{8}").unwrap();
let ma = MailAssertion::new().body_matches(regex);
assert!(!test_info.server.assert(ma));
}