diff --git a/server/src/gateway.rs b/server/src/gateway.rs index d5f2a355..db7dd79b 100644 --- a/server/src/gateway.rs +++ b/server/src/gateway.rs @@ -1971,4 +1971,67 @@ enabled = false let resp = cli.delete("/gateway/agents/no-such-id").send().await; assert_eq!(resp.0.status(), StatusCode::NOT_FOUND); } + + // ── Bot configuration helper tests ────────────────────────────────── + + #[test] + fn toml_string_plain() { + assert_eq!(toml_string("hello"), "\"hello\""); + } + + #[test] + fn toml_string_escapes_quotes_and_backslashes() { + assert_eq!(toml_string(r#"say "hi""#), r#""say \"hi\"""#); + assert_eq!(toml_string(r"a\b"), r#""a\\b""#); + } + + #[test] + fn write_and_read_matrix_bot_config_round_trips() { + let tmp = tempfile::tempdir().unwrap(); + let payload = BotConfigPayload { + transport: "matrix".into(), + homeserver: Some("https://matrix.example.com".into()), + username: Some("@bot:example.com".into()), + password: Some("s3cr3t".into()), + slack_bot_token: None, + slack_signing_secret: None, + }; + write_bot_config(tmp.path(), &payload).expect("write should succeed"); + + let read = read_bot_config_raw(tmp.path()); + assert_eq!(read.transport, "matrix"); + assert_eq!( + read.homeserver.as_deref(), + Some("https://matrix.example.com") + ); + assert_eq!(read.username.as_deref(), Some("@bot:example.com")); + assert_eq!(read.password.as_deref(), Some("s3cr3t")); + } + + #[test] + fn write_and_read_slack_bot_config_round_trips() { + let tmp = tempfile::tempdir().unwrap(); + let payload = BotConfigPayload { + transport: "slack".into(), + homeserver: None, + username: None, + password: None, + slack_bot_token: Some("xoxb-abc123".into()), + slack_signing_secret: Some("sig-secret".into()), + }; + write_bot_config(tmp.path(), &payload).expect("write should succeed"); + + let read = read_bot_config_raw(tmp.path()); + assert_eq!(read.transport, "slack"); + assert_eq!(read.slack_bot_token.as_deref(), Some("xoxb-abc123")); + assert_eq!(read.slack_signing_secret.as_deref(), Some("sig-secret")); + } + + #[test] + fn read_bot_config_raw_returns_default_when_file_absent() { + let tmp = tempfile::tempdir().unwrap(); + let read = read_bot_config_raw(tmp.path()); + assert_eq!(read.transport, ""); + assert!(read.homeserver.is_none()); + } }