mirror of
https://github.com/Unleash/unleash.git
synced 2025-05-31 01:16:01 +02:00
During adding privateProjectsChecker, I saw that events composition root is not used almost at all. Refactored code so we do not call new EventService anymore.
162 lines
4.7 KiB
TypeScript
162 lines
4.7 KiB
TypeScript
import EventStore from './event-store';
|
|
import getLogger from '../../../test/fixtures/no-logger';
|
|
import dbInit, { type ITestDb } from '../../../test/e2e/helpers/database-init';
|
|
import { EventEmitter } from 'stream';
|
|
import { EVENTS_CREATED_BY_PROCESSED } from '../../metric-events';
|
|
import type { IUnleashConfig } from '../../types';
|
|
import { createTestConfig } from '../../../test/config/test-config';
|
|
import EventService from './event-service';
|
|
|
|
let db: ITestDb;
|
|
|
|
const config: IUnleashConfig = createTestConfig();
|
|
|
|
beforeAll(async () => {
|
|
db = await dbInit('events_test', getLogger);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await db.rawDatabase('events').del();
|
|
await db.rawDatabase('users').del();
|
|
await db.destroy();
|
|
});
|
|
|
|
test('sets created_by_user_id on events with user username/email set as created_by', async () => {
|
|
const store = new EventStore(db.rawDatabase, getLogger);
|
|
|
|
await db.rawDatabase('users').insert({ username: 'test1' });
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'test1',
|
|
feature_name: 'feature1',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await store.setCreatedByUserId(200);
|
|
|
|
const user = await db
|
|
.rawDatabase('users')
|
|
.where({ username: 'test1' })
|
|
.first('id');
|
|
|
|
const events = await db.rawDatabase('events').select('*');
|
|
const notSet = events.filter(
|
|
(e) => !e.created_by_user_id && e.data.test === 'data-migrate',
|
|
);
|
|
const test1 = events.filter(
|
|
(e) =>
|
|
e.created_by_user_id === user.id && e.data.test === 'data-migrate',
|
|
);
|
|
expect(notSet).toHaveLength(0);
|
|
expect(test1).toHaveLength(1);
|
|
});
|
|
|
|
test('sets created_by_user_id on a mix of events and created_bys', async () => {
|
|
const store = new EventStore(db.rawDatabase, getLogger);
|
|
|
|
await db.rawDatabase('users').insert({ username: 'test2' });
|
|
|
|
await db.rawDatabase('api_tokens').insert({
|
|
secret: 'token1',
|
|
username: 'adm-token',
|
|
type: 'admin',
|
|
environment: 'default',
|
|
token_name: 'admin-token',
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'test2',
|
|
feature_name: 'feature1',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'strategy-created',
|
|
created_by: 'migration',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'api-token-created',
|
|
created_by: 'init-api-tokens',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'application-created',
|
|
created_by: '::1',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'unknown',
|
|
feature_name: 'feature2',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'adm-token',
|
|
feature_name: 'feature3',
|
|
data: `{"test": "data-migrate"}`,
|
|
});
|
|
|
|
await store.setCreatedByUserId(200);
|
|
|
|
const user = await db
|
|
.rawDatabase('users')
|
|
.where({ username: 'test2' })
|
|
.first('id');
|
|
|
|
const events = await db.rawDatabase('events').select('*');
|
|
const notSet = events.filter(
|
|
(e) => !e.created_by_user_id && e.data.test === 'data-migrate',
|
|
);
|
|
const test = events.filter(
|
|
(e) =>
|
|
e.created_by_user_id === user.id && e.data.test === 'data-migrate',
|
|
);
|
|
expect(notSet).toHaveLength(1);
|
|
expect(test).toHaveLength(1);
|
|
});
|
|
|
|
test('emits events with details on amount of updated rows', async () => {
|
|
const store = new EventStore(db.rawDatabase, getLogger);
|
|
|
|
const eventBus = new EventEmitter();
|
|
const service = new EventService(
|
|
{ eventStore: store, featureTagStore: db.stores.featureTagStore },
|
|
{ getLogger, eventBus },
|
|
{} as any,
|
|
);
|
|
let triggered = false;
|
|
|
|
eventBus.on(EVENTS_CREATED_BY_PROCESSED, ({ updated }) => {
|
|
expect(updated).toBe(2);
|
|
triggered = true;
|
|
});
|
|
|
|
await db.rawDatabase('users').insert({ username: 'events-test-1' });
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'events-test-1',
|
|
feature_name: 'feature1',
|
|
});
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'events-test-1',
|
|
feature_name: 'feature2',
|
|
});
|
|
await db.rawDatabase('events').insert({
|
|
type: 'feature-created',
|
|
created_by: 'doesnt-exist',
|
|
feature_name: 'not-counted',
|
|
});
|
|
|
|
await service.setEventCreatedByUserId();
|
|
|
|
expect(triggered).toBeTruthy();
|
|
});
|