This commit is contained in:
2026-04-18 12:03:44 +02:00
parent b5cde7d512
commit 0e8c7ac403
5 changed files with 1050 additions and 12 deletions

View File

@@ -323,6 +323,38 @@ VALUES (?, ?, ?, ?, ?, ?, ?)
}
}
pub(crate) async fn insert_raw_ws_message(
pool: &sqlx::SqlitePool,
session_id: i64,
direction: &str,
message_text: &str,
) -> core::result::Result<(), crate::KhbbError> {
let now = chrono::Utc::now().to_rfc3339();
let insert_result = sqlx::query(
r#"
INSERT INTO raw_ws_messages (
listener_session_id,
direction,
message_text,
created_at
) VALUES (?1, ?2, ?3, ?4);
"#,
)
.bind(session_id)
.bind(direction)
.bind(message_text)
.bind(now)
.execute(pool)
.await;
match insert_result {
Ok(_) => Ok(()),
Err(error) => Err(crate::KhbbError::Database {
context: "insert raw websocket message",
message: error.to_string(),
}),
}
}
#[cfg(test)]
mod tests {
use super::*;
@@ -473,4 +505,26 @@ WHERE id = ?1;
insert_raw_http_rpc_message(&pool, session.id, 1, "getSlot", "{}", "{}", "ok").await;
assert!(result.is_ok());
}
#[tokio::test]
async fn insert_raw_ws_message_inserts_row() {
let database_url = build_temp_sqlite_url();
let pool_result = crate::create_sqlite_pool(&database_url).await;
assert!(pool_result.is_ok());
let pool = pool_result.expect("create sqlite pool");
let schema_result = crate::ensure_sqlite_schema(&pool).await;
assert!(schema_result.is_ok());
let config = build_test_config(database_url);
let insert_session_result = super::insert_listener_session(&pool, &config).await;
assert!(insert_session_result.is_ok());
let session = insert_session_result.expect("insert listener session");
let insert_ws_result = super::insert_raw_ws_message(
&pool,
session.id,
"incoming",
r#"{"jsonrpc":"2.0","method":"slotNotification"}"#,
)
.await;
assert!(insert_ws_result.is_ok());
}
}