Initial commit: import from sinmb79/Gov-chat-bot
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
import jwt
|
||||
import pytest
|
||||
|
||||
from app.core.security import (
|
||||
hash_password,
|
||||
verify_password,
|
||||
create_admin_token,
|
||||
create_system_token,
|
||||
decode_token,
|
||||
)
|
||||
from app.core.config import settings
|
||||
|
||||
|
||||
def test_hash_and_verify_password():
|
||||
"""해싱 후 verify True, 다른 비밀번호는 False."""
|
||||
hashed = hash_password("secret123")
|
||||
assert verify_password("secret123", hashed) is True
|
||||
assert verify_password("wrong", hashed) is False
|
||||
|
||||
|
||||
def test_create_admin_token_has_tenant_id():
|
||||
"""decode 시 payload['tenant_id'] == 'tenant-id', type == 'admin_user'."""
|
||||
token = create_admin_token("user-1", "tenant-id", "admin")
|
||||
payload = decode_token(token)
|
||||
assert payload is not None
|
||||
assert payload["tenant_id"] == "tenant-id"
|
||||
assert payload["type"] == "admin_user"
|
||||
|
||||
|
||||
def test_create_system_token_has_no_tenant_id():
|
||||
"""decode 시 payload['tenant_id'] is None, type == 'system_admin'."""
|
||||
token = create_system_token("sys-admin-1")
|
||||
payload = decode_token(token)
|
||||
assert payload is not None
|
||||
assert payload["tenant_id"] is None
|
||||
assert payload["type"] == "system_admin"
|
||||
|
||||
|
||||
def test_decode_invalid_token_returns_none():
|
||||
"""decode_token('invalid.token') == None."""
|
||||
assert decode_token("invalid.token") is None
|
||||
|
||||
|
||||
def test_decode_expired_token_returns_none():
|
||||
"""만료 토큰 생성 후 decode == None."""
|
||||
payload = {
|
||||
"sub": "user-1",
|
||||
"tenant_id": "tenant-1",
|
||||
"exp": datetime.now(timezone.utc) - timedelta(seconds=1),
|
||||
}
|
||||
expired_token = jwt.encode(payload, settings.SECRET_KEY, algorithm="HS256")
|
||||
assert decode_token(expired_token) is None
|
||||
|
||||
|
||||
def test_admin_and_system_token_different_type():
|
||||
"""두 토큰의 type 필드 값 다름."""
|
||||
admin_token = create_admin_token("user-1", "tenant-1", "admin")
|
||||
system_token = create_system_token("sys-1")
|
||||
|
||||
admin_payload = decode_token(admin_token)
|
||||
system_payload = decode_token(system_token)
|
||||
|
||||
assert admin_payload["type"] != system_payload["type"]
|
||||
Reference in New Issue
Block a user