# moneyadviceservice/pdp-test-harness architecture

> Architecture diagram of the GitHub repository moneyadviceservice/pdp-test-harness, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/moneyadviceservice/pdp-test-harness
- Repository: https://github.com/moneyadviceservice/pdp-test-harness

## Overview

PDP C&A Stub is a Spring REST simulator for system tests. A client requests tokens, registers resources, obtains permissions, and introspects tokens; the README also documents configuration, service-availability and view-response behavior. Controllers implement API interfaces and delegate stub logic to services, which authenticate requests, use JWT logic, and access embedded H2 persistence. The graph includes documented API branches and sampled service relationships; unsampled controller wiring is shown only where README or index evidence supports it.

Main entry points: [`src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java`](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java) (User repository), [`src/main/java/uk/org/ca/stub/simulator/service/PermService.java`](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/PermService.java) (Permission service), [`src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java`](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java) (Introspection service), [`src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java`](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java) (Resource repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_token["Token endpoint"]
  node_register["Resource registration"]
  node_permission["Permission endpoint"]
  node_introspect["Introspection endpoint"]
  node_config["Configuration endpoint"]
  node_availability["Availability endpoint"]
  node_viewresponse["View response endpoint"]
end

subgraph group_logic["Stub Logic"]
  node_tokenservice["Token service<br/>[TokenService.java]"]
  node_registerservice["Registration service"]
  node_permservice["Permission service<br/>[PermService.java]"]
  node_introspectservice["Introspection service"]
  node_jwt["JWT operations<br/>[JwtService.java]"]
  node_auth["PAT authentication"]
  node_configurationservice["Configuration service"]
end

subgraph group_data["Persistence"]
  node_resourceentity[("Registered resources")]
  node_userentity[("Users<br/>[User.java]")]
  node_resourcerepo["Resource repository"]
  node_userrepo["User repository"]
end

subgraph group_support["API Support"]
  node_responses["API models"]
  node_errors["Exception handling"]
end

node_client(("API client"))

node_client -->|"requests token"| node_token
node_client -->|"registers resource"| node_register
node_client -->|"requests permission"| node_permission
node_client -->|"introspects token"| node_introspect
node_token -->|"delegates to"| node_tokenservice
node_register -.->|"delegates to"| node_registerservice
node_permission -.->|"delegates to"| node_permservice
node_introspect -.->|"delegates to"| node_introspectservice
node_availability -->|"uses configuration"| node_configurationservice
node_viewresponse -->|"uses configuration"| node_configurationservice
node_registerservice -->|"reads and writes"| node_resourcerepo
node_registerservice -->|"validates PAT"| node_userrepo
node_permservice -->|"finds resource"| node_resourcerepo
node_permservice -->|"validates PAT"| node_userrepo
node_permservice -->|"generates PMT"| node_jwt
node_introspectservice -->|"looks up resource"| node_resourcerepo
node_introspectservice -->|"validates PAT"| node_userrepo
node_introspectservice -->|"validates and parses"| node_jwt
node_auth -->|"checks stored PAT"| node_userrepo
node_resourcerepo -->|"persists"| node_resourceentity
node_userrepo -->|"persists"| node_userentity
node_token -.->|"returns API models"| node_responses
node_errors -->|"formats problem details"| node_responses

click node_token "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/TokenApiController.java"
click node_register "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/RreguriApiController.java"
click node_permission "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/PermApiController.java"
click node_introspect "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/IntrospectApiController.java"
click node_config "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ConfigurationApiController.java"
click node_availability "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ServiceAvailabilityApiController.java"
click node_viewresponse "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ViewResponseApiController.java"
click node_tokenservice "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/TokenService.java"
click node_registerservice "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/RegisterService.java"
click node_permservice "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/PermService.java"
click node_introspectservice "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java"
click node_jwt "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/JwtService.java"
click node_auth "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/AbstractAuthenticatedService.java"
click node_configurationservice "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/ConfigurationService.java"
click node_resourceentity "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/entity/RegisteredResource.java"
click node_userentity "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/entity/User.java"
click node_resourcerepo "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java"
click node_userrepo "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java"
click node_responses "https://github.com/moneyadviceservice/pdp-test-harness/tree/main/src/main/java/uk/org/ca/stub/simulator/rest/model"
click node_errors "https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/exception/GeneralExceptionHandler.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_token,node_register,node_permission,node_introspect,node_config,node_availability,node_viewresponse,node_client toneBlue
class node_tokenservice,node_registerservice,node_permservice,node_introspectservice,node_jwt,node_auth,node_configurationservice toneAmber
class node_resourceentity,node_userentity,node_resourcerepo,node_userrepo toneMint
class node_responses,node_errors toneRose
```

## Components

### REST API

- [Token endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/TokenApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/TokenApiController.java`
- [Resource registration](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/RreguriApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/RreguriApiController.java`
- [Permission endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/PermApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/PermApiController.java`
- [Introspection endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/IntrospectApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/IntrospectApiController.java`
- [Configuration endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ConfigurationApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/ConfigurationApiController.java`
- [Availability endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ServiceAvailabilityApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/ServiceAvailabilityApiController.java`
- [View response endpoint](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/controller/ViewResponseApiController.java): `src/main/java/uk/org/ca/stub/simulator/rest/controller/ViewResponseApiController.java`

### Stub Logic

- [Token service](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/TokenService.java): `src/main/java/uk/org/ca/stub/simulator/service/TokenService.java`
- [Registration service](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/RegisterService.java): `src/main/java/uk/org/ca/stub/simulator/service/RegisterService.java`
- [Permission service](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/PermService.java): `src/main/java/uk/org/ca/stub/simulator/service/PermService.java`
- [Introspection service](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java): `src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java`
- [JWT operations](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/JwtService.java): `src/main/java/uk/org/ca/stub/simulator/service/JwtService.java`
- [PAT authentication](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/AbstractAuthenticatedService.java): `src/main/java/uk/org/ca/stub/simulator/service/AbstractAuthenticatedService.java`
- [Configuration service](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/service/ConfigurationService.java): `src/main/java/uk/org/ca/stub/simulator/service/ConfigurationService.java`

### Persistence

- [Registered resources](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/entity/RegisteredResource.java): `src/main/java/uk/org/ca/stub/simulator/entity/RegisteredResource.java`
- [Users](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/entity/User.java): `src/main/java/uk/org/ca/stub/simulator/entity/User.java`
- [Resource repository](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java): `src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java`
- [User repository](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java): `src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java`

### API Support

- [API models](https://github.com/moneyadviceservice/pdp-test-harness/tree/main/src/main/java/uk/org/ca/stub/simulator/rest/model): `src/main/java/uk/org/ca/stub/simulator/rest/model`
- [Exception handling](https://github.com/moneyadviceservice/pdp-test-harness/blob/main/src/main/java/uk/org/ca/stub/simulator/rest/exception/GeneralExceptionHandler.java): `src/main/java/uk/org/ca/stub/simulator/rest/exception/GeneralExceptionHandler.java`

### Other components

- **API client**

## Connections

- API client → Token endpoint: requests token (evidence: `README.md`)
- API client → Resource registration: registers resource (evidence: `README.md`)
- API client → Permission endpoint: requests permission (evidence: `README.md`)
- API client → Introspection endpoint: introspects token (evidence: `README.md`)
- Token endpoint → Token service: delegates to (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/TokenApiController.java`)
- Resource registration → Registration service: delegates to (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/RreguriApiController.java`)
- Permission endpoint → Permission service: delegates to (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/PermApiController.java`)
- Introspection endpoint → Introspection service: delegates to (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/IntrospectApiController.java`)
- Availability endpoint → Configuration service: uses configuration (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/ServiceAvailabilityApiController.java`)
- View response endpoint → Configuration service: uses configuration (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/ViewResponseApiController.java`)
- Registration service → Resource repository: reads and writes (evidence: `src/main/java/uk/org/ca/stub/simulator/service/RegisterService.java`)
- Registration service → User repository: validates PAT (evidence: `src/main/java/uk/org/ca/stub/simulator/service/RegisterService.java`)
- Permission service → Resource repository: finds resource (evidence: `src/main/java/uk/org/ca/stub/simulator/service/PermService.java`)
- Permission service → User repository: validates PAT (evidence: `src/main/java/uk/org/ca/stub/simulator/service/PermService.java`)
- Permission service → JWT operations: generates PMT (evidence: `src/main/java/uk/org/ca/stub/simulator/service/PermService.java`)
- Introspection service → Resource repository: looks up resource (evidence: `src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java`)
- Introspection service → User repository: validates PAT (evidence: `src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java`)
- Introspection service → JWT operations: validates and parses (evidence: `src/main/java/uk/org/ca/stub/simulator/service/IntrospectService.java`)
- PAT authentication → User repository: checks stored PAT (evidence: `src/main/java/uk/org/ca/stub/simulator/service/AbstractAuthenticatedService.java`)
- Resource repository → Registered resources: persists (evidence: `src/main/java/uk/org/ca/stub/simulator/repository/ResourceRepository.java`)
- User repository → Users: persists (evidence: `src/main/java/uk/org/ca/stub/simulator/repository/UserRepository.java`)
- Token endpoint → API models: returns API models (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/controller/TokenApiController.java`)
- Exception handling → API models: formats problem details (evidence: `src/main/java/uk/org/ca/stub/simulator/rest/exception/GeneralExceptionHandler.java`)
