|
| 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