77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
import pytest
|
|
import uuid
|
|
from fastapi import HTTPException
|
|
from sqlalchemy import orm
|
|
|
|
from agentops.opsboard.models import (
|
|
OrgModel,
|
|
UserOrgModel,
|
|
ProjectModel,
|
|
OrgRoles,
|
|
Environment,
|
|
)
|
|
from agentops.opsboard.views.projects import (
|
|
regenerate_api_key,
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_regenerate_api_key_not_admin(mock_request, orm_session, test_user):
|
|
"""Test regenerating a project's API key without admin permissions."""
|
|
# Create all the test data in this test
|
|
org = OrgModel(name="Test Org for Non-Admin Regenerate Key")
|
|
orm_session.add(org)
|
|
orm_session.flush()
|
|
|
|
# Create a user-org relationship with developer role (not admin or owner)
|
|
user_org = UserOrgModel(
|
|
user_id=test_user.id,
|
|
org_id=org.id,
|
|
role=OrgRoles.developer, # Developer role, not admin or owner
|
|
user_email=test_user.email
|
|
)
|
|
orm_session.add(user_org)
|
|
orm_session.flush()
|
|
|
|
# Create a project with a specific API key
|
|
initial_api_key = uuid.uuid4()
|
|
project = ProjectModel(
|
|
name="Project for Non-Admin Key Regeneration",
|
|
org_id=org.id,
|
|
environment=Environment.development,
|
|
api_key=initial_api_key,
|
|
)
|
|
orm_session.add(project)
|
|
orm_session.flush()
|
|
|
|
# Load relationships to ensure they're available
|
|
project = (
|
|
orm_session.query(ProjectModel)
|
|
.options(orm.joinedload(ProjectModel.org).joinedload(OrgModel.users))
|
|
.filter_by(id=project.id)
|
|
.one()
|
|
)
|
|
|
|
# Expect an HTTP 404 exception (security through obscurity)
|
|
with pytest.raises(HTTPException) as excinfo:
|
|
regenerate_api_key(request=mock_request, project_id=str(project.id), orm=orm_session)
|
|
|
|
assert excinfo.value.status_code == 404
|
|
assert excinfo.value.detail == "Project not found"
|
|
|
|
# Verify the API key wasn't changed
|
|
unchanged_project = orm_session.query(ProjectModel).filter_by(id=project.id).one()
|
|
assert unchanged_project.api_key == initial_api_key
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_regenerate_api_key_project_not_found(mock_request, orm_session):
|
|
"""Test regenerating an API key for a project that doesn't exist."""
|
|
non_existent_id = str(uuid.uuid4())
|
|
|
|
# Expect an HTTP 404 exception
|
|
with pytest.raises(HTTPException) as excinfo:
|
|
regenerate_api_key(request=mock_request, project_id=non_existent_id, orm=orm_session)
|
|
|
|
assert excinfo.value.status_code == 404
|
|
assert excinfo.value.detail == "Project not found" |