/ tests / requests / prepare_data.rs
prepare_data.rs
 1  use microvisor::{models::users, views::auth::LoginResponse};
 2  use axum::http::{HeaderName, HeaderValue};
 3  use loco_rs::{app::AppContext, TestServer};
 4  
 5  const USER_EMAIL: &str = "test@loco.com";
 6  const USER_PASSWORD: &str = "1234";
 7  
 8  pub struct LoggedInUser {
 9      pub user: users::Model,
10      pub token: String,
11  }
12  
13  pub async fn init_user_login(request: &TestServer, ctx: &AppContext) -> LoggedInUser {
14      let register_payload = serde_json::json!({
15          "name": "loco",
16          "email": USER_EMAIL,
17          "password": USER_PASSWORD
18      });
19  
20      //Creating a new user
21      request
22          .post("/api/auth/register")
23          .json(&register_payload)
24          .await;
25      let user = users::Model::find_by_email(&ctx.db, USER_EMAIL)
26          .await
27          .unwrap();
28  
29      let verify_payload = serde_json::json!({
30          "token": user.email_verification_token,
31      });
32  
33      request.post("/api/auth/verify").json(&verify_payload).await;
34  
35      let response = request
36          .post("/api/auth/login")
37          .json(&serde_json::json!({
38              "email": USER_EMAIL,
39              "password": USER_PASSWORD
40          }))
41          .await;
42  
43      let login_response: LoginResponse = serde_json::from_str(&response.text()).unwrap();
44  
45      LoggedInUser {
46          user: users::Model::find_by_email(&ctx.db, USER_EMAIL)
47              .await
48              .unwrap(),
49          token: login_response.token,
50      }
51  }
52  
53  pub fn auth_header(token: &str) -> (HeaderName, HeaderValue) {
54      let auth_header_value = HeaderValue::from_str(&format!("Bearer {}", &token)).unwrap();
55  
56      (HeaderName::from_static("authorization"), auth_header_value)
57  }