Skip to content

Commit a6c5b68

Browse files
committed
add POST query test
1 parent 84e709a commit a6c5b68

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

src/main.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ fn service(config: api::Config) -> IntoMakeServiceWithConnectInfo<Router, Socket
226226

227227
#[cfg(test)]
228228
mod tests {
229+
use alloy::primitives::{Bytes, B256, U64};
229230
use axum_test::TestServer;
231+
use serde_json::json;
230232

231233
use super::*;
232234
use crate::pg;
@@ -238,4 +240,37 @@ mod tests {
238240
let server = TestServer::new(service(config)).unwrap();
239241
server.get("/").await.assert_text_contains("hello");
240242
}
243+
244+
#[tokio::test]
245+
async fn test_query_post_with_params() {
246+
let (_pg_server, pool) = pg::test_utils::test_pg().await;
247+
let pg = pool.get().await.expect("unable to get pg from pool");
248+
pg::test_utils::insert(
249+
&pg,
250+
vec![pg::test_utils::Log {
251+
chain: U64::from(1),
252+
block_num: U64::from(1),
253+
topics: vec![B256::with_last_byte(0x42)],
254+
data: Bytes::from_static(&[0x42]),
255+
}],
256+
)
257+
.await;
258+
let config = api::Config::new(pool, None);
259+
let server = TestServer::new(service(config)).unwrap();
260+
let request = vec![api_sql::Request {
261+
block_height: None,
262+
event_signatures: vec![],
263+
query: String::from("select block_num from logs"),
264+
}];
265+
server
266+
.post("/query")
267+
.add_query_param("api-key", "face")
268+
.add_query_param("chain", "1")
269+
.json(&request)
270+
.await
271+
.assert_json(&json!({
272+
"block_height": 1,
273+
"result": [[["block_num"],[1]]]
274+
}));
275+
}
241276
}

src/pg.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,34 @@ pub fn new_pool(url: &str, size: usize) -> Result<Pool> {
2424

2525
#[cfg(test)]
2626
pub mod test_utils {
27+
use alloy::primitives::{Bytes, B256, U64};
2728
use deadpool_postgres::Pool;
2829
use postgresql_embedded::{PostgreSQL, Settings, Version};
29-
use tokio_postgres::NoTls;
30+
use tokio_postgres::{Client, NoTls};
31+
32+
pub struct Log {
33+
pub chain: U64,
34+
pub block_num: U64,
35+
pub topics: Vec<B256>,
36+
pub data: Bytes,
37+
}
38+
39+
pub async fn insert(pg: &Client, logs: Vec<Log>) {
40+
for log in logs {
41+
pg.execute(
42+
r#"insert into blocks(chain, num, hash) values ($1, $2, '\xface')"#,
43+
&[&log.chain, &log.block_num],
44+
)
45+
.await
46+
.unwrap();
47+
pg.execute(
48+
"insert into logs(chain, block_num, topics, data) values ($1, $2, $3, $4)",
49+
&[&log.chain, &log.block_num, &log.topics, &log.data.to_vec()],
50+
)
51+
.await
52+
.unwrap();
53+
}
54+
}
3055

3156
pub async fn test_pg() -> (PostgreSQL, Pool) {
3257
let pg_settings = Settings {

0 commit comments

Comments
 (0)