Skip to content

Commit 49a4b2d

Browse files
authored
Implement tests for handle_client functions
Added unit tests for client request handling functions.
1 parent 0ed637d commit 49a4b2d

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

tests/handle_client_tests.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
use rust_crud_rest_api::handle_client::{get_id, get_user_request_body, handle_post_request, handle_get_all_request, handle_put_request, handle_delete_request};
2+
3+
#[test]
4+
fn test_get_id() {
5+
let req = "GET /users/42 HTTP/1.1\r\nHost: localhost\r\n\r\n";
6+
assert_eq!(get_id(req), "42");
7+
let req = "GET /users/abc HTTP/1.1\r\n";
8+
assert_eq!(get_id(req), "abc");
9+
let req = "GET /users/ HTTP/1.1\r\n";
10+
assert_eq!(get_id(req), "");
11+
}
12+
13+
#[test]
14+
fn test_get_user_request_body_valid() {
15+
let req = "POST /users HTTP/1.1\r\nHost: localhost\r\n\r\n{\"name\":\"Alice\",\"email\":\"[email protected]\"}";
16+
let user = get_user_request_body(req).unwrap();
17+
assert_eq!(user.name, "Alice");
18+
assert_eq!(user.email, "[email protected]");
19+
assert_eq!(user.id, None);
20+
}
21+
22+
#[test]
23+
fn test_get_user_request_body_invalid() {
24+
let req = "POST /users HTTP/1.1\r\nHost: localhost\r\n\r\nnot a json";
25+
assert!(get_user_request_body(req).is_err());
26+
}
27+
28+
use std::env;
29+
fn get_test_db_url() -> String {
30+
env::var("TEST_DATABASE_URL").unwrap_or_else(|_| "postgres://postgres:password@localhost/testdb".to_string())
31+
}
32+
33+
#[test]
34+
#[ignore]
35+
fn test_handle_post_and_get_all_request() {
36+
let db_url = get_test_db_url();
37+
38+
let req = "POST /users HTTP/1.1\r\n\r\n{\"name\":\"Bob\",\"email\":\"[email protected]\"}";
39+
let (status, body) = handle_post_request(req, &db_url);
40+
assert!(status.contains("200 OK"));
41+
assert_eq!(body, "User created");
42+
43+
let (status, body) = handle_get_all_request("GET /users HTTP/1.1\r\n\r\n", &db_url);
44+
assert!(status.contains("200 OK"));
45+
assert!(body.contains("[email protected]"));
46+
}
47+
48+
#[test]
49+
#[ignore]
50+
fn test_handle_put_and_delete_request() {
51+
let db_url = get_test_db_url();
52+
53+
let req = "POST /users HTTP/1.1\r\n\r\n{\"name\":\"Charlie\",\"email\":\"[email protected]\"}";
54+
let _ = handle_post_request(req, &db_url);
55+
56+
57+
let req = "PUT /users/1 HTTP/1.1\r\n\r\n{\"name\":\"Charles\",\"email\":\"[email protected]\"}";
58+
let (status, body) = handle_put_request(req, &db_url);
59+
assert!(status.contains("200 OK"));
60+
assert_eq!(body, "User updated");
61+
62+
63+
let req = "DELETE /users/1 HTTP/1.1\r\n\r\n";
64+
let (status, body) = handle_delete_request(req, &db_url);
65+
assert!(status.contains("200 OK"));
66+
assert_eq!(body, "User deleted");
67+
}

0 commit comments

Comments
 (0)