fed8b2eed7
Backend release / release (push) Waiting to run
Bandit Security Scan / bandit_scan (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / manifest (push) Blocked by required conditions
Build and push DocsGPT FE Docker image for development / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / manifest (push) Blocked by required conditions
Python linting / ruff (push) Waiting to run
Run python tests with pytest / Run tests and count coverage (3.12) (push) Waiting to run
React Widget Build / build (push) Waiting to run
167 lines
3.7 KiB
Python
167 lines
3.7 KiB
Python
|
|
import pytest
|
|
from flask import Flask
|
|
|
|
|
|
@pytest.fixture
|
|
def app():
|
|
app = Flask(__name__)
|
|
return app
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestGetUserId:
|
|
pass
|
|
|
|
def test_returns_user_id_from_decoded_token(self, app):
|
|
from application.api.user.utils import get_user_id
|
|
|
|
with app.test_request_context():
|
|
from flask import request
|
|
|
|
request.decoded_token = {"sub": "user_123"}
|
|
assert get_user_id() == "user_123"
|
|
|
|
def test_returns_none_when_no_decoded_token(self, app):
|
|
from application.api.user.utils import get_user_id
|
|
|
|
with app.test_request_context():
|
|
assert get_user_id() is None
|
|
|
|
def test_returns_none_when_decoded_token_has_no_sub(self, app):
|
|
from application.api.user.utils import get_user_id
|
|
|
|
with app.test_request_context():
|
|
from flask import request
|
|
|
|
request.decoded_token = {}
|
|
assert get_user_id() is None
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestRequireAuth:
|
|
pass
|
|
|
|
def test_allows_authenticated_request(self, app):
|
|
from application.api.user.utils import require_auth
|
|
|
|
@require_auth
|
|
def protected():
|
|
return "ok"
|
|
|
|
with app.test_request_context():
|
|
from flask import request
|
|
|
|
request.decoded_token = {"sub": "user_123"}
|
|
assert protected() == "ok"
|
|
|
|
def test_returns_401_when_unauthenticated(self, app):
|
|
from application.api.user.utils import require_auth
|
|
|
|
@require_auth
|
|
def protected():
|
|
return "ok"
|
|
|
|
with app.test_request_context():
|
|
result = protected()
|
|
assert result.status_code == 401
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestSuccessResponse:
|
|
pass
|
|
|
|
def test_default_success_response(self, app):
|
|
from application.api.user.utils import success_response
|
|
|
|
with app.app_context():
|
|
resp = success_response()
|
|
assert resp.status_code == 200
|
|
assert resp.json["success"] is True
|
|
|
|
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestErrorResponse:
|
|
pass
|
|
|
|
def test_error_response_custom_status(self, app):
|
|
from application.api.user.utils import error_response
|
|
|
|
with app.app_context():
|
|
resp = error_response("Not found", 404)
|
|
assert resp.status_code == 404
|
|
|
|
def test_error_response_extra_kwargs(self, app):
|
|
from application.api.user.utils import error_response
|
|
|
|
with app.app_context():
|
|
resp = error_response("Bad", 400, errors=["field1", "field2"])
|
|
assert resp.json["errors"] == ["field1", "field2"]
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestValidateObjectId:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestValidatePagination:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestCheckResourceOwnership:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestSerializeObjectId:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestSerializeList:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestRequireFields:
|
|
pass
|
|
|
|
def test_allows_valid_request(self, app):
|
|
from application.api.user.utils import require_fields
|
|
|
|
@require_fields(["name", "email"])
|
|
def handler():
|
|
return "ok"
|
|
|
|
with app.test_request_context(
|
|
"/", method="POST", json={"name": "Alice", "email": "a@b.com"}
|
|
):
|
|
assert handler() == "ok"
|
|
|
|
|
|
def test_rejects_empty_body(self, app):
|
|
from application.api.user.utils import require_fields
|
|
|
|
@require_fields(["name"])
|
|
def handler():
|
|
return "ok"
|
|
|
|
with app.test_request_context(
|
|
"/", method="POST", json={}
|
|
):
|
|
result = handler()
|
|
assert result.status_code == 400
|
|
|
|
|
|
@pytest.mark.unit
|
|
class TestSafeDbOperation:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestValidateEnum:
|
|
pass
|
|
|
|
@pytest.mark.unit
|
|
class TestExtractSortParams:
|
|
pass
|
|
|