-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathquery.test.ts
More file actions
81 lines (68 loc) · 2.4 KB
/
query.test.ts
File metadata and controls
81 lines (68 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import bsonUrlEncoding from '../../src/utils/bsonUrlEncoding';
import { encodePaginationTokens, generateCursorQuery } from '../../src/utils/query';
describe('encodePaginationTokens', () => {
it('encodes the pagination tokens on the passed-in response object', () => {
const params = {
paginatedField: '_id',
};
const response = {
results: [],
previous: { _id: '456' },
hasPrevious: false,
next: { _id: '789' },
hasNext: false,
};
encodePaginationTokens(params, response);
expect(response.next).toEqual(bsonUrlEncoding.encode('789'));
expect(response.previous).toEqual(bsonUrlEncoding.encode('456'));
});
it("constructs pagination tokens using both the _id and the paginatedField if the latter isn't the former", () => {
const params = {
paginatedField: 'name',
};
const response = {
results: [],
previous: { _id: '456', name: 'Test' },
hasPrevious: false,
next: { _id: '789', name: 'Test 2' },
hasNext: false,
};
encodePaginationTokens(params, response);
expect(response.next).toEqual(bsonUrlEncoding.encode(['Test 2', '789']));
expect(response.previous).toEqual(bsonUrlEncoding.encode(['Test', '456']));
});
it('encodes tokens when cursor is a plain object that lacks _id', () => {
const params = {
paginatedField: 'name',
};
const response = {
results: [],
previous: { name: 'Alpha' }, // ⬅️ no _id
hasPrevious: false,
next: { name: 'Beta' }, // ⬅️ no _id
hasNext: false,
} as any;
encodePaginationTokens(params, response);
expect(response.previous).toEqual(bsonUrlEncoding.encode('Alpha'));
expect(response.next).toEqual(bsonUrlEncoding.encode('Beta'));
});
describe('generateCursorQuery', () => {
it('generates an empty cursor query when no next or previous cursor is provided', () => {
const params = {
paginatedField: 'name',
};
const query = generateCursorQuery(params);
expect(query).toEqual({});
});
it('generates a cursor query for a paginated field that is not _id', () => {
const params = {
paginatedField: 'name',
next: '123',
};
const query = generateCursorQuery(params);
expect(query).toEqual({
$or: [{ name: { $lt: '1' } }, { name: null }, { _id: { $lt: '2' }, name: { $eq: '1' } }],
});
});
});
});