Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
246 changes: 232 additions & 14 deletions crates/cloud/src/friends.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand All @@ -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<String> = 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]
Expand Down Expand Up @@ -276,15 +372,90 @@ 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]
#[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]
Expand All @@ -294,14 +465,61 @@ 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]
#[ignore]
async fn test_block_user_403() {
async fn test_block_user_401() {
todo!();
}

Expand Down