mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-24 17:51:14 +02:00
Move user tests and add new read model test
This commit is contained in:
parent
3ed342459a
commit
2a4e9781f1
@ -44,7 +44,7 @@ const mapUserToColumns = (user: ICreateUser) => ({
|
|||||||
image_url: user.imageUrl,
|
image_url: user.imageUrl,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const rowToUser = (row) => {
|
const rowToUser = (row) => {
|
||||||
if (!row) {
|
if (!row) {
|
||||||
throw new NotFoundError('No user found');
|
throw new NotFoundError('No user found');
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,33 @@
|
|||||||
import type { Logger, LogProvider } from '../../logger.js';
|
import type { Logger, LogProvider } from '../../logger.js';
|
||||||
|
|
||||||
import type { Db } from '../../db/db.js';
|
import type { Db } from '../../db/db.js';
|
||||||
import { rowToUser, USER_COLUMNS_PUBLIC, USERS_TABLE } from './user-store.js';
|
import { USER_COLUMNS_PUBLIC, USERS_TABLE } from './user-store.js';
|
||||||
import type { User } from '../../internals.js';
|
import type { Row } from '../../db/crud/row-type.js';
|
||||||
|
|
||||||
|
type Response = {
|
||||||
|
id: number;
|
||||||
|
name?: string;
|
||||||
|
username?: string;
|
||||||
|
email?: string;
|
||||||
|
imageUrl?: string;
|
||||||
|
seenAt?: Date;
|
||||||
|
createdAt?: Date;
|
||||||
|
updatedAt?: Date | null;
|
||||||
|
deletedAt?: Date | null;
|
||||||
|
};
|
||||||
|
const toResponse = (row: Row<Response>): Response => {
|
||||||
|
return {
|
||||||
|
id: row.id,
|
||||||
|
name: row.name,
|
||||||
|
username: row.username,
|
||||||
|
email: row.email,
|
||||||
|
imageUrl: row.image_url,
|
||||||
|
seenAt: row.seen_at,
|
||||||
|
createdAt: row.created_at,
|
||||||
|
updatedAt: row.updated_at,
|
||||||
|
deletedAt: row.deleted_at,
|
||||||
|
};
|
||||||
|
};
|
||||||
export class UserUpdatesReadModel {
|
export class UserUpdatesReadModel {
|
||||||
private db: Db;
|
private db: Db;
|
||||||
|
|
||||||
@ -29,7 +53,7 @@ export class UserUpdatesReadModel {
|
|||||||
async getUsersUpdatedAfter(
|
async getUsersUpdatedAfter(
|
||||||
date: Date,
|
date: Date,
|
||||||
limit: number = 100,
|
limit: number = 100,
|
||||||
): Promise<User[]> {
|
): Promise<Response[]> {
|
||||||
const result = await this.db(USERS_TABLE)
|
const result = await this.db(USERS_TABLE)
|
||||||
.where({
|
.where({
|
||||||
// also consider deleted users (different than activeUsers query)
|
// also consider deleted users (different than activeUsers query)
|
||||||
@ -38,8 +62,8 @@ export class UserUpdatesReadModel {
|
|||||||
updated_at: { $gt: date },
|
updated_at: { $gt: date },
|
||||||
})
|
})
|
||||||
.orderBy('updated_at', 'asc')
|
.orderBy('updated_at', 'asc')
|
||||||
.select(USER_COLUMNS_PUBLIC)
|
.select([...USER_COLUMNS_PUBLIC, 'updated_at', 'deleted_at'])
|
||||||
.limit(limit);
|
.limit(limit);
|
||||||
return result.map(rowToUser);
|
return result.map(toResponse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
35
src/test/e2e/users/user-updates-read-model.e2e.test.ts
Normal file
35
src/test/e2e/users/user-updates-read-model.e2e.test.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import dbInit, { type ITestDb } from '../helpers/database-init.js';
|
||||||
|
import getLogger from '../../fixtures/no-logger.js';
|
||||||
|
import type { IUnleashStores } from '../../../lib/types/index.js';
|
||||||
|
import { beforeAll, afterAll, test, expect } from 'vitest';
|
||||||
|
let stores: IUnleashStores;
|
||||||
|
let db: ITestDb;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
db = await dbInit('user_store_serial', getLogger, {
|
||||||
|
experimental: { flags: {} },
|
||||||
|
});
|
||||||
|
stores = db.stores;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await db.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should have no users', async () => {
|
||||||
|
const readModel = stores.userUpdatesReadModel;
|
||||||
|
const lastUpdatedAt = await readModel.getLastUpdatedAt();
|
||||||
|
expect(lastUpdatedAt).toBeNull();
|
||||||
|
|
||||||
|
const users = await readModel.getUsersUpdatedAfter(new Date(0));
|
||||||
|
expect(users).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should have no users', async () => {
|
||||||
|
const readModel = stores.userUpdatesReadModel;
|
||||||
|
const lastUpdatedAt = await readModel.getLastUpdatedAt();
|
||||||
|
expect(lastUpdatedAt).toBeNull();
|
||||||
|
|
||||||
|
const users = await readModel.getUsersUpdatedAfter(new Date(0));
|
||||||
|
expect(users).toEqual([]);
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user