e188922c0f
- REGISTRATION ortam değişkeni: invite_only (varsayılan) | open - invite_only: ilk hane serbest, sonrasında yalnızca davet koduyla katılım - Backend'de zorunlu: 403 registration_closed; GET /api/auth/registration - Kayıt ekranı: kayıt kapalıyken yalnızca davet kodu ve açıklama - Entegrasyon testleri: kayıt politikası (2) - Prettier ayarı eklendi (proje stiliyle uyumlu), kaynaklar biçimlendirildi Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
//! Kayıt politikası: REGISTRATION=invite_only (varsayılan).
|
||
|
||
mod common;
|
||
|
||
use axum::http::{Method, StatusCode};
|
||
use common::TestApp;
|
||
use kakeibo::config::RegistrationMode;
|
||
use serde_json::json;
|
||
|
||
async fn new_household_allowed(app: &TestApp) -> bool {
|
||
let (st, body, _) = app
|
||
.send(Method::GET, "/auth/registration", None, None)
|
||
.await;
|
||
assert_eq!(st, StatusCode::OK);
|
||
body["new_household_allowed"].as_bool().unwrap()
|
||
}
|
||
|
||
#[tokio::test]
|
||
async fn invite_only_allows_first_household_then_only_invites() {
|
||
let app = TestApp::with_registration(RegistrationMode::InviteOnly).await;
|
||
|
||
// Boş sistem: ilk kurulum serbest
|
||
assert!(new_household_allowed(&app).await);
|
||
let owner = app.register("Sahip", None).await;
|
||
|
||
// Artık yeni hane kurulamaz (arayüz bilgisi + API zorunluluğu)
|
||
assert!(!new_household_allowed(&app).await);
|
||
let (st, body, _) = app
|
||
.send(
|
||
Method::POST,
|
||
"/auth/register",
|
||
None,
|
||
Some(
|
||
json!({ "name": "Yabancı", "email": "yabanci@test.com", "password": "sifre12345" }),
|
||
),
|
||
)
|
||
.await;
|
||
assert_eq!(st, StatusCode::FORBIDDEN);
|
||
assert_eq!(body["error"]["code"], "registration_closed");
|
||
|
||
// Davetle katılım serbest
|
||
let (_, inv) = app.post("/household/invites", &owner, json!({})).await;
|
||
let member = app
|
||
.register("Es", Some(inv["code"].as_str().unwrap()))
|
||
.await;
|
||
assert_eq!(member.household_id, owner.household_id);
|
||
|
||
// Geçersiz davet kodu yine 400 (politika hatası değil)
|
||
let (st, _, _) = app
|
||
.send(
|
||
Method::POST,
|
||
"/auth/register",
|
||
None,
|
||
Some(json!({ "name": "X", "email": "x@test.com", "password": "sifre12345", "invite_code": "ZZZZZZZZ" })),
|
||
)
|
||
.await;
|
||
assert_eq!(st, StatusCode::BAD_REQUEST);
|
||
|
||
app.cleanup().await;
|
||
}
|
||
|
||
#[tokio::test]
|
||
async fn open_mode_allows_many_households() {
|
||
let app = TestApp::with_registration(RegistrationMode::Open).await;
|
||
let a = app.register("A", None).await;
|
||
let b = app.register("B", None).await;
|
||
assert_ne!(a.household_id, b.household_id);
|
||
assert!(new_household_allowed(&app).await);
|
||
app.cleanup().await;
|
||
}
|