use crate::utils::TestCase;
use async_trait::async_trait;
use miette::Error as ErrReport;
use miltr_common::modifications::{quarantine::Quarantine, ModificationResponse};
use miltr_server::Milter;
#[derive(Debug, Clone)]
struct QuarantineTestMilter;
#[async_trait]
impl Milter for QuarantineTestMilter {
type Error = ErrReport;
async fn end_of_body(&mut self) -> Result<ModificationResponse, Self::Error> {
let mut builder = ModificationResponse::builder();
builder.push(Quarantine::new("Invalid Email".as_bytes()));
let response = builder.contin();
Ok(response)
}
async fn abort(&mut self) -> Result<(), Self::Error> {
Ok(())
}
}
#[tokio::test]
async fn test_quarantine() {
let testcase = TestCase::setup("modifications-quarantine", QuarantineTestMilter)
.await
.expect("Failed setting up test case");
testcase.send_mail().await.expect("Failed sending mail");
let testcase = testcase.stop().await.expect("Failed to shut down postfix");
let content = testcase
.log_file_content()
.await
.expect("Failed reading logfile");
assert!(content.contains("milter triggers HOLD action"));
}