diff --git a/conf/dev.toml b/conf/dev.toml index 13585c4..61f2230 100644 --- a/conf/dev.toml +++ b/conf/dev.toml @@ -2,3 +2,6 @@ debug = true [database] url = "postgres://ztoa:0zpVXAVK20@localhost:5432/ztoa" + +[app] +public_url = "http://localhost:3742/" diff --git a/src/conf.rs b/src/conf.rs index edd45b4..e19a9b2 100644 --- a/src/conf.rs +++ b/src/conf.rs @@ -11,6 +11,7 @@ pub struct Database { #[derive(Debug, Deserialize, Clone)] pub struct App { pub listen: SocketAddr, + pub public_url: String, } #[derive(Debug, Deserialize, Clone)] diff --git a/src/server/routes/subscriptions/mod.rs b/src/server/routes/subscriptions/mod.rs index 1639180..9e8b5d0 100644 --- a/src/server/routes/subscriptions/mod.rs +++ b/src/server/routes/subscriptions/mod.rs @@ -39,8 +39,6 @@ pub async fn subscribe( return Err(SubscribeError::InvalidEmail); } - debug!("email sent"); - let mut txn = db.begin().await.context("start database transaction")?; let subscriber_id = Uuid::new_v4(); @@ -84,10 +82,15 @@ pub async fn subscribe( .parse() .map_err(|_| SubscribeError::InvalidEmail)?, "Test".to_owned(), - format!("Please confirm your subscription: https://example.com/subscriptions/confirm/?token={token}"), + format!( + "Please confirm your subscription: {}subscriptions/confirm/?token={token}", + conf.app.public_url + ), ) .await?; + debug!("email sent"); + txn.commit().await.context("commit transaction")?; Ok(()) diff --git a/tests/fixture/mod.rs b/tests/fixture/mod.rs index e20850b..5a4ef64 100644 --- a/tests/fixture/mod.rs +++ b/tests/fixture/mod.rs @@ -52,6 +52,8 @@ impl TestServer { let server = ZeroToAxum::serve(Conf { app: conf::App { listen: "[::]:0".parse().unwrap(), + // TODO: how do I both configure this and use a random port? + public_url: "http://localhost/".to_string(), }, database: conf::Database { url }, debug: true, diff --git a/tests/subscriptions.rs b/tests/subscriptions.rs index ddc9cf6..ba3422b 100644 --- a/tests/subscriptions.rs +++ b/tests/subscriptions.rs @@ -24,7 +24,7 @@ async fn subscribe_succeeds_with_valid_input() -> Result<()> { assert!( server .mock_smtp_server - .assert(MailAssertion::new().body_matches(Regex::new(r"example\.com")?)), + .assert(MailAssertion::new().body_matches(Regex::new(r"http\:\/\/localhost\/")?)), "email sent has link" );