Add axios request queue interceptor with unit tests:
- Introduce `installAxiosRequestQueue` to manage and queue requests globally. - Update `main.js` to install the interceptor at app initialization. - Add `__skipRequestQueue` configuration in `authenticatedRequest` for bypassing the queue. - Create unit tests to validate queue behavior and ensure request sequencing.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import axios from "axios";
|
||||
import { enqueueRequest } from "@/services/requestQueue.js";
|
||||
|
||||
let requestInterceptorId = null;
|
||||
|
||||
const isQueueBypassed = (config) => config?.__skipRequestQueue === true;
|
||||
|
||||
export const installAxiosRequestQueue = () => {
|
||||
if (!axios?.interceptors?.request) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (requestInterceptorId !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
requestInterceptorId = axios.interceptors.request.use((config) => {
|
||||
if (isQueueBypassed(config) || config?.__queueAdapterWrapped) {
|
||||
return config;
|
||||
}
|
||||
|
||||
const resolvedAdapter = axios.getAdapter(config?.adapter ?? axios.defaults.adapter);
|
||||
config.__queueAdapterWrapped = true;
|
||||
config.adapter = (adapterConfig) => enqueueRequest(() => resolvedAdapter(adapterConfig));
|
||||
return config;
|
||||
});
|
||||
};
|
||||
|
||||
export const __resetAxiosRequestQueueInstallerForTests = () => {
|
||||
if (requestInterceptorId !== null && axios?.interceptors?.request) {
|
||||
axios.interceptors.request.eject(requestInterceptorId);
|
||||
}
|
||||
requestInterceptorId = null;
|
||||
};
|
||||
Reference in New Issue
Block a user