feat: enhance organization management; add member registration and validation, update user registration flow, and improve enum handling
This commit is contained in:
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user