mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
fix(core): Pagination was broken for users list (#16697)
This commit is contained in:
@@ -247,10 +247,11 @@ export class UserRepository extends Repository<User> {
|
|||||||
for (const sort of sortBy) {
|
for (const sort of sortBy) {
|
||||||
const [field, order] = sort.split(':');
|
const [field, order] = sort.split(':');
|
||||||
if (field === 'role') {
|
if (field === 'role') {
|
||||||
queryBuilder.addOrderBy(
|
queryBuilder.addSelect(
|
||||||
"CASE WHEN user.role='global:owner' THEN 0 WHEN user.role='global:admin' THEN 1 ELSE 2 END",
|
"CASE WHEN user.role='global:owner' THEN 0 WHEN user.role='global:admin' THEN 1 ELSE 2 END",
|
||||||
order.toUpperCase() as 'ASC' | 'DESC',
|
'userroleorder',
|
||||||
);
|
);
|
||||||
|
queryBuilder.addOrderBy('userroleorder', order.toUpperCase() as 'ASC' | 'DESC');
|
||||||
} else {
|
} else {
|
||||||
queryBuilder.addOrderBy(`user.${field}`, order.toUpperCase() as 'ASC' | 'DESC');
|
queryBuilder.addOrderBy(`user.${field}`, order.toUpperCase() as 'ASC' | 'DESC');
|
||||||
}
|
}
|
||||||
@@ -265,8 +266,8 @@ export class UserRepository extends Repository<User> {
|
|||||||
take: number,
|
take: number,
|
||||||
skip: number | undefined,
|
skip: number | undefined,
|
||||||
): SelectQueryBuilder<User> {
|
): SelectQueryBuilder<User> {
|
||||||
if (take >= 0) queryBuilder.limit(take);
|
if (take >= 0) queryBuilder.take(take);
|
||||||
if (skip) queryBuilder.offset(skip);
|
if (skip) queryBuilder.skip(skip);
|
||||||
|
|
||||||
return queryBuilder;
|
return queryBuilder;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ const testServer = utils.setupTestServer({
|
|||||||
describe('GET /users', () => {
|
describe('GET /users', () => {
|
||||||
let owner: User;
|
let owner: User;
|
||||||
let member1: User;
|
let member1: User;
|
||||||
|
let member2: User;
|
||||||
let ownerAgent: SuperAgentTest;
|
let ownerAgent: SuperAgentTest;
|
||||||
let userRepository: UserRepository;
|
let userRepository: UserRepository;
|
||||||
|
|
||||||
@@ -63,7 +64,7 @@ describe('GET /users', () => {
|
|||||||
lastName: 'Member1LastName',
|
lastName: 'Member1LastName',
|
||||||
mfaEnabled: true,
|
mfaEnabled: true,
|
||||||
});
|
});
|
||||||
await createUser({
|
member2 = await createUser({
|
||||||
role: 'global:member',
|
role: 'global:member',
|
||||||
email: 'member2@n8n.io',
|
email: 'member2@n8n.io',
|
||||||
firstName: 'Member2FirstName',
|
firstName: 'Member2FirstName',
|
||||||
@@ -77,6 +78,10 @@ describe('GET /users', () => {
|
|||||||
mfaEnabled: true,
|
mfaEnabled: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
await createTeamProject(`project${i}`, member1);
|
||||||
|
}
|
||||||
|
|
||||||
ownerAgent = testServer.authAgentFor(owner);
|
ownerAgent = testServer.authAgentFor(owner);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -435,6 +440,18 @@ describe('GET /users', () => {
|
|||||||
response.body.data.items.forEach(validateUser);
|
response.body.data.items.forEach(validateUser);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should return all users with large enough take', async () => {
|
||||||
|
const response = await ownerAgent
|
||||||
|
.get('/users')
|
||||||
|
.query('take=5&expand[]=projectRelations&sortBy[]=role:desc')
|
||||||
|
.expect(200);
|
||||||
|
|
||||||
|
expect(response.body.data.count).toBe(4);
|
||||||
|
expect(response.body.data.items).toHaveLength(4);
|
||||||
|
|
||||||
|
response.body.data.items.forEach(validateUser);
|
||||||
|
});
|
||||||
|
|
||||||
test('should return all users with negative take', async () => {
|
test('should return all users with negative take', async () => {
|
||||||
const users: User[] = [];
|
const users: User[] = [];
|
||||||
|
|
||||||
@@ -488,12 +505,12 @@ describe('GET /users', () => {
|
|||||||
describe('expand', () => {
|
describe('expand', () => {
|
||||||
test('should expand on team projects', async () => {
|
test('should expand on team projects', async () => {
|
||||||
const project = await createTeamProject('Test Project');
|
const project = await createTeamProject('Test Project');
|
||||||
await linkUserToProject(member1, project, 'project:admin');
|
await linkUserToProject(member2, project, 'project:admin');
|
||||||
|
|
||||||
const response = await ownerAgent
|
const response = await ownerAgent
|
||||||
.get('/users')
|
.get('/users')
|
||||||
.query(
|
.query(
|
||||||
`filter={ "email": "${member1.email}" }&select[]=firstName&take=1&expand[]=projectRelations&sortBy[]=role:asc`,
|
`filter={ "email": "${member2.email}" }&select[]=firstName&take=1&expand[]=projectRelations&sortBy[]=role:asc`,
|
||||||
)
|
)
|
||||||
.expect(200);
|
.expect(200);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user