geo/backend/tests/test_models/test_organization.py

160 lines
5.3 KiB
Python

import uuid
from datetime import datetime
import pytest
from sqlalchemy import select
from app.models.organization import Organization, OrgMember
from app.models.user import User
from tests.fixtures.auth import _to_uuid
class TestOrganizationModel:
def test_organization_table_name(self):
assert Organization.__tablename__ == "organizations"
def test_org_member_table_name(self):
assert OrgMember.__tablename__ == "org_members"
def test_organization_has_required_fields(self):
fields = Organization.__table__.columns.keys()
assert "id" in fields
assert "name" in fields
assert "slug" in fields
assert "description" in fields
assert "logo_url" in fields
assert "plan" in fields
assert "max_members" in fields
assert "created_at" in fields
assert "updated_at" in fields
def test_org_member_has_required_fields(self):
fields = OrgMember.__table__.columns.keys()
assert "id" in fields
assert "organization_id" in fields
assert "user_id" in fields
assert "role" in fields
assert "joined_at" in fields
assert "invited_by" in fields
def test_organization_field_types(self):
columns = Organization.__table__.columns
id_type = str(columns["id"].type).upper()
assert "UUID" in id_type or "CHAR" in id_type
name_type = str(columns["name"].type).upper()
assert "VARCHAR" in name_type or "STRING" in name_type
slug_type = str(columns["slug"].type).upper()
assert "VARCHAR" in slug_type or "STRING" in slug_type
assert "INTEGER" in str(columns["max_members"].type).upper()
def test_org_member_field_types(self):
columns = OrgMember.__table__.columns
id_type = str(columns["id"].type).upper()
assert "UUID" in id_type or "CHAR" in id_type
org_id_type = str(columns["organization_id"].type).upper()
assert "UUID" in org_id_type or "CHAR" in org_id_type
user_id_type = str(columns["user_id"].type).upper()
assert "UUID" in user_id_type or "CHAR" in user_id_type
role_type = str(columns["role"].type).upper()
assert "VARCHAR" in role_type or "STRING" in role_type
def test_organization_relationships_defined(self):
relationships = Organization.__mapper__.relationships
rel_keys = relationships.keys()
assert "members" in rel_keys
assert "users" in rel_keys
def test_org_member_relationships_defined(self):
relationships = OrgMember.__mapper__.relationships
rel_keys = relationships.keys()
assert "organization" in rel_keys
assert "user" in rel_keys
@pytest.mark.asyncio
async def test_organization_create(self, async_session, test_user):
org = Organization(
id=uuid.uuid4(),
name="Test Org",
slug="test-org",
description="A test organization",
logo_url="https://example.com/logo.png",
plan="free",
max_members=5,
)
async_session.add(org)
await async_session.commit()
await async_session.refresh(org)
assert org.id is not None
assert org.name == "Test Org"
assert org.slug == "test-org"
assert org.description == "A test organization"
assert org.logo_url == "https://example.com/logo.png"
assert org.plan == "free"
assert org.max_members == 5
assert org.created_at is not None
assert org.updated_at is not None
@pytest.mark.asyncio
async def test_organization_default_values(self, async_session):
org = Organization(
name="Default Org",
slug="default-org",
)
async_session.add(org)
await async_session.commit()
await async_session.refresh(org)
assert org.plan == "free"
assert org.max_members == 5
assert org.description is None
assert org.logo_url is None
@pytest.mark.asyncio
async def test_org_member_create(self, async_session, test_user):
org = Organization(
name="Member Test Org",
slug="member-test-org",
)
async_session.add(org)
await async_session.commit()
await async_session.refresh(org)
member = OrgMember(
id=uuid.uuid4(),
organization_id=org.id,
user_id=test_user.id,
role="admin",
)
async_session.add(member)
await async_session.commit()
await async_session.refresh(member)
assert member.id is not None
assert member.organization_id == org.id
assert member.user_id == test_user.id
assert member.role == "admin"
assert member.joined_at is not None
@pytest.mark.asyncio
async def test_org_member_default_role(self, async_session, test_user):
org = Organization(
name="Role Test Org",
slug="role-test-org",
)
async_session.add(org)
await async_session.commit()
await async_session.refresh(org)
member = OrgMember(
organization_id=org.id,
user_id=test_user.id,
)
async_session.add(member)
await async_session.commit()
await async_session.refresh(member)
assert member.role == "viewer"
assert member.invited_by is None