69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
import json
|
|
import pytest
|
|
from pathlib import Path
|
|
from datetime import datetime, timedelta, timezone
|
|
from unittest.mock import patch
|
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
from cryptography.hazmat.primitives import serialization
|
|
import jwt as pyjwt
|
|
|
|
|
|
@pytest.fixture()
|
|
def license_env(tmp_path):
|
|
"""Returns (private_pem, public_path, license_path) for tier integration tests."""
|
|
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
|
|
private_pem = private_key.private_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PrivateFormat.TraditionalOpenSSL,
|
|
encryption_algorithm=serialization.NoEncryption(),
|
|
)
|
|
public_pem = private_key.public_key().public_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
|
)
|
|
public_path = tmp_path / "public.pem"
|
|
public_path.write_bytes(public_pem)
|
|
license_path = tmp_path / "license.json"
|
|
return private_pem, public_path, license_path
|
|
|
|
|
|
def _write_jwt_license(license_path, private_pem, tier="paid", days=30):
|
|
now = datetime.now(timezone.utc)
|
|
token = pyjwt.encode({
|
|
"sub": "CFG-PRNG-TEST", "product": "peregrine", "tier": tier,
|
|
"iat": now, "exp": now + timedelta(days=days),
|
|
}, private_pem, algorithm="RS256")
|
|
license_path.write_text(json.dumps({"jwt": token, "grace_until": None}))
|
|
|
|
|
|
def test_effective_tier_free_without_license(tmp_path):
|
|
from app.wizard.tiers import effective_tier
|
|
tier = effective_tier(
|
|
profile=None,
|
|
license_path=tmp_path / "missing.json",
|
|
public_key_path=tmp_path / "key.pem",
|
|
)
|
|
assert tier == "free"
|
|
|
|
|
|
def test_effective_tier_paid_with_valid_license(license_env):
|
|
private_pem, public_path, license_path = license_env
|
|
_write_jwt_license(license_path, private_pem, tier="paid")
|
|
from app.wizard.tiers import effective_tier
|
|
tier = effective_tier(profile=None, license_path=license_path,
|
|
public_key_path=public_path)
|
|
assert tier == "paid"
|
|
|
|
|
|
def test_effective_tier_dev_override_takes_precedence(license_env):
|
|
"""dev_tier_override wins even when a valid license is present."""
|
|
private_pem, public_path, license_path = license_env
|
|
_write_jwt_license(license_path, private_pem, tier="paid")
|
|
|
|
class FakeProfile:
|
|
dev_tier_override = "premium"
|
|
|
|
from app.wizard.tiers import effective_tier
|
|
tier = effective_tier(profile=FakeProfile(), license_path=license_path,
|
|
public_key_path=public_path)
|
|
assert tier == "premium"
|