* chore: improved pat permissions * fix: err message * fix: removed permission from backend * [WEB-4330] refactor: update API token endpoints to use user context instead of workspace slug - Changed URL patterns for API token endpoints to use "users/api-tokens/" instead of "workspaces/<str:slug>/api-tokens/". - Refactored ApiTokenEndpoint methods to remove workspace slug parameter and adjust database queries accordingly. - Added new test cases for API token creation, retrieval, deletion, and updates, including support for bot users and minimal data submissions. * fix: removed workspace slug from api-tokens * fix: refactor * chore: url.py code rabbit suggestion * fix: APITokenService moved to package --------- Co-authored-by: Dheeraj Kumar Ketireddy <dheeru0198@gmail.com> Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
120 lines
3 KiB
Python
120 lines
3 KiB
Python
import pytest
|
|
from django.conf import settings
|
|
from rest_framework.test import APIClient
|
|
from pytest_django.fixtures import django_db_setup
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
from plane.db.models import User
|
|
from plane.db.models.api import APIToken
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def django_db_setup(django_db_setup):
|
|
"""Set up the Django database for the test session"""
|
|
pass
|
|
|
|
|
|
@pytest.fixture
|
|
def api_client():
|
|
"""Return an unauthenticated API client"""
|
|
return APIClient()
|
|
|
|
|
|
@pytest.fixture
|
|
def user_data():
|
|
"""Return standard user data for tests"""
|
|
return {
|
|
"email": "test@plane.so",
|
|
"password": "test-password",
|
|
"first_name": "Test",
|
|
"last_name": "User",
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def create_user(db, user_data):
|
|
"""Create and return a user instance"""
|
|
user = User.objects.create(
|
|
email=user_data["email"],
|
|
first_name=user_data["first_name"],
|
|
last_name=user_data["last_name"],
|
|
)
|
|
user.set_password(user_data["password"])
|
|
user.save()
|
|
return user
|
|
|
|
|
|
@pytest.fixture
|
|
def api_token(db, create_user):
|
|
"""Create and return an API token for testing the external API"""
|
|
token = APIToken.objects.create(
|
|
user=create_user,
|
|
label="Test API Token",
|
|
token="test-api-token-12345",
|
|
)
|
|
return token
|
|
|
|
|
|
@pytest.fixture
|
|
def api_key_client(api_client, api_token):
|
|
"""Return an API key authenticated client for external API testing"""
|
|
api_client.credentials(HTTP_X_API_KEY=api_token.token)
|
|
return api_client
|
|
|
|
|
|
@pytest.fixture
|
|
def session_client(api_client, create_user):
|
|
"""Return a session authenticated API client for app API testing, which is what plane.app uses"""
|
|
api_client.force_authenticate(user=create_user)
|
|
return api_client
|
|
|
|
|
|
@pytest.fixture
|
|
def create_bot_user(db):
|
|
"""Create and return a bot user instance"""
|
|
from uuid import uuid4
|
|
|
|
unique_id = uuid4().hex[:8]
|
|
user = User.objects.create(
|
|
email=f"bot-{unique_id}@plane.so",
|
|
username=f"bot_user_{unique_id}",
|
|
first_name="Bot",
|
|
last_name="User",
|
|
is_bot=True,
|
|
)
|
|
user.set_password("bot@123")
|
|
user.save()
|
|
return user
|
|
|
|
|
|
@pytest.fixture
|
|
def api_token_data():
|
|
"""Return sample API token data for testing"""
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
|
|
return {
|
|
"label": "Test API Token",
|
|
"description": "Test description for API token",
|
|
"expired_at": (timezone.now() + timedelta(days=30)).isoformat(),
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def create_api_token_for_user(db, create_user):
|
|
"""Create and return an API token for a specific user"""
|
|
return APIToken.objects.create(
|
|
label="Test Token",
|
|
description="Test token description",
|
|
user=create_user,
|
|
user_type=0,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def plane_server(live_server):
|
|
"""
|
|
Renamed version of live_server fixture to avoid name clashes.
|
|
Returns a live Django server for testing HTTP requests.
|
|
"""
|
|
return live_server
|