github.com/rudderlabs/rudder-go-kit@v0.30.0/filemanager/iterator_test.go (about)

     1  package filemanager
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestObjectIterator(t *testing.T) {
    10  	newMockListSession := func(pages, itemsPerPage int) ListSession {
    11  		pagesArray := make([][]*FileInfo, pages)
    12  		for i := 0; i < pages; i++ {
    13  			page := make([]*FileInfo, itemsPerPage)
    14  			for j := 0; j < itemsPerPage; j++ {
    15  				page[j] = &FileInfo{}
    16  			}
    17  			pagesArray[i] = page
    18  		}
    19  		return &itMockListSession{
    20  			pages: pagesArray,
    21  		}
    22  	}
    23  
    24  	t.Run("no results", func(t *testing.T) {
    25  		it := NewListIterator(&mockListSession{})
    26  		if it.Next() {
    27  			t.Error("expected no results")
    28  		}
    29  	})
    30  
    31  	t.Run("single page", func(t *testing.T) {
    32  		it := NewListIterator(newMockListSession(1, 10))
    33  		var count int
    34  		for it.Next() {
    35  			require.NotNil(t, it.Get())
    36  			count++
    37  		}
    38  		require.Equal(t, 10, count)
    39  	})
    40  
    41  	t.Run("two pages", func(t *testing.T) {
    42  		it := NewListIterator(newMockListSession(2, 10))
    43  		var count int
    44  		for it.Next() {
    45  			require.NotNil(t, it.Get())
    46  			count++
    47  		}
    48  		require.Equal(t, 20, count)
    49  	})
    50  }
    51  
    52  type itMockListSession struct {
    53  	page  int
    54  	pages [][]*FileInfo
    55  }
    56  
    57  func (m *itMockListSession) Next() (fileObjects []*FileInfo, err error) {
    58  	if m.page < len(m.pages) {
    59  		fileObjects = m.pages[m.page]
    60  		m.page++
    61  	}
    62  	return fileObjects, nil
    63  }