91 lines
2.7 KiB
Rust
91 lines
2.7 KiB
Rust
use super::*;
|
|
use crate::test_helpers::seed_user;
|
|
use domain::{
|
|
models::thought::{Thought, Visibility},
|
|
value_objects::*,
|
|
};
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn save_and_find_thought(pool: sqlx::PgPool) {
|
|
let user = seed_user(&pool, "alice", "alice@ex.com").await;
|
|
let repo = PgThoughtRepository::new(pool);
|
|
let t = Thought::new_local(
|
|
ThoughtId::new(),
|
|
user.id.clone(),
|
|
Content::new_local("hello world").unwrap(),
|
|
None,
|
|
Visibility::Public,
|
|
None,
|
|
false,
|
|
);
|
|
repo.save(&t).await.unwrap();
|
|
let found = repo.find_by_id(&t.id).await.unwrap().unwrap();
|
|
assert_eq!(found.content.as_str(), "hello world");
|
|
assert!(found.local);
|
|
}
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn delete_thought(pool: sqlx::PgPool) {
|
|
let user = seed_user(&pool, "bob", "bob@ex.com").await;
|
|
let repo = PgThoughtRepository::new(pool);
|
|
let t = Thought::new_local(
|
|
ThoughtId::new(),
|
|
user.id.clone(),
|
|
Content::new_local("bye").unwrap(),
|
|
None,
|
|
Visibility::Public,
|
|
None,
|
|
false,
|
|
);
|
|
repo.save(&t).await.unwrap();
|
|
repo.delete(&t.id, &user.id).await.unwrap();
|
|
assert!(repo.find_by_id(&t.id).await.unwrap().is_none());
|
|
}
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn delete_wrong_owner_returns_not_found(pool: sqlx::PgPool) {
|
|
let alice = seed_user(&pool, "alice", "alice@ex.com").await;
|
|
let bob = seed_user(&pool, "bob", "bob@ex.com").await;
|
|
let repo = PgThoughtRepository::new(pool);
|
|
let t = Thought::new_local(
|
|
ThoughtId::new(),
|
|
alice.id.clone(),
|
|
Content::new_local("secret").unwrap(),
|
|
None,
|
|
Visibility::Public,
|
|
None,
|
|
false,
|
|
);
|
|
repo.save(&t).await.unwrap();
|
|
let err = repo.delete(&t.id, &bob.id).await.unwrap_err();
|
|
assert!(matches!(err, DomainError::NotFound));
|
|
}
|
|
|
|
#[sqlx::test(migrations = "./migrations")]
|
|
async fn get_thread_returns_root_and_replies(pool: sqlx::PgPool) {
|
|
let user = seed_user(&pool, "charlie", "charlie@ex.com").await;
|
|
let repo = PgThoughtRepository::new(pool);
|
|
let root = Thought::new_local(
|
|
ThoughtId::new(),
|
|
user.id.clone(),
|
|
Content::new_local("root").unwrap(),
|
|
None,
|
|
Visibility::Public,
|
|
None,
|
|
false,
|
|
);
|
|
let reply = Thought::new_local(
|
|
ThoughtId::new(),
|
|
user.id.clone(),
|
|
Content::new_local("reply").unwrap(),
|
|
Some(root.id.clone()),
|
|
Visibility::Public,
|
|
None,
|
|
false,
|
|
);
|
|
repo.save(&root).await.unwrap();
|
|
repo.save(&reply).await.unwrap();
|
|
let thread = repo.get_thread(&root.id).await.unwrap();
|
|
assert_eq!(thread.len(), 2);
|
|
}
|