@@ -9,43 +9,44 @@ const parseCSV = (csvPath) => {
99 const result = [ ] ;
1010 return new Promise ( ( resolve , reject ) => {
1111 csv ( { noheader : false } )
12- . fromFile ( csvPath )
13- . on ( 'json' , ( obj ) => {
14- result . push ( obj ) ;
15- } )
16- . on ( 'done' , ( err ) => {
17- if ( err ) {
18- reject ( err ) ;
19- } else {
20- resolve ( result ) ;
21- }
22- } ) ;
12+ . fromFile ( csvPath )
13+ . on ( 'json' , ( obj ) => {
14+ result . push ( obj ) ;
15+ } )
16+ . on ( 'done' , ( err ) => {
17+ if ( err ) {
18+ reject ( err ) ;
19+ } else {
20+ resolve ( result ) ;
21+ }
22+ } ) ;
2323 } ) ;
2424} ;
2525
26- const readFirstLine = csvPath => new Promise ( ( resolve , reject ) => {
27- const rs = fs . createReadStream ( csvPath , { encoding : 'utf8' } ) ;
28- let acc = '' ;
29- let pos = 0 ;
30- let index ;
31- rs . on ( 'data' , ( chunk ) => {
32- index = chunk . indexOf ( '\n' ) ;
33- acc += chunk ;
34- if ( index !== - 1 ) {
35- rs . close ( ) ;
36- } else {
37- pos += chunk . length ;
38- }
39- } )
40- . on ( 'close' , ( ) => {
41- resolve ( acc . slice ( 0 , pos + index ) ) ;
42- } )
43- . on ( 'error' , ( err ) => {
44- reject ( err ) ;
26+ const readFirstLine = ( csvPath ) =>
27+ new Promise ( ( resolve , reject ) => {
28+ const rs = fs . createReadStream ( csvPath , { encoding : 'utf8' } ) ;
29+ let acc = '' ;
30+ let pos = 0 ;
31+ let index ;
32+ rs . on ( 'data' , ( chunk ) => {
33+ index = chunk . indexOf ( '\n' ) ;
34+ acc += chunk ;
35+ if ( index !== - 1 ) {
36+ rs . close ( ) ;
37+ } else {
38+ pos += chunk . length ;
39+ }
40+ } )
41+ . on ( 'close' , ( ) => {
42+ resolve ( acc . slice ( 0 , pos + index ) ) ;
43+ } )
44+ . on ( 'error' , ( err ) => {
45+ reject ( err ) ;
46+ } ) ;
4547 } ) ;
46- } ) ;
4748
48- const sleep = ms => new Promise ( resolve => setTimeout ( resolve , ms ) ) ;
49+ const sleep = ( ms ) => new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
4950
5051const csvScript = async ( args ) => {
5152 const csvPath = args . path ;
@@ -72,6 +73,21 @@ const csvScript = async (args) => {
7273 const body = row . body ;
7374 const timeout = args . timeout ;
7475 const skipcertificate = row . skipCertificate || false ;
76+ const expectedStatusCode = row . expectedStatusCode ? parseInt ( row . expectedStatusCode , 10 ) : null ;
77+ let customDiff = row . customDiff || '{}' ;
78+ let customCompare = row . customCompare || '{}' ;
79+
80+ try {
81+ customDiff = JSON . parse ( customDiff ) ;
82+ } catch ( err ) {
83+ throw new Error ( 'invalid json provided to customDiff' ) ;
84+ }
85+
86+ try {
87+ customCompare = JSON . parse ( customCompare ) ;
88+ } catch ( err ) {
89+ throw new Error ( 'invalid json provided to customCompare' ) ;
90+ }
7591
7692 if ( url1 . charAt ( 0 ) === '#' ) {
7793 continue ; // eslint-disable-line
@@ -99,6 +115,15 @@ const csvScript = async (args) => {
99115 }
100116 sortKeys . push ( 'id' ) ;
101117
118+ const skipHeadersInputs = row . skipHeaders || '' ;
119+ const skipHeaders = [ ] ;
120+ if ( skipHeadersInputs ) {
121+ const list = skipHeadersInputs . split ( '|' ) ;
122+ list . forEach ( ( splitHeaders ) => {
123+ skipHeaders . push ( splitHeaders ) ;
124+ } ) ;
125+ }
126+
102127 const ignore = row . ignore ;
103128 const ignores = [ ] ;
104129 if ( ignore ) {
@@ -116,7 +141,11 @@ const csvScript = async (args) => {
116141 headers,
117142 timeout,
118143 skipcertificate,
144+ expectedStatusCode,
145+ skipHeaders,
119146 ignore : ignores ,
147+ customDiff,
148+ customCompare,
120149 } ;
121150
122151 try {
@@ -128,8 +157,12 @@ const csvScript = async (args) => {
128157 const diff = await core . diffURLs ( url1 , url2 , options ) ;
129158
130159 if ( args . diffheaders ) {
160+ options . skipHeaders . forEach ( ( h ) => {
161+ delete diff . leftHeaders [ h ] ;
162+ delete diff . rightHeaders [ h ] ;
163+ } ) ;
131164 const headersDiff = await core . diffJSON ( diff . leftHeaders , diff . rightHeaders ) ;
132- if ( headersDiff . length !== 0 ) {
165+ if ( headersDiff . length !== 0 && headersDiff [ 0 ] . diff !== 'none' ) {
133166 if ( diff . differences [ 0 ] . diff === 'none' ) {
134167 diff . differences . splice ( 0 , 1 ) ;
135168 }
@@ -183,6 +216,7 @@ const csvScript = async (args) => {
183216
184217 console . log ( output ) ;
185218 } catch ( err ) {
219+ console . log ( err ) ;
186220 console . log ( chalk . red ( err . toString ( ) ) , '\n' ) ;
187221 }
188222 }
@@ -192,6 +226,7 @@ const csvScript = async (args) => {
192226 }
193227} ;
194228
195- module . exports = args => csvScript ( args ) . catch ( ( err ) => {
196- console . log ( chalk . red ( err . toString ( ) ) ) ;
197- } ) ;
229+ module . exports = ( args ) =>
230+ csvScript ( args ) . catch ( ( err ) => {
231+ console . log ( chalk . red ( err . toString ( ) ) ) ;
232+ } ) ;
0 commit comments