feat: enhance organization management; add member registration and validation, update user registration flow, and improve enum handling
Test / test (push) Successful in 16s
Test / test (pull_request) Successful in 14s

This commit is contained in:
k1nq
2025-11-29 08:50:11 +05:00
parent 994b400221
commit e7e3752888
11 changed files with 462 additions and 20 deletions
+51
View File
@@ -51,6 +51,57 @@ async def test_register_user_creates_organization_membership(
assert membership.role == OrganizationRole.OWNER
@pytest.mark.asyncio
async def test_register_user_without_organization_succeeds(
session_factory: async_sessionmaker[AsyncSession],
client: AsyncClient,
) -> None:
payload = {
"email": "solo-user@example.com",
"password": "StrongPass123!",
"name": "Solo User",
}
response = await client.post("/api/v1/auth/register", json=payload)
assert response.status_code == 201
async with session_factory() as session:
user = await session.scalar(select(User).where(User.email == payload["email"]))
assert user is not None
membership = await session.scalar(
select(OrganizationMember).where(OrganizationMember.user_id == user.id)
)
assert membership is None
@pytest.mark.asyncio
async def test_register_fails_when_organization_exists(
client: AsyncClient,
) -> None:
payload = {
"email": "owner-one@example.com",
"password": "StrongPass123!",
"name": "Owner One",
"organization_name": "Duplicate Org",
}
response = await client.post("/api/v1/auth/register", json=payload)
assert response.status_code == 201
duplicate_payload = {
"email": "owner-two@example.com",
"password": "StrongPass123!",
"name": "Owner Two",
"organization_name": "Duplicate Org",
}
duplicate_response = await client.post("/api/v1/auth/register", json=duplicate_payload)
assert duplicate_response.status_code == 409
assert duplicate_response.json()["detail"] == "Organization already exists"
@pytest.mark.asyncio
async def test_login_endpoint_returns_token_for_valid_credentials(
session_factory: async_sessionmaker[AsyncSession],