mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-02 18:17:11 +09:00
Centralize backup schedule calculations and shared request/form flows, encode query values, and move repository finalization into its service. Add browser CI coverage, repair stale test fixtures, and provide opt-in request and build measurement tools.
61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
"""Shared protocol/actor/host helpers retain their callers' contracts."""
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
import pytest
|
|
from flask import g
|
|
from flask_jwt_extended import verify_jwt_in_request
|
|
|
|
from app.services.cf_ops_change_service import CfOpsChangeService
|
|
from app.services.connect_format import iso_datetime
|
|
from app.services.resource_tier_service import ResourceTierService
|
|
from app.services.shared_resource_service import _current_user_id
|
|
from app.utils.actor import current_actor_id
|
|
from factories import make_user, headers_for
|
|
|
|
|
|
@pytest.mark.parametrize('lookup', [current_actor_id, _current_user_id, CfOpsChangeService._current_user_id])
|
|
def test_optional_actor_without_request(lookup):
|
|
assert lookup() is None
|
|
|
|
|
|
@pytest.mark.parametrize('kind', ['jwt', 'api-key'])
|
|
def test_shared_actor_preserves_authenticated_owner(app, db_session, kind):
|
|
user = make_user(db_session, role='admin', username=f'actor-{kind}')
|
|
headers = {}
|
|
if kind == 'jwt':
|
|
headers = headers_for(str(user.id))
|
|
with app.test_request_context(headers=headers):
|
|
if kind == 'jwt':
|
|
verify_jwt_in_request()
|
|
else:
|
|
g.api_key_user = user
|
|
assert current_actor_id() == user.id
|
|
assert _current_user_id() == user.id
|
|
assert CfOpsChangeService._current_user_id() == user.id
|
|
|
|
|
|
def test_actor_lookup_failure_remains_best_effort(monkeypatch):
|
|
def unavailable():
|
|
raise RuntimeError('identity unavailable')
|
|
monkeypatch.setattr('app.middleware.rbac.get_current_user', unavailable)
|
|
assert current_actor_id() is None
|
|
|
|
|
|
@pytest.mark.parametrize('value,expected', [
|
|
(None, None), ('already formatted', 'already formatted'), (123, None),
|
|
(datetime(2026, 9, 5), '2026-09-05T00:00:00+00:00'),
|
|
(datetime(2026, 9, 5, tzinfo=timezone(timedelta(hours=2))), '2026-09-05T00:00:00+02:00'),
|
|
])
|
|
def test_connect_date_serialization(value, expected):
|
|
from app.services.connect_policy import _iso as policy_iso
|
|
from app.services.connect_storage import _iso as storage_iso
|
|
assert iso_datetime(value) == expected
|
|
assert policy_iso(value) == expected
|
|
assert storage_iso(value) == expected
|
|
|
|
|
|
@pytest.mark.parametrize('container', [None, 'docker', 'lxc', 'openvz'])
|
|
def test_resource_tier_uses_host_inventory_detection(monkeypatch, container):
|
|
monkeypatch.setattr('app.services.host_inventory_service._detect_container', lambda: container)
|
|
assert ResourceTierService._detect_container() == container
|