directus

Форк
0
/
get-relation-info.test.ts 
114 строк · 3.2 Кб
1
import type { DeepPartial, Relation } from '@directus/types';
2
import { describe, expect, it } from 'vitest';
3
import { getRelationInfo } from './get-relation-info.js';
4

5
describe('getRelationInfo', () => {
6
	it('Errors on suspiciously long implicit $FOLLOW', () => {
7
		expect(() =>
8
			getRelationInfo(
9
				[],
10
				'related_test_collection',
11
				'$FOLLOW(test_collection, test_field, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)',
12
			),
13
		).toThrowError(Error);
14
	});
15

16
	it('Generates a new relation object for an implicit o2m relation', () => {
17
		const result = getRelationInfo([], 'related_test_collection', '$FOLLOW(test_collection, test_field)');
18

19
		expect(result).toEqual({
20
			relation: {
21
				collection: 'test_collection',
22
				field: 'test_field',
23
				related_collection: 'related_test_collection',
24
				schema: null,
25
				meta: null,
26
			},
27
			relationType: 'o2m',
28
		});
29
	});
30

31
	it('Generates a new relation object for an implicit o2a relation', () => {
32
		const result = getRelationInfo(
33
			[],
34
			'related_test_collection',
35
			'$FOLLOW(test_collection, test_field, test_collection_field)',
36
		);
37

38
		expect(result).toEqual({
39
			relation: {
40
				collection: 'test_collection',
41
				field: 'test_field',
42
				related_collection: 'related_test_collection',
43
				schema: null,
44
				meta: {
45
					one_collection_field: 'test_collection_field',
46
				},
47
			},
48
			relationType: 'o2a',
49
		});
50
	});
51

52
	it('Returns the correct existing relation for the given collection/field', () => {
53
		const testRelations: DeepPartial<Relation>[] = [
54
			// o2m
55
			{
56
				collection: 'articles',
57
				field: 'author_id',
58
				related_collection: 'authors',
59
				meta: {
60
					one_field: 'articles',
61
				},
62
				schema: null,
63
			},
64

65
			// m2o
66
			{
67
				collection: 'articles',
68
				field: 'category_id',
69
				related_collection: 'categories',
70
				meta: null,
71
				schema: null,
72
			},
73

74
			// a2o
75
			{
76
				collection: 'pages',
77
				field: 'item',
78
				related_collection: null,
79
				meta: {
80
					one_collection_field: 'collection',
81
					one_allowed_collections: ['headings', 'paragraphs', 'images'],
82
				},
83
			},
84
		];
85

86
		const o2mResult = getRelationInfo(testRelations as Relation[], 'authors', 'articles');
87

88
		expect(o2mResult).toEqual({
89
			relationType: 'o2m',
90
			relation: testRelations[0],
91
		});
92

93
		const m2oResult = getRelationInfo(testRelations as Relation[], 'articles', 'category_id');
94

95
		expect(m2oResult).toEqual({
96
			relationType: 'm2o',
97
			relation: testRelations[1],
98
		});
99

100
		const a2oResult = getRelationInfo(testRelations as Relation[], 'pages', 'item');
101

102
		expect(a2oResult).toEqual({
103
			relationType: 'a2o',
104
			relation: testRelations[2],
105
		});
106

107
		const noResult = getRelationInfo(testRelations as Relation[], 'does not exist', 'wrong field');
108

109
		expect(noResult).toEqual({
110
			relation: null,
111
			relationType: null,
112
		});
113
	});
114
});
115

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

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

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

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