-
Notifications
You must be signed in to change notification settings - Fork 722
Expand file tree
/
Copy pathScaleError.test.ts
More file actions
108 lines (99 loc) · 3.23 KB
/
ScaleError.test.ts
File metadata and controls
108 lines (99 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { describe, expect, it } from 'vitest';
import type { ActionRequestMessageSQS } from './scale-up';
import ScaleError from './ScaleError';
describe('ScaleError', () => {
describe('detailedMessage', () => {
it('should format message for single instance failure', () => {
const error = new ScaleError(1);
expect(error.detailedMessage).toBe(
'Failed to create instance, create fleet failed. (Failed to create 1 instance)',
);
});
it('should format message for multiple instance failures', () => {
const error = new ScaleError(3);
expect(error.detailedMessage).toBe(
'Failed to create instance, create fleet failed. (Failed to create 3 instances)',
);
});
});
describe('toBatchItemFailures', () => {
const mockMessages: ActionRequestMessageSQS[] = [
{
messageId: 'msg-1',
id: 1,
eventType: 'workflow_job',
repositoryName: 'repo',
repositoryOwner: 'owner',
installationId: 123,
repoOwnerType: 'Organization',
},
{
messageId: 'msg-2',
id: 2,
eventType: 'workflow_job',
repositoryName: 'repo',
repositoryOwner: 'owner',
installationId: 123,
repoOwnerType: 'Organization',
},
{
messageId: 'msg-3',
id: 3,
eventType: 'workflow_job',
repositoryName: 'repo',
repositoryOwner: 'owner',
installationId: 123,
repoOwnerType: 'Organization',
},
{
messageId: 'msg-4',
id: 4,
eventType: 'workflow_job',
repositoryName: 'repo',
repositoryOwner: 'owner',
installationId: 123,
repoOwnerType: 'Organization',
},
];
it.each([
{ failedCount: 1, expected: [{ itemIdentifier: 'msg-1' }], description: 'default instance count' },
{
failedCount: 2,
expected: [{ itemIdentifier: 'msg-1' }, { itemIdentifier: 'msg-2' }],
description: 'less than message count',
},
{
failedCount: 4,
expected: [
{ itemIdentifier: 'msg-1' },
{ itemIdentifier: 'msg-2' },
{ itemIdentifier: 'msg-3' },
{ itemIdentifier: 'msg-4' },
],
description: 'equal to message count',
},
{
failedCount: 10,
expected: [
{ itemIdentifier: 'msg-1' },
{ itemIdentifier: 'msg-2' },
{ itemIdentifier: 'msg-3' },
{ itemIdentifier: 'msg-4' },
],
description: 'more than message count',
},
{ failedCount: 0, expected: [], description: 'zero failed instances' },
{ failedCount: -1, expected: [], description: 'negative failed instances' },
{ failedCount: -10, expected: [], description: 'large negative failed instances' },
])('should handle $description (failedCount=$failedCount)', ({ failedCount, expected }) => {
const error = new ScaleError(failedCount);
const failures = error.toBatchItemFailures(mockMessages);
expect(failures).toEqual(expected);
});
it('should handle empty message array', () => {
const error = new ScaleError(3);
const failures = error.toBatchItemFailures([]);
expect(failures).toEqual([]);
});
});
});