✅(frontend) switch to vitest and enhance testability
Migrated from jest to vitest for server/y-provider, gaining faster runs, esm-native support and cleaner mocking. Signed-off-by: Stephan Meijer <me@stephanmeijer.com>
This commit is contained in:
@@ -1,66 +1,93 @@
|
||||
import { Hocuspocus } from '@hocuspocus/server';
|
||||
import request from 'supertest';
|
||||
import { describe, expect, test, vi } from 'vitest';
|
||||
import { mock } from 'vitest-mock-extended';
|
||||
|
||||
const port = 5556;
|
||||
const origin = 'http://localhost:3000';
|
||||
|
||||
jest.mock('../src/env', () => {
|
||||
vi.mock('../src/env', async (importOriginal) => {
|
||||
return {
|
||||
PORT: port,
|
||||
COLLABORATION_SERVER_ORIGIN: origin,
|
||||
...(await importOriginal()),
|
||||
COLLABORATION_SERVER_ORIGIN: 'http://localhost:3000',
|
||||
Y_PROVIDER_API_KEY: 'yprovider-api-key',
|
||||
};
|
||||
});
|
||||
|
||||
import { initServer } from '../src/servers/appServer';
|
||||
import { initApp } from '@/servers';
|
||||
|
||||
console.error = jest.fn();
|
||||
const { app, server } = initServer();
|
||||
import {
|
||||
Y_PROVIDER_API_KEY as apiKey,
|
||||
COLLABORATION_SERVER_ORIGIN as origin,
|
||||
} from '../src/env';
|
||||
|
||||
console.error = vi.fn();
|
||||
|
||||
const mockOpts = {
|
||||
fallbackMockImplementation: () => {
|
||||
throw new Error('Unexpected call.');
|
||||
},
|
||||
};
|
||||
|
||||
describe('Server Tests', () => {
|
||||
afterAll(() => {
|
||||
server.close();
|
||||
});
|
||||
test('POST /api/convert with incorrect API key should responds with 403', async () => {
|
||||
const hocuspocus = mock<Hocuspocus>({}, mockOpts);
|
||||
const app = initApp(hocuspocus);
|
||||
|
||||
test('POST /api/convert with incorrect API key should return 403', async () => {
|
||||
const response = await request(app as any)
|
||||
const response = await request(app)
|
||||
.post('/api/convert')
|
||||
.set('Origin', origin)
|
||||
.set('Authorization', 'wrong-api-key');
|
||||
|
||||
expect(response.status).toBe(403);
|
||||
expect(response.body.error).toBe('Forbidden: Invalid API Key');
|
||||
expect(response.body).toStrictEqual({
|
||||
error: 'Forbidden: Invalid API Key',
|
||||
});
|
||||
});
|
||||
|
||||
test('POST /api/convert with a Bearer token', async () => {
|
||||
const response = await request(app as any)
|
||||
const hocuspocus = mock<Hocuspocus>({}, mockOpts);
|
||||
const app = initApp(hocuspocus);
|
||||
|
||||
const response = await request(app)
|
||||
.post('/api/convert')
|
||||
.set('Origin', origin)
|
||||
.set('Authorization', 'Bearer test-secret-api-key');
|
||||
|
||||
// Warning: Changing the authorization header to Bearer token format will break backend compatibility with this microservice.
|
||||
expect(response.status).toBe(403);
|
||||
expect(response.body).toStrictEqual({
|
||||
error: 'Forbidden: Invalid API Key',
|
||||
});
|
||||
});
|
||||
|
||||
test('POST /api/convert with missing body param content', async () => {
|
||||
const response = await request(app as any)
|
||||
const hocuspocus = mock<Hocuspocus>({}, mockOpts);
|
||||
const app = initApp(hocuspocus);
|
||||
|
||||
const response = await request(app)
|
||||
.post('/api/convert')
|
||||
.set('Origin', origin)
|
||||
.set('Authorization', 'yprovider-api-key');
|
||||
.set('Authorization', apiKey);
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
expect(response.body.error).toBe('Invalid request: missing content');
|
||||
expect(response.body).toStrictEqual({
|
||||
error: 'Invalid request: missing content',
|
||||
});
|
||||
});
|
||||
|
||||
test('POST /api/convert with body param content being an empty string', async () => {
|
||||
const response = await request(app as any)
|
||||
const hocuspocus = mock<Hocuspocus>({}, mockOpts);
|
||||
const app = initApp(hocuspocus);
|
||||
|
||||
const response = await request(app)
|
||||
.post('/api/convert')
|
||||
.set('Origin', origin)
|
||||
.set('Authorization', 'yprovider-api-key')
|
||||
.set('Authorization', apiKey)
|
||||
.send({
|
||||
content: '',
|
||||
});
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
expect(response.body.error).toBe('Invalid request: missing content');
|
||||
expect(response.body).toStrictEqual({
|
||||
error: 'Invalid request: missing content',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user