1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-25 00:07:47 +01:00

fix: event creators, distinct on two users with same id (#7824)

Previously distinct was not working properly, because we were joining
users table.
You needed to do distinctOn. Now fixed.
This commit is contained in:
Jaanus Sellin 2024-08-09 14:32:55 +03:00 committed by GitHub
parent 1db222a5b9
commit 3fbb64511a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 10 deletions

View File

@ -382,7 +382,7 @@ class EventStore implements IEventStore {
async getEventCreators(): Promise<Array<{ id: number; name: string }>> {
const query = this.db('events')
.distinct('events.created_by_user_id')
.distinctOn('events.created_by_user_id')
.leftJoin('users', 'users.id', '=', 'events.created_by_user_id')
.select([
'events.created_by_user_id as id',
@ -399,8 +399,8 @@ class EventStore implements IEventStore {
const result = await query;
return result
.filter((row) => row.name || row.username || row.email)
.map((row) => ({
.filter((row: any) => row.name || row.username || row.email)
.map((row: any) => ({
id: Number(row.id),
name: String(row.name || row.username || row.email),
}));

View File

@ -158,8 +158,6 @@ test('event creators - if system user, return system name, else should return na
{
type: FEATURE_CREATED,
project: randomId(),
data: { id: randomId() },
tags: [],
createdBy: 'should-not-use-this-name',
createdByUserId: SYSTEM_USER.id,
ip: '127.0.0.1',
@ -167,8 +165,6 @@ test('event creators - if system user, return system name, else should return na
{
type: FEATURE_CREATED,
project: randomId(),
data: { id: randomId() },
tags: [],
createdBy: 'test-user1',
createdByUserId: user.id,
ip: '127.0.0.1',
@ -176,9 +172,6 @@ test('event creators - if system user, return system name, else should return na
{
type: FEATURE_CREATED,
project: randomId(),
data: { id: randomId() },
preData: { id: randomId() },
tags: [{ type: 'simple', value: randomId() }],
createdBy: 'test-user2',
createdByUserId: 2,
ip: '127.0.0.1',
@ -209,3 +202,38 @@ test('event creators - if system user, return system name, else should return na
},
]);
});
test('event creators - takes single distinct username, if 2 users have same id', async () => {
const events: IBaseEvent[] = [
{
type: FEATURE_CREATED,
project: randomId(),
createdBy: 'test-user4',
createdByUserId: 2,
ip: '127.0.0.1',
},
{
type: FEATURE_CREATED,
project: randomId(),
createdBy: 'test-user2',
createdByUserId: 2,
ip: '127.0.0.1',
},
];
await Promise.all(
events.map((event) => {
return eventService.storeEvent(event);
}),
);
const { body } = await app.request
.get('/api/admin/event-creators')
.expect(200);
expect(body).toMatchObject([
{
id: 2,
name: 'test-user4',
},
]);
});