// ABOUTME: Integration test for tenant context resolution to verify factory delegation works
// ABOUTME: Tests that tenant operations work through the factory pattern (critical fix for 0% functional architecture)
//
// SPDX-License-Identifier: MIT OR Apache-2.0
// Copyright (c) 2025 Pierre Fitness Intelligence
#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
#![allow(missing_docs)]
use chrono::Utc;
#[cfg(feature = "postgresql")]
use pierre_mcp_server::config::environment::PostgresPoolConfig;
use pierre_mcp_server::{
database_plugins::{factory::Database, DatabaseProvider},
models::Tenant,
};
use uuid::Uuid;
mod common;
use common::*;
#[tokio::test]
async fn test_tenant_operations_work_through_factory() {
// Create test database
let database_url = "sqlite::memory:";
let encryption_key = vec![0u8; 32];
#[cfg(feature = "postgresql")]
let database = Database::new(database_url, encryption_key, &PostgresPoolConfig::default())
.await
.unwrap();
#[cfg(not(feature = "postgresql"))]
let database = Database::new(database_url, encryption_key).await.unwrap();
// Create owner user first (required for tenant foreign key constraint)
let (owner_id, _owner) = create_test_user_with_email(&database, "owner@example.com")
.await
.unwrap();
// Create test tenant
let tenant_id = Uuid::new_v4();
let tenant = Tenant {
id: tenant_id,
name: "Test Tenant".to_owned(),
slug: "test-tenant".to_owned(),
domain: None,
plan: "starter".to_owned(),
owner_user_id: owner_id,
created_at: Utc::now(),
updated_at: Utc::now(),
};
// CRITICAL TEST: This should NOT fail with "Tenant management not yet implemented"
database.create_tenant(&tenant).await.unwrap();
// CRITICAL TEST: get_tenant_by_id should work (was previously stubbed)
let retrieved_tenant = database.get_tenant_by_id(tenant_id).await.unwrap();
assert_eq!(retrieved_tenant.id, tenant_id);
assert_eq!(retrieved_tenant.name, "Test Tenant");
assert_eq!(retrieved_tenant.slug, "test-tenant");
// CRITICAL TEST: get_tenant_by_slug should work (was previously stubbed)
let retrieved_by_slug = database.get_tenant_by_slug("test-tenant").await.unwrap();
assert_eq!(retrieved_by_slug.id, tenant_id);
println!("SUCCESS: Factory delegation is FIXED!");
println!(" - create_tenant() works (was stubbed)");
println!(" - get_tenant_by_id() works (was stubbed)");
println!(" - get_tenant_by_slug() works (was stubbed)");
println!(" Tenant-aware MCP architecture is now FUNCTIONAL!");
}