From c3ec20c40d4a84c0f48f1f2dc4ca679aeb67d849 Mon Sep 17 00:00:00 2001 From: Brian Broll Date: Fri, 3 Mar 2023 14:23:57 -0600 Subject: [PATCH 1/2] Add list friends tests --- crates/cloud/src/friends.rs | 143 +++++++++++++++++++++++++++++++++--- 1 file changed, 133 insertions(+), 10 deletions(-) diff --git a/crates/cloud/src/friends.rs b/crates/cloud/src/friends.rs index e03509a3..8674d284 100644 --- a/crates/cloud/src/friends.rs +++ b/crates/cloud/src/friends.rs @@ -177,7 +177,7 @@ pub fn config(cfg: &mut web::ServiceConfig) { mod tests { use super::*; use actix_web::test; - use actix_web::{web, App}; + use actix_web::{http, web, App}; use netsblox_cloud_common::FriendLink; use netsblox_cloud_common::{ api::{self, UserRole}, @@ -187,15 +187,111 @@ mod tests { use crate::test_utils; #[actix_web::test] - #[ignore] async fn test_list_friends() { - todo!(); + // Define users + let user: User = api::NewUser { + username: "user".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + let f1: User = api::NewUser { + username: "f1".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + let f2: User = api::NewUser { + username: "f2".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + let nonfriend: User = api::NewUser { + username: "nonfriend".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + + // Define the friend relationships + let l1 = FriendLink::new( + user.username.clone(), + f1.username.clone(), + Some(FriendLinkState::APPROVED), + ); + let l2 = FriendLink::new( + f2.username.clone(), + user.username.clone(), + Some(FriendLinkState::APPROVED), + ); + + test_utils::setup() + .with_users(&[user.clone(), f1.clone(), f2.clone(), nonfriend]) + .with_friend_links(&[l1, l2]) + .run(|app_data| async move { + let app = test::init_service( + App::new() + .wrap(test_utils::cookie::middleware()) + .app_data(web::Data::new(app_data.clone())) + .configure(config), + ) + .await; + + let cookie = test_utils::cookie::new(&user.username); + let req = test::TestRequest::get() + .uri(&format!("/{}/", &user.username)) + .cookie(cookie) + .to_request(); + + let friends: Vec = test::call_and_read_body_json(&app, req).await; + assert_eq!(friends.len(), 2); + dbg!(&friends); + assert!(friends.contains(&f1.username)); + assert!(friends.contains(&f2.username)); + }) + .await; } #[actix_web::test] - #[ignore] - async fn test_list_friends_403() { - todo!(); + async fn test_list_friends_401() { + // Define users + let user: User = api::NewUser { + username: "user".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + + test_utils::setup() + .with_users(&[user.clone()]) + .run(|app_data| async move { + let app = test::init_service( + App::new() + .wrap(test_utils::cookie::middleware()) + .app_data(web::Data::new(app_data.clone())) + .configure(config), + ) + .await; + + let req = test::TestRequest::get() + .uri(&format!("/{}/", &user.username)) + .to_request(); + + let response = test::call_service(&app, req).await; + assert_eq!(response.status(), http::StatusCode::UNAUTHORIZED); + }) + .await; } #[actix_web::test] @@ -276,9 +372,36 @@ mod tests { } #[actix_web::test] - #[ignore] - async fn test_list_online_friends_403() { - todo!(); + async fn test_list_online_friends_401() { + // Define users + let user: User = api::NewUser { + username: "user".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + + test_utils::setup() + .with_users(&[user.clone()]) + .run(|app_data| async move { + let app = test::init_service( + App::new() + .wrap(test_utils::cookie::middleware()) + .app_data(web::Data::new(app_data.clone())) + .configure(config), + ) + .await; + + let req = test::TestRequest::get() + .uri(&format!("/{}/online", &user.username)) + .to_request(); + + let response = test::call_service(&app, req).await; + assert_eq!(response.status(), http::StatusCode::UNAUTHORIZED); + }) + .await; } #[actix_web::test] @@ -301,7 +424,7 @@ mod tests { #[actix_web::test] #[ignore] - async fn test_block_user_403() { + async fn test_block_user_401() { todo!(); } From 57c86e36245dad1f80184cd871ab8ca506f41350 Mon Sep 17 00:00:00 2001 From: Brian Broll Date: Fri, 3 Mar 2023 14:39:18 -0600 Subject: [PATCH 2/2] Add a couple more tests --- crates/cloud/src/friends.rs | 103 ++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 4 deletions(-) diff --git a/crates/cloud/src/friends.rs b/crates/cloud/src/friends.rs index 8674d284..ed3122bd 100644 --- a/crates/cloud/src/friends.rs +++ b/crates/cloud/src/friends.rs @@ -405,9 +405,57 @@ mod tests { } #[actix_web::test] - #[ignore] async fn test_unfriend() { - todo!(); + // Define users + let user: User = api::NewUser { + username: "user".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + let f1: User = api::NewUser { + username: "f1".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + + // Define the friend relationships + let l1 = FriendLink::new( + user.username.clone(), + f1.username.clone(), + Some(FriendLinkState::APPROVED), + ); + + test_utils::setup() + .with_users(&[user.clone(), f1.clone()]) + .with_friend_links(&[l1]) + .run(|app_data| async move { + let app = test::init_service( + App::new() + .wrap(test_utils::cookie::middleware()) + .app_data(web::Data::new(app_data.clone())) + .configure(config), + ) + .await; + + let cookie = test_utils::cookie::new(&user.username); + let req = test::TestRequest::get() + .uri(&format!("/{}/unfriend/{}", &user.username, &f1.username)) + .cookie(cookie) + .to_request(); + + println!("/{}/unfriend/{}", &user.username, &f1.username); + let response = test::call_service(&app, req).await; + assert_eq!(response.status(), http::StatusCode::OK); + let friends = app_data.get_friends(&user.username).await.unwrap(); + assert_eq!(friends.len(), 0); + }) + .await; } #[actix_web::test] @@ -417,9 +465,56 @@ mod tests { } #[actix_web::test] - #[ignore] async fn test_block_user() { - todo!(); + // Define users + let user: User = api::NewUser { + username: "user".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + let f1: User = api::NewUser { + username: "f1".into(), + email: "user@netsblox.org".into(), + password: None, + group_id: None, + role: Some(UserRole::User), + } + .into(); + + // Define the friend relationships + let l1 = FriendLink::new( + user.username.clone(), + f1.username.clone(), + Some(FriendLinkState::APPROVED), + ); + + test_utils::setup() + .with_users(&[user.clone(), f1.clone()]) + .with_friend_links(&[l1]) + .run(|app_data| async move { + let app = test::init_service( + App::new() + .wrap(test_utils::cookie::middleware()) + .app_data(web::Data::new(app_data.clone())) + .configure(config), + ) + .await; + + let cookie = test_utils::cookie::new(&user.username); + let req = test::TestRequest::get() + .uri(&format!("/{}/block/{}", &user.username, &f1.username)) + .cookie(cookie) + .to_request(); + + let response = test::call_service(&app, req).await; + assert_eq!(response.status(), http::StatusCode::OK); + let friends = app_data.get_friends(&user.username).await.unwrap(); + assert_eq!(friends.len(), 0); + }) + .await; } #[actix_web::test]