directus

Форк
0
/
validate-query.test.ts 
85 строк · 2.6 Кб
1
import { useEnv } from '@directus/env';
2
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
3

4
vi.mock('@directus/env');
5

6
beforeEach(() => {
7
	vi.resetModules();
8

9
	vi.mocked(useEnv).mockReturnValue({});
10
});
11

12
afterEach(() => {
13
	vi.clearAllMocks();
14
});
15

16
describe('max limit', () => {
17
	describe('max limit of 100', async () => {
18
		vi.mocked(useEnv).mockReturnValue({ QUERY_LIMIT_MAX: 100 });
19
		const { validateQuery } = await import('./validate-query.js');
20

21
		test.each([-1, 1, 25])('should accept number %i', (limit) => {
22
			expect(() => validateQuery({ limit })).not.toThrowError('limit');
23
		});
24

25
		test('should error with 101', () => {
26
			expect(() => validateQuery({ limit: 101 })).toThrowError('limit');
27
		});
28
	});
29

30
	test('should accept 101 when no limit defined', async () => {
31
		const { validateQuery } = await import('./validate-query.js');
32

33
		expect(() => validateQuery({ limit: 101 })).not.toThrowError('limit');
34
	});
35

36
	test('should accept 101 when unlimited', async () => {
37
		vi.mocked(useEnv).mockReturnValue({ QUERY_LIMIT_MAX: -1 });
38
		const { validateQuery } = await import('./validate-query.js');
39

40
		expect(() => validateQuery({ limit: 101 })).not.toThrowError('limit');
41
	});
42
});
43

44
describe('export', async () => {
45
	const { validateQuery } = await import('./validate-query.js');
46

47
	test.each(['csv', 'json', 'xml', 'yaml'])('should accept format %i', (format) => {
48
		expect(() => validateQuery({ export: format } as any)).not.toThrowError();
49
	});
50

51
	test('should error with invalid-format', () => {
52
		expect(() => validateQuery({ export: 'invalid-format' } as any)).toThrowError('"export" must be one of');
53
	});
54
});
55

56
describe('validateBoolean', async () => {
57
	const { validateBoolean } = await import('./validate-query.js');
58

59
	test.each([true, '', null, false])('should allow value %s', (value: unknown) => {
60
		expect(() => validateBoolean(value, 'test')).not.toThrowError();
61
	});
62

63
	test.each([undefined, 'wrong'])('should fail on value %s', (value: unknown) => {
64
		expect(() => validateBoolean(value, 'test')).toThrowError('"test" has to be a boolean');
65
	});
66
});
67

68
describe('validateGeometry', async () => {
69
	const { validateGeometry } = await import('./validate-query.js');
70

71
	test.each([
72
		'',
73
		null,
74
		{
75
			type: 'Point',
76
			coordinates: [30.0, 10.0],
77
		},
78
	])('should allow value %s', (value: unknown) => {
79
		expect(() => validateGeometry(value, 'test')).not.toThrowError();
80
	});
81

82
	test.each([undefined, 'wrong', {}])('should fail on value %s', (value: unknown) => {
83
		expect(() => validateGeometry(value, 'test')).toThrowError('"test" has to be a valid GeoJSON object');
84
	});
85
});
86

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.