From 5f349c8a91d519470e8f258e5a49c8970a0d15b0 Mon Sep 17 00:00:00 2001 From: Marco Otte-Witte Date: Tue, 6 Aug 2024 15:21:49 +0200 Subject: [PATCH] accept optional company --- src/lib.rs | 9 ++++++++- tests/send_message.rs | 44 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index df195ea..4111da7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,6 +25,7 @@ pub struct Payload { pub email: String, pub message: String, pub service: Option, + pub company: Option, } #[event(fetch, respond_with_errors)] @@ -74,12 +75,18 @@ where } else { "".to_owned() }; - let subject = if !service.is_empty() && service.to_lowercase() != "other" { + let mut subject = if !service.is_empty() && service.to_lowercase() != "other" { format!("Mainmatter inquiry for {service}") } else { "Mainmatter inquiry".to_owned() }; + subject = if let Some(company) = payload.company { + format!("{} from {}", subject, company) + } else { + subject + }; + let data = json!({ "personalizations": [{ "to": [ diff --git a/tests/send_message.rs b/tests/send_message.rs index 770c8ab..05d409d 100644 --- a/tests/send_message.rs +++ b/tests/send_message.rs @@ -15,6 +15,7 @@ async fn it_works_for_the_happy_path() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("Digital Products & Design")), + company: None, }; let result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; @@ -52,6 +53,7 @@ async fn it_sends_the_right_payload_to_sendgrid() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("Digital Products & Design")), + company: None, }; let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; } @@ -87,6 +89,7 @@ async fn it_sends_an_empty_message_if_none_is_provided() { email: String::from("email@domain.tld"), message: String::from(""), service: Some(String::from("Digital Products & Design")), + company: None, }; let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; } @@ -122,6 +125,7 @@ async fn it_leaves_out_the_service_if_an_empty_one_is_provided() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("")), + company: None, }; let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; } @@ -157,6 +161,7 @@ async fn it_leaves_out_the_service_if_none_is_provided() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: None, + company: None, }; let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; } @@ -192,6 +197,43 @@ async fn it_leaves_out_the_service_if_other_is_provided() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("Other")), + company: None, + }; + let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; +} + +#[wasm_bindgen_test] +async fn it_adds_company_to_the_subject_if_one_is_provided() { + async fn request_sendgrid(_api_key: &str, data: String) -> Result { + let expected = json!({ + "personalizations": [{ + "to": [ + { "email": "contact@mainmatter.com", "name": "Mainmatter" } + ], + "bcc": [ + { "email": "trigger@zapier.com" } + ] + }], + "from": { "email": "no-reply@mainmatter.com", "name": "name via mainmatter.com" }, + "reply_to": { "email": "email@domain.tld", "name": "name" }, + "subject": "Mainmatter inquiry from Company", + "content": [{ + "type": "text/plain", + "value": "Hi!" + }] + }); + + assert_eq!(data, expected.to_string()); + + Ok(200) + } + + let payload = Payload { + name: String::from("name"), + email: String::from("email@domain.tld"), + message: String::from("Hi!"), + service: Some(String::from("Other")), + company: Some(String::from("Company")), }; let _result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; } @@ -207,6 +249,7 @@ async fn it_responds_with_502_if_sendgrid_errors() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("")), + company: None, }; let result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await; @@ -224,6 +267,7 @@ async fn it_responds_with_500_if_calling_sendgrid_errors() { email: String::from("email@domain.tld"), message: String::from("Hi!"), service: Some(String::from("")), + company: None, }; let result = send_message(payload, "api_key", "trigger@zapier.com", &request_sendgrid).await;