test: cascading in-memory store

This commit is contained in:
2026-10-25 22:19:24 +01:00
parent 51d92e08a7
commit 06eec2feae
72 changed files with 2439 additions and 1627 deletions

View File

@@ -2,7 +2,7 @@ use crate::test_support::register_command;
use std::sync::Arc;
use domain::models::UserRole;
use domain::testing::InMemoryUserRepository;
use domain::testing::InMemoryStore;
use crate::{
auth::{commands::RegisterCommand, deps::RegisterDeps, register},
@@ -40,7 +40,7 @@ async fn register_user(
#[tokio::test]
async fn authorize_admin_is_true_for_an_admin_user() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let user = register_user(&b, "admin@example.com", "admin_user", UserRole::Admin).await;
@@ -56,7 +56,7 @@ async fn authorize_admin_is_true_for_an_admin_user() {
#[tokio::test]
async fn authorize_admin_is_false_for_a_regular_user() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let user = register_user(
&b,

View File

@@ -3,7 +3,7 @@ use std::sync::Arc;
use domain::models::{ProfileField, User, UserProfile, UserRole};
use domain::ports::UserRepository;
use domain::testing::InMemoryUserRepository;
use domain::testing::InMemoryStore;
use domain::value_objects::{Email, PasswordHash, UserId, Username};
use uuid::Uuid;
@@ -15,7 +15,7 @@ use crate::{
#[tokio::test]
async fn returns_profile_for_existing_user() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let user_repo = b.user_repo.clone();
let reg_deps = RegisterDeps {
@@ -66,7 +66,7 @@ async fn fails_for_nonexistent_user() {
#[tokio::test]
async fn returns_profile_with_avatar_banner_and_fields() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let uid = UserId::generate();
let user = User::from_persistence(
@@ -87,7 +87,7 @@ async fn returns_profile_with_avatar_banner_and_fields() {
}],
},
);
users.store.lock().unwrap().insert(uid.value(), user);
users.seed_user(user);
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let user_repo = b.user_repo.clone();

View File

@@ -3,7 +3,7 @@ use std::sync::Arc;
use domain::events::DomainEvent;
use domain::ports::UserRepository;
use domain::testing::{InMemoryUserRepository, NoopEventPublisher};
use domain::testing::{InMemoryStore, NoopEventPublisher};
use uuid::Uuid;
use crate::{
@@ -12,7 +12,7 @@ use crate::{
users::{commands::UpdateProfileCommand, deps::UpdateProfileDeps, update_profile},
};
async fn register_user(b: &TestContextBuilder, users: &Arc<InMemoryUserRepository>) -> Uuid {
async fn register_user(b: &TestContextBuilder, users: &Arc<InMemoryStore>) -> Uuid {
let reg_deps = RegisterDeps {
user: b.user_repo.clone(),
password_hasher: b.password_hasher.clone(),
@@ -32,7 +32,7 @@ async fn register_user(b: &TestContextBuilder, users: &Arc<InMemoryUserRepositor
#[tokio::test]
async fn updates_display_name() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let events = NoopEventPublisher::new();
let b = TestContextBuilder::new()
.with_users(Arc::clone(&users) as _)
@@ -64,7 +64,7 @@ async fn updates_display_name() {
#[tokio::test]
async fn rejects_invalid_avatar_content_type() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let deps = UpdateProfileDeps {
user: b.user_repo.clone(),
@@ -88,7 +88,7 @@ async fn rejects_invalid_avatar_content_type() {
#[tokio::test]
async fn uploads_avatar() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let events = NoopEventPublisher::new();
let b = TestContextBuilder::new()
.with_users(Arc::clone(&users) as _)
@@ -126,7 +126,7 @@ async fn uploads_avatar() {
#[tokio::test]
async fn uploads_banner() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let events = NoopEventPublisher::new();
let b = TestContextBuilder::new()
.with_users(Arc::clone(&users) as _)
@@ -185,7 +185,7 @@ async fn fails_for_nonexistent_user() {
#[tokio::test]
async fn rejects_invalid_banner_content_type() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let b = TestContextBuilder::new().with_users(Arc::clone(&users) as _);
let deps = UpdateProfileDeps {
user: b.user_repo.clone(),
@@ -209,7 +209,7 @@ async fn rejects_invalid_banner_content_type() {
#[tokio::test]
async fn text_only_update_emits_user_updated_no_image_stored() {
let users = InMemoryUserRepository::new();
let users = InMemoryStore::new();
let events = NoopEventPublisher::new();
let b = TestContextBuilder::new()
.with_users(Arc::clone(&users) as _)

View File

@@ -2,7 +2,7 @@ use std::sync::Arc;
use domain::events::DomainEvent;
use domain::models::ProfileField;
use domain::testing::{InMemoryProfileFieldsRepo, NoopEventPublisher};
use domain::testing::{InMemoryStore, NoopEventPublisher};
use uuid::Uuid;
use crate::{
@@ -14,7 +14,7 @@ use crate::{
#[tokio::test]
async fn saves_profile_fields() {
let fields_repo = InMemoryProfileFieldsRepo::new();
let fields_repo = InMemoryStore::new();
let events = NoopEventPublisher::new();
let b = TestContextBuilder::new()
.with_profile_fields(Arc::clone(&fields_repo) as _)

View File

@@ -1,7 +1,7 @@
use crate::test_support::update_user_settings_command;
use std::sync::Arc;
use domain::testing::InMemoryUserSettingsRepository;
use domain::testing::InMemoryStore;
use uuid::Uuid;
use crate::{
@@ -15,7 +15,7 @@ use crate::{
#[tokio::test]
async fn updates_federate_goals() {
let settings_repo = InMemoryUserSettingsRepository::new();
let settings_repo = InMemoryStore::new();
let b = TestContextBuilder::new().with_user_settings(Arc::clone(&settings_repo) as _);
let user_settings = b.user_settings_repo.clone();
let uid = Uuid::nil();
@@ -42,7 +42,7 @@ async fn updates_federate_goals() {
#[tokio::test]
async fn updates_federate_reviews() {
let settings_repo = InMemoryUserSettingsRepository::new();
let settings_repo = InMemoryStore::new();
let b = TestContextBuilder::new().with_user_settings(Arc::clone(&settings_repo) as _);
let user_settings = b.user_settings_repo.clone();
let uid = Uuid::nil();
@@ -69,7 +69,7 @@ async fn updates_federate_reviews() {
#[tokio::test]
async fn updates_federate_watchlist() {
let settings_repo = InMemoryUserSettingsRepository::new();
let settings_repo = InMemoryStore::new();
let b = TestContextBuilder::new().with_user_settings(Arc::clone(&settings_repo) as _);
let user_settings = b.user_settings_repo.clone();
let uid = Uuid::nil();