-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathcolumnNamingStrategy.ts
108 lines (95 loc) · 3.02 KB
/
columnNamingStrategy.ts
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { expect } from 'chai';
import { createConnection, getConnection } from 'typeorm';
import { createQueryBuilder } from './utils/createQueryBuilder';
import {
prepareData,
prepareSnakeData,
} from './utils/prepareData';
import { User } from './entities/User';
import { Photo } from './entities/Photo';
import { Snake } from './entities/Snake';
import { buildPaginator } from '../src/index';
describe('TypeORM cursor-based pagination column naming strategy test', () => {
describe('Camel case naming strategy', () => {
before(async () => {
await createConnection({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test',
synchronize: true,
entities: [User, Photo],
logging: true,
});
await prepareData();
});
it('should correctly paginate entities with camel case pagination keys', async () => {
const queryBuilder = createQueryBuilder(User, 'user');
const paginator = buildPaginator({
entity: User,
query: {
limit: 1,
},
paginationKeys: ['camelCaseColumn'],
});
const result = await paginator.paginate(queryBuilder.clone());
const nextPagePaginator = buildPaginator({
entity: User,
query: {
limit: 1,
afterCursor: result.cursor.afterCursor as string,
},
paginationKeys: ['camelCaseColumn'],
});
const nextResult = await nextPagePaginator.paginate(queryBuilder.clone());
expect(nextResult.data).length(1);
});
after(async () => {
await getConnection().query('TRUNCATE TABLE users RESTART IDENTITY CASCADE;');
await getConnection().close();
});
});
describe('Snake case naming strategy test', () => {
before(async () => {
await createConnection({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'test',
password: 'test',
database: 'test',
synchronize: true,
entities: [Snake],
logging: true,
});
await prepareSnakeData();
});
it('should correctly paginate entities with snake case pagination keys', async () => {
const queryBuilder = createQueryBuilder(Snake, 'snake');
const paginator = buildPaginator({
entity: Snake,
query: {
limit: 1,
},
paginationKeys: ['snakeCaseColumn'],
});
const result = await paginator.paginate(queryBuilder.clone());
const nextPagePaginator = buildPaginator({
entity: Snake,
query: {
limit: 1,
afterCursor: result.cursor.afterCursor as string,
},
paginationKeys: ['snakeCaseColumn'],
});
const nextResult = await nextPagePaginator.paginate(queryBuilder.clone());
expect(nextResult.data).length(1);
});
after(async () => {
await getConnection().query('TRUNCATE TABLE snakes RESTART IDENTITY CASCADE;');
await getConnection().close();
});
});
});