Add centralized API client with axios interceptors, remove vue-axios

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 12:44:33 +08:00
parent 6af7253d08
commit 147b16ca34
29 changed files with 301 additions and 270 deletions

View File

@@ -5,20 +5,21 @@ vi.mock('@/module/apiError.js', () => ({
default: vi.fn(),
}));
const { mockGet, mockPost, mockPut } = vi.hoisted(() => ({
mockGet: vi.fn(), mockPost: vi.fn(), mockPut: vi.fn(),
}));
vi.mock('@/api/client.js', () => ({
default: { get: mockGet, post: mockPost, put: mockPut },
}));
import useAllMapDataStore from '@/stores/allMapData.js';
describe('allMapDataStore', () => {
let store;
const mockAxios = {
get: vi.fn(),
post: vi.fn(),
put: vi.fn(),
};
beforeEach(() => {
setActivePinia(createPinia());
store = useAllMapDataStore();
store.$axios = mockAxios;
vi.clearAllMocks();
});
@@ -37,11 +38,11 @@ describe('allMapDataStore', () => {
stats: { cases: 10 },
insights: {},
};
mockAxios.get.mockResolvedValue({ data: mockData });
mockGet.mockResolvedValue({ data: mockData });
await store.getAllMapData();
expect(mockAxios.get).toHaveBeenCalledWith(
expect(mockGet).toHaveBeenCalledWith(
'/api/logs/1/discover',
);
expect(store.allProcessMap).toEqual({ nodes: [] });
@@ -51,7 +52,7 @@ describe('allMapDataStore', () => {
it('fetches temp filter discover data when set', async () => {
store.logId = 1;
store.tempFilterId = 5;
mockAxios.get.mockResolvedValue({
mockGet.mockResolvedValue({
data: {
process_map: {},
bpmn: {},
@@ -62,7 +63,7 @@ describe('allMapDataStore', () => {
await store.getAllMapData();
expect(mockAxios.get).toHaveBeenCalledWith(
expect(mockGet).toHaveBeenCalledWith(
'/api/temp-filters/5/discover',
);
});
@@ -70,7 +71,7 @@ describe('allMapDataStore', () => {
it('fetches created filter discover data', async () => {
store.logId = 1;
store.createFilterId = 3;
mockAxios.get.mockResolvedValue({
mockGet.mockResolvedValue({
data: {
process_map: {},
bpmn: {},
@@ -81,14 +82,14 @@ describe('allMapDataStore', () => {
await store.getAllMapData();
expect(mockAxios.get).toHaveBeenCalledWith(
expect(mockGet).toHaveBeenCalledWith(
'/api/filters/3/discover',
);
});
it('does not throw on API failure', async () => {
store.logId = 1;
mockAxios.get.mockRejectedValue(new Error('fail'));
mockGet.mockRejectedValue(new Error('fail'));
await expect(store.getAllMapData())
.resolves.not.toThrow();
@@ -111,11 +112,11 @@ describe('allMapDataStore', () => {
trace: [],
attrs: [],
};
mockAxios.get.mockResolvedValue({ data: mockData });
mockGet.mockResolvedValue({ data: mockData });
await store.getFilterParams();
expect(mockAxios.get).toHaveBeenCalledWith(
expect(mockGet).toHaveBeenCalledWith(
'/api/filters/params?log_id=1',
);
expect(store.allFilterTask).toEqual(['A', 'B']);
@@ -129,13 +130,13 @@ describe('allMapDataStore', () => {
it('posts rule data and stores result', async () => {
store.logId = 1;
store.postRuleData = [{ type: 'task' }];
mockAxios.post.mockResolvedValue({
mockPost.mockResolvedValue({
data: { result: true },
});
await store.checkHasResult();
expect(mockAxios.post).toHaveBeenCalledWith(
expect(mockPost).toHaveBeenCalledWith(
'/api/filters/has-result?log_id=1',
[{ type: 'task' }],
);
@@ -147,7 +148,7 @@ describe('allMapDataStore', () => {
it('creates temp filter and stores id', async () => {
store.logId = 1;
store.postRuleData = [];
mockAxios.post.mockResolvedValue({ data: { id: 77 } });
mockPost.mockResolvedValue({ data: { id: 77 } });
await store.addTempFilterId();
@@ -160,11 +161,11 @@ describe('allMapDataStore', () => {
store.logId = 1;
store.tempFilterId = 77;
store.postRuleData = [{ type: 'rule' }];
mockAxios.post.mockResolvedValue({ data: { id: 88 } });
mockPost.mockResolvedValue({ data: { id: 88 } });
await store.addFilterId('myFilter');
expect(mockAxios.post).toHaveBeenCalledWith(
expect(mockPost).toHaveBeenCalledWith(
'/api/filters?log_id=1',
{ name: 'myFilter', rules: [{ type: 'rule' }] },
);
@@ -178,11 +179,11 @@ describe('allMapDataStore', () => {
store.createFilterId = 88;
store.tempFilterId = 77;
store.postRuleData = [{ type: 'updated' }];
mockAxios.put.mockResolvedValue({ status: 200 });
mockPut.mockResolvedValue({ status: 200 });
await store.updateFilter();
expect(mockAxios.put).toHaveBeenCalledWith(
expect(mockPut).toHaveBeenCalledWith(
'/api/filters/88',
[{ type: 'updated' }],
);
@@ -195,7 +196,7 @@ describe('allMapDataStore', () => {
it('does not crash when baseLogId is falsy', async () => {
store.logId = 1;
store.baseLogId = null;
mockAxios.get.mockResolvedValue({ data: [{ id: 1 }] });
mockGet.mockResolvedValue({ data: [{ id: 1 }] });
await store.getAllTrace();