1
1
import { NetworkRequest } from './NetworkRequest' ;
2
2
import { DefaultHarExporter } from './DefaultHarExporter' ;
3
+ import type { Logger } from '../utils/Logger' ;
4
+ import type { DefaultHarExporterOptions } from './DefaultHarExporterOptions' ;
3
5
import {
4
6
anyString ,
5
7
instance ,
6
8
match ,
7
9
mock ,
8
10
reset ,
11
+ spy ,
9
12
verify ,
10
13
when
11
14
} from 'ts-mockito' ;
@@ -15,31 +18,47 @@ import type { WriteStream } from 'fs';
15
18
import { EOL } from 'os' ;
16
19
17
20
describe ( 'DefaultHarExporter' , ( ) => {
18
- const buffer = mock < WriteStream > ( ) ;
21
+ const streamMock = mock < WriteStream > ( ) ;
22
+ const loggerMock = mock < Logger > ( ) ;
19
23
const networkRequest = new NetworkRequest (
20
24
'1' ,
21
25
'https://example.com' ,
22
26
'https://example.com' ,
23
27
'1'
24
28
) ;
25
- const predicate : jest . Mock < ( entry : Entry ) => Promise < unknown > | unknown > =
26
- jest . fn < ( entry : Entry ) => Promise < unknown > | unknown > ( ) ;
29
+ const predicate = jest . fn < ( entry : Entry ) => Promise < unknown > | unknown > ( ) ;
30
+ const transform = jest . fn < ( entry : Entry ) => Promise < Entry > | Entry > ( ) ;
31
+
27
32
let harExporter ! : DefaultHarExporter ;
33
+ let options ! : DefaultHarExporterOptions ;
34
+ let optionsSpy ! : DefaultHarExporterOptions ;
28
35
29
36
beforeEach ( ( ) => {
30
- harExporter = new DefaultHarExporter ( instance ( buffer ) , predicate ) ;
37
+ options = { } ;
38
+ optionsSpy = spy ( options ) ;
39
+
40
+ harExporter = new DefaultHarExporter (
41
+ instance ( loggerMock ) ,
42
+ instance ( streamMock ) ,
43
+ options
44
+ ) ;
31
45
} ) ;
32
46
33
47
afterEach ( ( ) => {
34
48
predicate . mockRestore ( ) ;
35
- reset ( buffer ) ;
49
+ transform . mockRestore ( ) ;
50
+ reset < DefaultHarExporterOptions | WriteStream | Logger > (
51
+ streamMock ,
52
+ optionsSpy ,
53
+ loggerMock
54
+ ) ;
36
55
} ) ;
37
56
38
57
describe ( 'path' , ( ) => {
39
58
it ( 'should return the path serializing buffer' , ( ) => {
40
59
// arrange
41
60
const expected = '/path/file' ;
42
- when ( buffer . path ) . thenReturn ( Buffer . from ( expected ) ) ;
61
+ when ( streamMock . path ) . thenReturn ( Buffer . from ( expected ) ) ;
43
62
44
63
// act
45
64
const result = harExporter . path ;
@@ -51,7 +70,7 @@ describe('DefaultHarExporter', () => {
51
70
it ( 'should return the path' , ( ) => {
52
71
// arrange
53
72
const expected = '/path/file' ;
54
- when ( buffer . path ) . thenReturn ( expected ) ;
73
+ when ( streamMock . path ) . thenReturn ( expected ) ;
55
74
56
75
// act
57
76
const result = harExporter . path ;
@@ -67,28 +86,30 @@ describe('DefaultHarExporter', () => {
67
86
harExporter . end ( ) ;
68
87
69
88
// assert
70
- verify ( buffer . end ( ) ) . once ( ) ;
89
+ verify ( streamMock . end ( ) ) . once ( ) ;
71
90
} ) ;
72
91
} ) ;
73
92
74
93
describe ( 'write' , ( ) => {
75
94
it ( 'should write the entry to the buffer' , async ( ) => {
76
95
// arrange
77
96
// @ts -expect-error type mismatch
78
- when ( buffer . closed ) . thenReturn ( false ) ;
97
+ when ( streamMock . closed ) . thenReturn ( false ) ;
98
+ when ( optionsSpy . predicate ) . thenReturn ( predicate ) ;
79
99
predicate . mockReturnValue ( false ) ;
80
100
81
101
// act
82
102
await harExporter . write ( networkRequest ) ;
83
103
84
104
// assert
85
- verify ( buffer . write ( match ( `${ EOL } ` ) ) ) . once ( ) ;
105
+ verify ( streamMock . write ( match ( `${ EOL } ` ) ) ) . once ( ) ;
86
106
} ) ;
87
107
88
108
it ( 'should write the entry to the buffer if the predicate returns throws an error' , async ( ) => {
89
109
// arrange
90
110
// @ts -expect-error type mismatch
91
- when ( buffer . closed ) . thenReturn ( false ) ;
111
+ when ( streamMock . closed ) . thenReturn ( false ) ;
112
+ when ( optionsSpy . predicate ) . thenReturn ( predicate ) ;
92
113
predicate . mockReturnValue (
93
114
Promise . reject ( new Error ( 'something went wrong' ) )
94
115
) ;
@@ -97,33 +118,67 @@ describe('DefaultHarExporter', () => {
97
118
await harExporter . write ( networkRequest ) ;
98
119
99
120
// assert
100
- verify ( buffer . write ( match ( `${ EOL } ` ) ) ) . once ( ) ;
121
+ verify ( streamMock . write ( match ( `${ EOL } ` ) ) ) . once ( ) ;
122
+ } ) ;
123
+
124
+ it ( 'should transform the entry before writing to the buffer' , async ( ) => {
125
+ // arrange
126
+ const entry = { foo : 'bar' } as unknown as Entry ;
127
+ const entryString = JSON . stringify ( entry ) ;
128
+ // @ts -expect-error type mismatch
129
+ when ( streamMock . closed ) . thenReturn ( false ) ;
130
+ when ( optionsSpy . transform ) . thenReturn ( transform ) ;
131
+ transform . mockReturnValue ( Promise . resolve ( entry ) ) ;
132
+
133
+ // act
134
+ await harExporter . write ( networkRequest ) ;
135
+
136
+ // assert
137
+ verify ( streamMock . write ( match ( `${ entryString } ${ EOL } ` ) ) ) . once ( ) ;
138
+ } ) ;
139
+
140
+ it ( 'should skip the entry when the transformation is failed with an error' , async ( ) => {
141
+ // arrange
142
+ // @ts -expect-error type mismatch
143
+ when ( streamMock . closed ) . thenReturn ( false ) ;
144
+ when ( optionsSpy . transform ) . thenReturn ( transform ) ;
145
+ transform . mockReturnValue (
146
+ Promise . reject ( new Error ( 'Something went wrong.' ) )
147
+ ) ;
148
+
149
+ // act
150
+ await harExporter . write ( networkRequest ) ;
151
+
152
+ // assert
153
+ verify ( streamMock . write ( anyString ( ) ) ) . never ( ) ;
101
154
} ) ;
102
155
103
156
it ( 'should not write the entry to the buffer if the predicate returns true' , async ( ) => {
104
157
// arrange
105
158
// @ts -expect-error type mismatch
106
- when ( buffer . closed ) . thenReturn ( false ) ;
159
+ when ( streamMock . closed ) . thenReturn ( false ) ;
160
+ when ( optionsSpy . predicate ) . thenReturn ( predicate ) ;
107
161
predicate . mockReturnValue ( true ) ;
108
162
109
163
// act
110
164
await harExporter . write ( networkRequest ) ;
111
165
112
166
// assert
113
- verify ( buffer . write ( anyString ( ) ) ) . never ( ) ;
167
+ verify ( streamMock . write ( anyString ( ) ) ) . never ( ) ;
114
168
} ) ;
115
169
116
170
it ( 'should not write the entry to the buffer if the buffer is closed' , async ( ) => {
117
171
// arrange
118
172
// @ts -expect-error type mismatch
119
- when ( buffer . closed ) . thenReturn ( true ) ;
173
+ when ( streamMock . closed ) . thenReturn ( true ) ;
174
+ when ( optionsSpy . predicate ) . thenReturn ( predicate ) ;
120
175
predicate . mockReturnValue ( false ) ;
121
176
122
177
// act
123
178
await harExporter . write ( networkRequest ) ;
124
179
125
180
// assert
126
- verify ( buffer . write ( anyString ( ) ) ) . never ( ) ;
181
+ verify ( streamMock . write ( anyString ( ) ) ) . never ( ) ;
127
182
} ) ;
128
183
} ) ;
129
184
} ) ;
0 commit comments