mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-10-04 08:15:39 +00:00
153 lines
4.4 KiB
Rust
153 lines
4.4 KiB
Rust
use sqlx::PgPool;
|
|
|
|
use sqlx_example_postgres_axum_social::http;
|
|
|
|
use axum::http::{Request, StatusCode};
|
|
use tower::ServiceExt;
|
|
|
|
use std::borrow::BorrowMut;
|
|
|
|
use common::{expect_rfc3339_timestamp, expect_uuid, response_json, RequestBuilderExt};
|
|
|
|
use serde_json::json;
|
|
|
|
mod common;
|
|
|
|
#[sqlx::test(fixtures("users", "posts"))]
|
|
async fn test_create_comment(db: PgPool) {
|
|
let mut app = http::app(db);
|
|
|
|
// Happy path!
|
|
let mut resp1 = app
|
|
.borrow_mut()
|
|
.oneshot(
|
|
Request::post("/v1/post/d9ca2672-24c5-4442-b32f-cd717adffbaa/comment").json(json! {
|
|
{
|
|
"auth": {
|
|
"username": "bob",
|
|
"password": "pro gamer 1990"
|
|
},
|
|
"content": "lol bet ur still bad, 1v1 me"
|
|
}
|
|
}),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(resp1.status(), StatusCode::OK);
|
|
|
|
let resp1_json = response_json(&mut resp1).await;
|
|
|
|
assert_eq!(resp1_json["username"], "bob");
|
|
assert_eq!(resp1_json["content"], "lol bet ur still bad, 1v1 me");
|
|
|
|
let _comment_id = expect_uuid(&resp1_json["commentId"]);
|
|
|
|
let _created_at = expect_rfc3339_timestamp(&resp1_json["createdAt"]);
|
|
|
|
// Incorrect username
|
|
let mut resp2 = app
|
|
.borrow_mut()
|
|
.oneshot(
|
|
Request::post("/v1/post/d9ca2672-24c5-4442-b32f-cd717adffbaa/comment").json(json! {
|
|
{
|
|
"auth": {
|
|
"username": "bobbbbbb",
|
|
"password": "pro gamer 1990"
|
|
},
|
|
"content": "lol bet ur still bad, 1v1 me"
|
|
}
|
|
}),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(resp2.status(), StatusCode::UNPROCESSABLE_ENTITY);
|
|
|
|
let resp2_json = response_json(&mut resp2).await;
|
|
assert_eq!(resp2_json["message"], "invalid username/password");
|
|
|
|
// Incorrect password
|
|
let mut resp3 = app
|
|
.borrow_mut()
|
|
.oneshot(
|
|
Request::post("/v1/post/d9ca2672-24c5-4442-b32f-cd717adffbaa/comment").json(json! {
|
|
{
|
|
"auth": {
|
|
"username": "bob",
|
|
"password": "pro gamer 1990"
|
|
},
|
|
"content": "lol bet ur still bad, 1v1 me"
|
|
}
|
|
}),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(resp3.status(), StatusCode::UNPROCESSABLE_ENTITY);
|
|
|
|
let resp3_json = response_json(&mut resp3).await;
|
|
assert_eq!(resp3_json["message"], "invalid username/password");
|
|
}
|
|
|
|
#[sqlx::test(fixtures("users", "posts", "comments"))]
|
|
async fn test_list_comments(db: PgPool) {
|
|
let mut app = http::app(db);
|
|
|
|
// This only has the happy path.
|
|
let mut resp = app
|
|
.borrow_mut()
|
|
.oneshot(Request::get("/v1/post/d9ca2672-24c5-4442-b32f-cd717adffbaa/comment").empty_body())
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
|
|
let resp_json = response_json(&mut resp).await;
|
|
|
|
let comments = resp_json
|
|
.as_array()
|
|
.expect("expected request to return an array");
|
|
|
|
assert_eq!(comments.len(), 2);
|
|
|
|
assert_eq!(comments[0]["username"], "bob");
|
|
assert_eq!(comments[0]["content"], "lol bet ur still bad, 1v1 me");
|
|
|
|
let _comment_id = expect_uuid(&comments[0]["commentId"]);
|
|
let created_at_0 = expect_rfc3339_timestamp(&comments[0]["createdAt"]);
|
|
|
|
assert_eq!(comments[1]["username"], "alice");
|
|
assert_eq!(comments[1]["content"], "you're on!");
|
|
|
|
let _comment_id = expect_uuid(&comments[1]["commentId"]);
|
|
let created_at_1 = expect_rfc3339_timestamp(&comments[1]["createdAt"]);
|
|
|
|
assert!(
|
|
created_at_0 < created_at_1,
|
|
"comments must be assorted in ascending order"
|
|
);
|
|
|
|
let mut resp = app
|
|
.borrow_mut()
|
|
.oneshot(Request::get("/v1/post/7e3d4d16-a35e-46ba-8223-b4f1debbfbfe/comment").empty_body())
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(resp.status(), StatusCode::OK);
|
|
|
|
let resp_json = response_json(&mut resp).await;
|
|
|
|
let comments = resp_json
|
|
.as_array()
|
|
.expect("expected request to return an array");
|
|
|
|
assert_eq!(comments.len(), 1);
|
|
|
|
assert_eq!(comments[0]["username"], "alice");
|
|
assert_eq!(comments[0]["content"], "lol you're just mad you lost :P");
|
|
|
|
let _comment_id = expect_uuid(&comments[0]["commentId"]);
|
|
let _created_at = expect_rfc3339_timestamp(&comments[0]["createdAt"]);
|
|
}
|