Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions apps/admin/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Admin App Test Data

This directory contains resources for development of the admin UI.
It includes mock data used by `installTestApi` in `libs/ui` to
patch the custom `HttpResourceApi` so calls to `/users` return
predefined data. Import and invoke `installTestApi()` during
testing or local development before any HTTP requests are made.
39 changes: 39 additions & 0 deletions libs/ui/test-api.interceptor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { AxiosResponse } from 'axios';
import { HttpResourceApi } from '../src/app/Core/HttpResourceApi';
import { MOCK_USERS } from './test-data/users';

/**
* Patches the custom `HttpResourceApi` so mock data can be returned
* at the last possible moment before an HTTP request is executed.
*/
let installed = false;

export function installTestApi(): void {
if (installed) {
return;
}
installed = true;

const axios = (HttpResourceApi as any)._axios;
if (!axios) {
console.warn('Test API could not access HttpResourceApi axios instance');
return;
}

axios.interceptors.request.use((config) => {
const url = config.url?.replace('//', '/');
if (url && url.endsWith('/users')) {
config.adapter = async () => {
const response: AxiosResponse = {
data: MOCK_USERS,
status: 200,
statusText: 'OK',
headers: {},
config,
};
return Promise.resolve(response);
};
}
return config;
});
}
10 changes: 10 additions & 0 deletions libs/ui/test-data/users.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export interface User {
id: number;
name: string;
}

export const MOCK_USERS: User[] = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];