Skip to content

Add comprehensive unit and e2e test suite (193 tests)#148

Closed
dianaKhortiuk-frontegg wants to merge 1 commit into
masterfrom
add-comprehensive-test-suite
Closed

Add comprehensive unit and e2e test suite (193 tests)#148
dianaKhortiuk-frontegg wants to merge 1 commit into
masterfrom
add-comprehensive-test-suite

Conversation

@dianaKhortiuk-frontegg

Copy link
Copy Markdown
Collaborator

Summary

  • Adds 193 tests (162 unit + 31 e2e) covering the entire SDK surface — from FronteggConfig through token resolvers, cache services, and Flask/FastAPI secure access middleware
  • Test infrastructure uses a session-scoped RSA keypair with real RS256 signature verification (no PyJWT mocking), vendor session fakes, and singleton resetters for test isolation
  • Mirrors test patterns from the Node.js SDK (nodejs-sdk): access token resolver routing, cache hit/miss with {empty: True} negative caching sentinel, token-type mismatch detection, and "Api tokens are disabled" 403 handling
  • Live e2e tests hit the real Frontegg API (vendor auth, public key fetch, forged JWT rejection) and auto-skip when credentials are absent

Unit tests (22 files, 162 tests)

Area Files Tests
Config, context, exceptions, URLs, retry, package utils 6 23
Cache managers (local + Redis via fakeredis) 2 9
Authenticator (sync + async) 2 10
Identity mixin (sync + async) 2 21
Token resolvers (JWT + access token) 2 25
Access token services + cache services 2 22
Token type mismatch detection 1 8
HTTP client, audits client 2 8
Flask adapter (get_auth_header, wrapper) 2 7
FastAPI adapter (User model, wrapper) 2 12

E2E tests (3 files, 31 tests)

Area Tests
Flask secure access (mocked, real RSA JWTs) 8
FastAPI secure access (mocked, real RSA JWTs) 8
Live Frontegg API (vendor auth, public key, forged JWT rejection, Flask/FastAPI with live vendor token, HttpClient sync+async) 31

How to run

# Unit + mocked e2e (no credentials needed)
PYTHONPATH=. pytest tests/unit tests/e2e -v

# With live Frontegg API tests
FRONTEGG_TEST_CLIENT_ID=... FRONTEGG_TEST_API_KEY=... \
    PYTHONPATH=. pytest tests/unit tests/e2e -v

Test plan

  • All 193 tests pass locally (Python 3.9.6)
  • Live e2e tests verified against real Frontegg API
  • No production code changes — tests only
  • CI pipeline validation (may need test deps added to pyproject.toml)

🤖 Generated with Claude Code

Covers the entire SDK surface: config, context, authenticator (sync+async),
identity mixin (sync+async), token resolvers (JWT + access token), cache
services (local + Redis + negative caching), HTTP client, audits client,
Flask/FastAPI secure access decorators, and live API integration tests.

Test infrastructure includes session-scoped RSA keypair for real RS256
signature verification, vendor session fakes, and singleton resetters.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
dianaKhortiuk-frontegg added a commit that referenced this pull request Jul 14, 2026
Bring the comprehensive test suite from #148 into the 4.0.0 release:
26 unit test files plus 3 e2e files (Flask/FastAPI secure access and a
credential-gated live vendor-auth suite). The conftest mints real RS256
JWTs and fakes the vendor-token HTTP call so tests never hit the network.

- Verified against the 4.0.0 dependency set: passes on Python 3.13 /
  pytest 9 / Flask 3 / FastAPI + starlette 1.x / cryptography 49 / PyJWT
  2.13 -> 162 passed, 31 skipped (live vendor auth, needs credentials).
- Add fakeredis dev dependency (required by test_redis_cache_manager).
- Remove the obsolete proxy-era tests (test_functional.py,
  test_integration.py, and the send_audits VCR cassette) that exercised
  the proxy middleware removed in v2.0.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@dianaKhortiuk-frontegg

Copy link
Copy Markdown
Collaborator Author

Superseded by #150 — the full 193-test suite from this PR has been folded into the consolidated 4.0.0 PR, adapted to the new dependency stack (pytest 9 / Python 3.10+ / Flask 3 / FastAPI+starlette 1.x) and verified green (162 passed, 31 skipped). Thanks for the comprehensive coverage!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant