1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-27 11:02:16 +01:00
unleash.unleash/src/lib/features/users/user-updates-read-model.test.ts
Gastón Fournier b1f4ebd5eb
chore: return user id alongside max updated_at (#10732)
This is for internal use
2025-10-06 11:43:40 +02:00

83 lines
2.6 KiB
TypeScript

import dbInit, {
type ITestDb,
} from '../../../test/e2e/helpers/database-init.js';
let db: ITestDb;
const TABLE = 'users';
const INSERT_INSTANT = new Date();
beforeAll(async () => {
db = await dbInit();
for (let i = 0; i < 10; i += 1) {
await db.rawDatabase(TABLE).insert({
name: `test-user-${i}`,
username: `test-user-${i}`,
email: `test-user-${i}@example.com`,
created_at: INSERT_INSTANT,
updated_at: INSERT_INSTANT,
});
}
});
test('returns all users if page is large enough', async () => {
const userUpdatesReadModel = db.stores.userUpdatesReadModel;
const users =
await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(INSERT_INSTANT);
expect(users).toHaveLength(10);
});
test('returns 0 if no users updated after timestamp', async () => {
const userUpdatesReadModel = db.stores.userUpdatesReadModel;
const users = await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(
new Date(INSERT_INSTANT.getTime() + 1),
);
expect(users).toHaveLength(0);
});
test('returns the users in pages', async () => {
const userUpdatesReadModel = db.stores.userUpdatesReadModel;
const pageSize = 4;
const usersPage1 = await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(
INSERT_INSTANT,
pageSize,
);
expect(usersPage1).toHaveLength(4);
expect(usersPage1[0].username).toBe('test-user-0');
const usersPage2 = await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(
INSERT_INSTANT,
pageSize,
usersPage1[usersPage1.length - 1].id,
);
expect(usersPage2).toHaveLength(4);
expect(usersPage2[0].username).toBe('test-user-4');
const usersPage3 = await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(
INSERT_INSTANT,
pageSize,
usersPage2[usersPage2.length - 1].id,
);
expect(usersPage3).toHaveLength(2);
expect(usersPage3[1].username).toBe('test-user-9');
const usersPage4 = await userUpdatesReadModel.getUsersUpdatedAfterOrEqual(
INSERT_INSTANT,
pageSize,
usersPage3[usersPage3.length - 1].id,
);
expect(usersPage4).toHaveLength(0);
});
test('getLastUpdatedAt returns the latest updated_at timestamp with max id', async () => {
const userUpdatesReadModel = db.stores.userUpdatesReadModel;
const result = await userUpdatesReadModel.getLastUpdatedAt();
expect(result).not.toBeNull();
expect(result?.lastUpdatedAt).toEqual(INSERT_INSTANT);
expect(result?.userId).toBeDefined();
expect(result?.userId).toBe(10); // The last inserted user should have the highest ID
});