Skip to content

Commit fcd6fd3

Browse files
committed
refactor(tests): consolidate event ID validation tests using parameterized cases for improved readability and maintainability
1 parent dafbd74 commit fcd6fd3

5 files changed

Lines changed: 100 additions & 92 deletions

test/models/eventsFactory-bulk-toggle.test.ts

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -45,33 +45,30 @@ describe('EventsFactory.bulkSetEventMarks', () => {
4545
});
4646
});
4747

48-
it('should set starred mark when enabled is true', async () => {
49-
const factory = new EventsFactory(projectId);
50-
const id = new ObjectId();
51-
52-
collectionMock.updateMany.mockResolvedValue({
53-
acknowledged: true,
54-
modifiedCount: 1,
55-
});
56-
57-
const result = await factory.bulkSetEventMarks([ id.toString() ], 'starred', true);
58-
59-
expect(result).toEqual({
60-
acknowledged: true,
61-
modifiedCount: 1,
62-
});
63-
expect(collectionMock.updateMany).toHaveBeenCalledWith(
64-
{
65-
_id: { $in: [ id ] },
66-
'marks.starred': { $exists: false },
48+
it.each([
49+
{
50+
title: 'should set starred mark when enabled is true',
51+
mark: 'starred',
52+
enabled: true,
53+
expectedQuery: {
54+
markExists: false,
6755
},
68-
expect.objectContaining({
56+
expectedUpdate: expect.objectContaining({
6957
$set: { 'marks.starred': expect.any(Number) },
70-
})
71-
);
72-
});
73-
74-
it('should clear mark when enabled is false', async () => {
58+
}),
59+
expectResult: true,
60+
},
61+
{
62+
title: 'should clear mark when enabled is false',
63+
mark: 'ignored',
64+
enabled: false,
65+
expectedQuery: {
66+
markExists: true,
67+
},
68+
expectedUpdate: { $unset: { 'marks.ignored': '' } },
69+
expectResult: false,
70+
},
71+
])('$title', async ({ mark, enabled, expectedQuery, expectedUpdate, expectResult }) => {
7572
const factory = new EventsFactory(projectId);
7673
const id = new ObjectId();
7774

@@ -80,14 +77,21 @@ describe('EventsFactory.bulkSetEventMarks', () => {
8077
modifiedCount: 1,
8178
});
8279

83-
await factory.bulkSetEventMarks([ id.toString() ], 'ignored', false);
80+
const result = await factory.bulkSetEventMarks([ id.toString() ], mark, enabled);
81+
82+
if (expectResult) {
83+
expect(result).toEqual({
84+
acknowledged: true,
85+
modifiedCount: 1,
86+
});
87+
}
8488

8589
expect(collectionMock.updateMany).toHaveBeenCalledWith(
8690
{
8791
_id: { $in: [ id ] },
88-
'marks.ignored': { $exists: true },
92+
[`marks.${mark}`]: { $exists: expectedQuery.markExists },
8993
},
90-
{ $unset: { 'marks.ignored': '' } }
94+
expectedUpdate
9195
);
9296
});
9397

test/models/eventsFactory-bulk-update-assignee.test.ts

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,36 @@ describe('EventsFactory.bulkUpdateAssignee', () => {
7070
);
7171
});
7272

73-
it('should clear assignee with null value', async () => {
74-
const factory = new EventsFactory(projectId);
75-
const a = new ObjectId();
76-
77-
collectionMock.updateMany.mockResolvedValue({
78-
acknowledged: true,
79-
modifiedCount: 1,
80-
});
81-
82-
const result = await factory.bulkUpdateAssignee([ a.toString() ], null);
83-
84-
expect(result).toEqual({
85-
acknowledged: true,
86-
modifiedCount: 1,
87-
});
88-
expect(collectionMock.updateMany).toHaveBeenCalledWith(
89-
{
90-
_id: { $in: [ a ] },
91-
assignee: { $ne: '' },
92-
},
93-
{ $set: { assignee: '' } }
94-
);
95-
});
96-
97-
it('should clear assignee when assignee is undefined', async () => {
73+
it.each([
74+
{
75+
title: 'should clear assignee with null value',
76+
assignee: null,
77+
expectResult: true,
78+
},
79+
{
80+
title: 'should clear assignee when assignee is undefined',
81+
assignee: undefined,
82+
expectResult: false,
83+
},
84+
])('$title', async ({ assignee, expectResult }) => {
9885
const factory = new EventsFactory(projectId);
9986
const a = new ObjectId();
10087

101-
await factory.bulkUpdateAssignee([ a.toString() ], undefined);
88+
if (expectResult) {
89+
collectionMock.updateMany.mockResolvedValue({
90+
acknowledged: true,
91+
modifiedCount: 1,
92+
});
93+
}
94+
95+
const result = await factory.bulkUpdateAssignee([ a.toString() ], assignee);
96+
97+
if (expectResult) {
98+
expect(result).toEqual({
99+
acknowledged: true,
100+
modifiedCount: 1,
101+
});
102+
}
102103

103104
expect(collectionMock.updateMany).toHaveBeenCalledWith(
104105
{

test/resolvers/bulk-events-helper.test.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,18 @@ describe('bulkEvents helper', () => {
1313
expect(result).toEqual([validA, validB]);
1414
});
1515

16-
it('should throw when eventIds is empty', () => {
17-
expect(() => parseBulkEventIds([])).toThrow('eventIds must contain at least one id');
18-
});
19-
20-
it('should throw when at least one id is invalid', () => {
21-
expect(() => parseBulkEventIds(['507f1f77bcf86cd799439011', 'bad-id'])).toThrow(
22-
'eventIds must contain only valid ids'
23-
);
16+
it.each([
17+
{
18+
title: 'should throw when eventIds is empty',
19+
input: [],
20+
message: 'eventIds must contain at least one id',
21+
},
22+
{
23+
title: 'should throw when at least one id is invalid',
24+
input: ['507f1f77bcf86cd799439011', 'bad-id'],
25+
message: 'eventIds must contain only valid ids',
26+
},
27+
])('$title', ({ input, message }) => {
28+
expect(() => parseBulkEventIds(input)).toThrow(message);
2429
});
2530
});

test/resolvers/event-bulk-toggle-marks.test.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,30 @@ describe('Mutation.bulkSetEventMarks', () => {
2929
});
3030
});
3131

32-
it('should throw when eventIds is empty', async () => {
32+
it.each([
33+
{
34+
title: 'should throw when eventIds is empty',
35+
eventIds: [],
36+
message: 'eventIds must contain at least one id',
37+
},
38+
{
39+
title: 'should throw for invalid ids',
40+
eventIds: ['507f1f77bcf86cd799439011', 'invalid-id'],
41+
message: 'eventIds must contain only valid ids',
42+
},
43+
])('$title', async ({ eventIds, message }) => {
3344
await expect(
3445
eventResolvers.Mutation.bulkSetEventMarks(
3546
{},
3647
{
3748
projectId: 'p1',
38-
eventIds: [],
49+
eventIds,
3950
mark: 'ignored',
4051
enabled: true,
4152
},
4253
ctx
4354
)
44-
).rejects.toThrow('eventIds must contain at least one id');
55+
).rejects.toThrow(message);
4556

4657
expect(bulkSetEventMarks).not.toHaveBeenCalled();
4758
});
@@ -107,17 +118,4 @@ describe('Mutation.bulkSetEventMarks', () => {
107118
});
108119
});
109120

110-
it('should throw for invalid ids', async () => {
111-
await expect(eventResolvers.Mutation.bulkSetEventMarks(
112-
{},
113-
{
114-
projectId: 'p1',
115-
eventIds: ['507f1f77bcf86cd799439011', 'invalid-id'],
116-
mark: 'ignored',
117-
enabled: true,
118-
},
119-
ctx
120-
)).rejects.toThrow('eventIds must contain only valid ids');
121-
expect(bulkSetEventMarks).not.toHaveBeenCalled();
122-
});
123121
});

test/resolvers/event-bulk-visit.test.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,26 @@ describe('Mutation.bulkVisitEvents', () => {
2929
(getEventsFactory as unknown as jest.Mock).mockReturnValue({ bulkVisitEvents });
3030
});
3131

32-
it('should throw when eventIds is empty', async () => {
32+
it.each([
33+
{
34+
title: 'should throw when eventIds is empty',
35+
eventIds: [],
36+
message: 'eventIds must contain at least one id',
37+
},
38+
{
39+
title: 'should throw when ids contain invalid values',
40+
eventIds: ['bad-1', 'bad-2'],
41+
message: 'eventIds must contain only valid ids',
42+
},
43+
])('$title', async ({ eventIds, message }) => {
3344
await expect(eventResolvers.Mutation.bulkVisitEvents(
3445
{},
3546
{
3647
projectId: 'p1',
37-
eventIds: [],
48+
eventIds,
3849
},
3950
ctx
40-
)).rejects.toThrow('eventIds must contain at least one id');
51+
)).rejects.toThrow(message);
4152

4253
expect(bulkVisitEvents).not.toHaveBeenCalled();
4354
});
@@ -67,15 +78,4 @@ describe('Mutation.bulkVisitEvents', () => {
6778
});
6879
});
6980

70-
it('should throw when ids contain invalid values', async () => {
71-
await expect(eventResolvers.Mutation.bulkVisitEvents(
72-
{},
73-
{
74-
projectId: 'p1',
75-
eventIds: ['bad-1', 'bad-2'],
76-
},
77-
ctx
78-
)).rejects.toThrow('eventIds must contain only valid ids');
79-
expect(bulkVisitEvents).not.toHaveBeenCalled();
80-
});
8181
});

0 commit comments

Comments
 (0)