1
+ /* eslint-disable-next-line id-length */
1
2
import * as t from 'vitest' ;
3
+
2
4
import Sender from './sender' ;
3
5
4
6
t . describe ( 'Sender' , ( ) => {
@@ -24,60 +26,71 @@ t.describe('Sender', () => {
24
26
t . it ( 'should flush periodically' , async ( ) => {
25
27
sender . start ( ) ;
26
28
sender . enqueue ( 'event1' ) ;
27
- await new Promise ( resolve => setTimeout ( resolve , 100 ) ) ;
29
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) ) ;
28
30
t . expect ( sendFn ) . toHaveBeenCalledWith ( [ 'event1' ] ) ;
29
31
} ) ;
30
32
31
- t . it ( 'should handle failure and reset interval after successful send' , async ( ) => {
32
- let sendCount = 0 ;
33
- sendFn = t . vi . fn ( ) . mockImplementation ( ( ) => {
34
- sendCount ++ ;
35
- return sendCount === 1 ? Promise . reject ( new Error ( 'Failed' ) ) : Promise . resolve ( ) ;
36
- } ) ;
37
- sender = new Sender ( { batchSize : 100 , baseIntervalMs : 50 , sendFn } ) ; // Short interval
38
- sender . start ( ) ;
33
+ t . it (
34
+ 'should handle failure and reset interval after successful send' ,
35
+ async ( ) => {
36
+ let sendCount = 0 ;
37
+ sendFn = t . vi . fn ( ) . mockImplementation ( async ( ) => {
38
+ sendCount += 1 ;
39
+ return sendCount === 1
40
+ ? Promise . reject ( new Error ( 'Failed' ) )
41
+ : Promise . resolve ( ) ;
42
+ } ) ;
43
+ sender = new Sender ( { batchSize : 100 , baseIntervalMs : 50 , sendFn } ) ; // Short interval
44
+ sender . start ( ) ;
39
45
40
- sender . enqueue ( 'event1' ) ;
41
- t . expect ( sendFn ) . toHaveBeenCalledTimes ( 0 ) ;
46
+ sender . enqueue ( 'event1' ) ;
47
+ t . expect ( sendFn ) . toHaveBeenCalledTimes ( 0 ) ;
42
48
43
- // Wait for initial send
44
- await new Promise ( resolve => setTimeout ( resolve , 51 ) ) ;
45
- t . expect ( sendFn ) . toHaveBeenCalledTimes ( 1 ) ;
49
+ // Wait for initial send
50
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 51 ) ) ;
51
+ t . expect ( sendFn ) . toHaveBeenCalledTimes ( 1 ) ;
46
52
47
- // Wait for first attempt + retry
48
- await new Promise ( resolve => setTimeout ( resolve , 101 ) ) ;
49
- t . expect ( sendFn ) . toHaveBeenCalledTimes ( 2 ) ; // First attempt fails, then succeeds
53
+ // Wait for first attempt + retry
54
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 101 ) ) ;
55
+ t . expect ( sendFn ) . toHaveBeenCalledTimes ( 2 ) ; // First attempt fails, then succeeds
50
56
51
- // Wait for next scheduled send (should happen at original interval)
52
- sender . enqueue ( 'event2' ) ;
53
- await new Promise ( resolve => setTimeout ( resolve , 51 ) ) ;
54
- t . expect ( sendFn ) . toHaveBeenCalledTimes ( 3 ) ;
55
- t . expect ( sendFn ) . toHaveBeenCalledWith ( [ 'event2' ] ) ;
56
- } ) ;
57
+ // Wait for next scheduled send (should happen at original interval)
58
+ sender . enqueue ( 'event2' ) ;
59
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 51 ) ) ;
60
+ t . expect ( sendFn ) . toHaveBeenCalledTimes ( 3 ) ;
61
+ t . expect ( sendFn ) . toHaveBeenCalledWith ( [ 'event2' ] ) ;
62
+ } ,
63
+ ) ;
57
64
58
65
t . it ( 'should not send when batch is empty' , async ( ) => {
59
66
sender . start ( ) ;
60
- await new Promise ( resolve => setTimeout ( resolve , 51 ) ) ;
67
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 51 ) ) ;
61
68
t . expect ( sendFn ) . not . toHaveBeenCalled ( ) ; // No send if batch is empty
62
69
} ) ;
63
70
64
71
t . it ( 'should handle concurrent sends properly' , async ( ) => {
65
- let resolveSend : ( value ?: unknown ) => void ;
66
- sendFn = t . vi . fn ( ) . mockImplementation ( ( ) => new Promise ( resolve => { resolveSend = resolve ; } ) ) ;
72
+ let resolveSend ! : ( value ?: unknown ) => void ;
73
+ sendFn = t . vi . fn ( ) . mockImplementation (
74
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
75
+ ( ) =>
76
+ new Promise ( ( resolve ) => {
77
+ resolveSend = resolve ;
78
+ } ) ,
79
+ ) ;
67
80
sender = new Sender ( { batchSize : 100 , baseIntervalMs : 1000 , sendFn } ) ;
68
81
sender . start ( ) ;
69
82
70
83
sender . enqueue ( 'event1' ) ;
71
- await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
84
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
72
85
t . expect ( sendFn ) . toHaveBeenCalledWith ( [ 'event1' ] ) ;
73
86
74
87
sender . enqueue ( 'event2' ) ; // Enqueue while sending
75
- resolveSend ! ( ) ; // Finish the first send
88
+ resolveSend ( ) ; // Finish the first send
76
89
await Promise . resolve ( ) ; // Allow async flush to complete
77
90
78
91
// Wait for next scheduled send
79
- await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
92
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
80
93
t . expect ( sendFn ) . toHaveBeenCalledWith ( [ 'event2' ] ) ;
81
94
t . expect ( sendFn ) . toHaveBeenCalledTimes ( 2 ) ;
82
95
} ) ;
83
- } ) ;
96
+ } ) ;
0 commit comments