@@ -7,8 +7,6 @@ const creds = require('./service-account-creds.json');
77const doc = docs . private ;
88
99let sheet ;
10- let rows ;
11- let row ;
1210
1311// having some issues caused by blank headers, so we add one here
1412const HEADERS = [ 'numbers' , 'letters' , '' , 'col1' , 'col2' , 'col3' ] ;
@@ -38,9 +36,9 @@ describe('Row-based operations', () => {
3836 if ( process . env . NODE_ENV === 'ci' ) afterEach ( async ( ) => delay ( 500 ) ) ;
3937
4038 describe ( 'fetching rows' , ( ) => {
39+ let rows ;
4140 it ( 'can fetch multiple rows' , async ( ) => {
4241 rows = await sheet . getRows ( ) ;
43- row = rows [ 0 ] ;
4442 expect ( rows . length ) . toEqual ( INITIAL_DATA . length ) ;
4543 } ) ;
4644
@@ -69,6 +67,8 @@ describe('Row-based operations', () => {
6967 } ) ;
7068
7169 describe ( 'adding rows' , ( ) => {
70+ let rows ;
71+ let row ;
7272 it ( 'can add a row with an array of values' , async ( ) => {
7373 const newRowData = [ '5' , 'F' ] ;
7474 row = await sheet . addRow ( newRowData ) ;
@@ -140,6 +140,8 @@ describe('Row-based operations', () => {
140140 } ) ;
141141
142142 describe ( 'deleting rows' , ( ) => {
143+ let rows ;
144+ let row ;
143145 it ( 'can delete a row' , async ( ) => {
144146 rows = await sheet . getRows ( ) ;
145147
@@ -169,6 +171,8 @@ describe('Row-based operations', () => {
169171 } ) ;
170172
171173 describe ( 'updating rows' , ( ) => {
174+ let rows ;
175+ let row ;
172176 it ( 'can update a row' , async ( ) => {
173177 rows = await sheet . getRows ( ) ;
174178 row = rows [ 0 ] ;
@@ -293,6 +297,7 @@ describe('Row-based operations', () => {
293297 } ) ;
294298
295299 describe ( 'header validation and cleanup' , ( ) => {
300+ let rows ;
296301 beforeAll ( async ( ) => {
297302 sheet . loadCells ( 'A1:E1' ) ;
298303 } ) ;
@@ -359,4 +364,49 @@ describe('Row-based operations', () => {
359364 await expect ( sheet . getRows ( ) ) . rejects . toThrow ( ) ;
360365 } ) ;
361366 } ) ;
367+
368+ describe ( 'custom header row index' , ( ) => {
369+ const CUSTOM_HEADER_ROW_INDEX = 3 ;
370+ let newSheet ;
371+
372+ afterAll ( async ( ) => {
373+ await newSheet . delete ( ) ;
374+ } ) ;
375+
376+ it ( 'can set custom header row index while adding a sheet' , async ( ) => {
377+ newSheet = await doc . addSheet ( {
378+ headerValues : [ 'a' , 'b' , 'c' ] ,
379+ headerRowIndex : CUSTOM_HEADER_ROW_INDEX ,
380+ title : `custom header index sheet ${ + new Date ( ) } ` ,
381+ gridProperties : { rowCount : INITIAL_ROW_COUNT } ,
382+ } ) ;
383+ await newSheet . loadCells ( ) ;
384+ const aHeaderCell = newSheet . getCell ( CUSTOM_HEADER_ROW_INDEX - 1 , 0 ) ;
385+ expect ( aHeaderCell . value ) . toEqual ( 'a' ) ;
386+ } ) ;
387+
388+ it ( 'can load existing header row from custom index' , async ( ) => {
389+ newSheet . resetLocalCache ( true ) ;
390+
391+ // first row is empty so this should fail
392+ await expect ( newSheet . getRows ( ) ) . rejects . toThrow ( ) ;
393+
394+ // load header row from custom index
395+ await newSheet . loadHeaderRow ( CUSTOM_HEADER_ROW_INDEX ) ;
396+ expect ( newSheet . headerValues [ 0 ] ) . toEqual ( 'a' ) ;
397+
398+ await newSheet . addRows ( [
399+ { a : 'a1' , b : 'b1' } ,
400+ { a : 'a2' , b : 'b2' } ,
401+ ] ) ;
402+
403+ const rows = await newSheet . getRows ( ) ;
404+ expect ( rows [ 0 ] . a ) . toEqual ( 'a1' ) ;
405+
406+ await newSheet . loadCells ( ) ;
407+ // now verify header and data are in the right place, using the cell-based methods
408+ const aDataCell = newSheet . getCell ( CUSTOM_HEADER_ROW_INDEX , 0 ) ;
409+ expect ( aDataCell . value ) . toEqual ( 'a1' ) ;
410+ } ) ;
411+ } ) ;
362412} ) ;
0 commit comments