Files
oicd/docs/TESTING.md
2025-11-30 00:07:24 +01:00

61 lines
2.8 KiB
Markdown

# Testing Guide
This document outlines the current testing strategy for the OIDC server and provides instructions on how to perform tests.
## Overview
Currently, the project relies on manual testing using a simple Flask-based OIDC client application (`test_client.py`). This test client is designed to simulate a real-world application and allows you to walk through the entire OIDC Authorization Code Flow.
There is not yet a suite of automated unit or integration tests. Adding a formal testing framework like PyTest is a key goal for future development (see `TODO.md`).
## Running the Test Client
The test client is a separate Flask application that runs on port `8080`. To use it, you need to have both the main OIDC server and the test client running at the same time.
### Step 1: Run the OIDC Server
In one terminal, start the main OIDC server (either with Docker or locally). For testing, it's easiest to run it locally:
```bash
# In your first terminal
export FLASK_APP=oidc_server.py
export FLASK_ENV=development
# Make sure your database is up-to-date
flask db upgrade
flask seed
# Run the OIDC server (defaults to port 5000)
flask run
```
### Step 2: Run the Test Client
The test client is pre-configured to work with the default settings of the OIDC server running on `localhost:5000`.
In a second terminal, run the `test_client.py` application:
```bash
# In your second terminal
python3 test_client.py
```
This will start the test client on `http://localhost:8080`.
### Step 3: Perform the Test
1. **Open your browser** and navigate to the test client's URL: `http://localhost:8080`.
2. **Click the "Mit OIDC einloggen" button.** This will redirect you to the OIDC server's login page.
3. **Log in** with one of the test user accounts (e.g., `test` / `test123`).
4. **Successful Login**: After a successful login, the OIDC server will redirect you back to the test client's callback URL (`/callback`).
5. **Token Exchange**: The test client will automatically exchange the received authorization code for an access token and an ID token.
6. **View Results**: The test client's homepage will now display the user information retrieved from the `/userinfo` endpoint, as well as the contents of the access token and the ID token.
This process allows you to manually verify that the entire OIDC flow is working as expected.
## Future Improvements
- **Automated Integration Tests**: The `test_client.py` could be extended to make automated requests and assertions instead of requiring manual browser interaction.
- **Unit Tests**: A suite of unit tests should be created to test individual functions and components in isolation (e.g., model logic, specific OIDC validation rules).
- **PyTest Framework**: The project should adopt the PyTest framework for writing and running tests in a structured way.