use bsql::Pool;
fn pool() -> Pool {
Pool::connect("postgres://bsql:bsql@localhost/bsql_test")
.expect("Failed to connect to test database. Is PostgreSQL running?")
}
#[test]
fn select_works_without_replicas() {
let pool = pool();
let users = bsql::query!("SELECT id, login FROM users ORDER BY id")
.fetch_all(&pool)
.unwrap();
assert!(users.len() >= 2);
}
#[test]
fn insert_uses_primary() {
let pool = pool();
let title = "rw-split-test";
let uid = 1i32;
let ticket = bsql::query!(
"INSERT INTO tickets (title, status, created_by_user_id)
VALUES ($title: &str, 'new', $uid: i32)
RETURNING id"
)
.fetch_one(&pool)
.unwrap();
assert!(ticket.id > 0);
let ticket_id = ticket.id;
bsql::query!("DELETE FROM tickets WHERE id = $ticket_id: i32")
.execute(&pool)
.unwrap();
}
#[test]
fn update_uses_primary() {
let pool = pool();
let desc = "rw-split-update";
let id = 1i32;
let affected = bsql::query!("UPDATE tickets SET description = $desc: &str WHERE id = $id: i32")
.execute(&pool)
.unwrap();
assert_eq!(affected, 1);
}
#[test]
fn delete_uses_primary() {
let pool = pool();
let title = "rw-split-delete";
let uid = 1i32;
let ticket = bsql::query!(
"INSERT INTO tickets (title, status, created_by_user_id)
VALUES ($title: &str, 'new', $uid: i32)
RETURNING id"
)
.fetch_one(&pool)
.unwrap();
let ticket_id = ticket.id;
let affected = bsql::query!("DELETE FROM tickets WHERE id = $ticket_id: i32")
.execute(&pool)
.unwrap();
assert_eq!(affected, 1);
}
#[test]
fn transaction_uses_primary() {
let pool = pool();
let txn = pool.begin().unwrap();
let users = bsql::query!("SELECT id, login FROM users ORDER BY id")
.fetch_all(&txn)
.unwrap();
assert!(users.len() >= 2);
txn.rollback().unwrap();
}
#[test]
fn pool_connection_uses_primary() {
let pool = pool();
let conn = pool.acquire().unwrap();
let users = bsql::query!("SELECT id, login FROM users ORDER BY id")
.fetch_all(&conn)
.unwrap();
assert!(users.len() >= 2);
}
#[test]
fn pool_status_reports_metrics() {
let pool = pool();
let status = pool.status();
assert!(status.max_size > 0, "max_size should be positive");
}