mirror of https://github.com/buster-so/buster.git
Create requests.test.ts
This commit is contained in:
parent
9f8c7b60c7
commit
51d31f32f2
|
@ -0,0 +1,91 @@
|
||||||
|
import * as v from 'valibot';
|
||||||
|
import { DataSource, DataSourceSchema, DataSourceTypes } from '@/api/asset_interfaces/datasources';
|
||||||
|
import { getDatasource } from './requests';
|
||||||
|
import mainApi from '../instances';
|
||||||
|
|
||||||
|
// Mock dependencies
|
||||||
|
jest.mock('../instances', () => ({
|
||||||
|
__esModule: true,
|
||||||
|
default: {
|
||||||
|
get: jest.fn()
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('valibot', () => ({
|
||||||
|
...jest.requireActual('valibot'),
|
||||||
|
parse: jest.fn().mockImplementation((schema, data) => data)
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('data_source requests', () => {
|
||||||
|
const mockDataSource = {
|
||||||
|
id: 'test-id',
|
||||||
|
name: 'Test Database',
|
||||||
|
type: DataSourceTypes.postgres,
|
||||||
|
created_at: '2023-01-01T00:00:00.000Z',
|
||||||
|
updated_at: '2023-01-01T00:00:00.000Z',
|
||||||
|
created_by: {
|
||||||
|
id: 'user-id',
|
||||||
|
name: 'Test User',
|
||||||
|
email: 'test@example.com'
|
||||||
|
},
|
||||||
|
credentials: {
|
||||||
|
name: 'Test Database',
|
||||||
|
type: DataSourceTypes.postgres,
|
||||||
|
host: 'localhost',
|
||||||
|
port: 5432,
|
||||||
|
username: 'test_user',
|
||||||
|
password: 'password',
|
||||||
|
default_database: 'test_db',
|
||||||
|
default_schema: 'public'
|
||||||
|
},
|
||||||
|
data_sets: []
|
||||||
|
} satisfies DataSource;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getDatasource', () => {
|
||||||
|
it('should fetch a data source by id', async () => {
|
||||||
|
// Setup mock response
|
||||||
|
(mainApi.get as jest.Mock).mockResolvedValue({
|
||||||
|
data: mockDataSource
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await getDatasource('test-id');
|
||||||
|
|
||||||
|
expect(true).toBe(true);
|
||||||
|
expect(mainApi.get).toHaveBeenCalledWith('/data_sources/test-id');
|
||||||
|
expect(v.parse).toHaveBeenCalledWith(DataSourceSchema, mockDataSource);
|
||||||
|
expect(result).toEqual(mockDataSource);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error when the API request fails', async () => {
|
||||||
|
// Setup mock error
|
||||||
|
const mockError = new Error('Request failed');
|
||||||
|
(mainApi.get as jest.Mock).mockRejectedValue(mockError);
|
||||||
|
|
||||||
|
// Call and expect error
|
||||||
|
await expect(getDatasource('test-id')).rejects.toThrow('Request failed');
|
||||||
|
expect(mainApi.get).toHaveBeenCalledWith('/data_sources/test-id');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error when validation fails', async () => {
|
||||||
|
// Setup mock response with invalid data
|
||||||
|
(mainApi.get as jest.Mock).mockResolvedValue({
|
||||||
|
data: { invalid: 'data' }
|
||||||
|
});
|
||||||
|
|
||||||
|
// Setup validation error
|
||||||
|
const validationError = new Error('Validation failed');
|
||||||
|
jest.spyOn(v, 'parse').mockImplementation(() => {
|
||||||
|
throw validationError;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Call and expect error
|
||||||
|
await expect(getDatasource('test-id')).rejects.toThrow('Validation failed');
|
||||||
|
expect(mainApi.get).toHaveBeenCalledWith('/data_sources/test-id');
|
||||||
|
expect(v.parse).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue