github.com/artpar/rclone@v1.67.3/fs/list/list_test.go (about)

     1  package list
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/artpar/rclone/fs"
     9  	"github.com/artpar/rclone/fstest/mockdir"
    10  	"github.com/artpar/rclone/fstest/mockobject"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  // NB integration tests for DirSorted are in
    16  // fs/operations/listdirsorted_test.go
    17  
    18  func TestFilterAndSortIncludeAll(t *testing.T) {
    19  	da := mockdir.New("a")
    20  	oA := mockobject.Object("A")
    21  	db := mockdir.New("b")
    22  	oB := mockobject.Object("B")
    23  	dc := mockdir.New("c")
    24  	oC := mockobject.Object("C")
    25  	dd := mockdir.New("d")
    26  	oD := mockobject.Object("D")
    27  	entries := fs.DirEntries{da, oA, db, oB, dc, oC, dd, oD}
    28  	includeObject := func(ctx context.Context, o fs.Object) bool {
    29  		return o != oB
    30  	}
    31  	includeDirectory := func(remote string) (bool, error) {
    32  		return remote != "c", nil
    33  	}
    34  	// no filter
    35  	newEntries, err := filterAndSortDir(context.Background(), entries, true, "", includeObject, includeDirectory)
    36  	require.NoError(t, err)
    37  	assert.Equal(t,
    38  		newEntries,
    39  		fs.DirEntries{oA, oB, oC, oD, da, db, dc, dd},
    40  	)
    41  	// filter
    42  	newEntries, err = filterAndSortDir(context.Background(), entries, false, "", includeObject, includeDirectory)
    43  	require.NoError(t, err)
    44  	assert.Equal(t,
    45  		newEntries,
    46  		fs.DirEntries{oA, oC, oD, da, db, dd},
    47  	)
    48  }
    49  
    50  func TestFilterAndSortCheckDir(t *testing.T) {
    51  	// Check the different kinds of error when listing "dir"
    52  	da := mockdir.New("dir/")
    53  	oA := mockobject.Object("diR/a")
    54  	db := mockdir.New("dir/b")
    55  	oB := mockobject.Object("dir/B/sub")
    56  	dc := mockdir.New("dir/c")
    57  	oC := mockobject.Object("dir/C")
    58  	dd := mockdir.New("dir/d")
    59  	oD := mockobject.Object("dir/D")
    60  	entries := fs.DirEntries{da, oA, db, oB, dc, oC, dd, oD}
    61  	newEntries, err := filterAndSortDir(context.Background(), entries, true, "dir", nil, nil)
    62  	require.NoError(t, err)
    63  	assert.Equal(t,
    64  		newEntries,
    65  		fs.DirEntries{oC, oD, db, dc, dd},
    66  	)
    67  }
    68  
    69  func TestFilterAndSortCheckDirRoot(t *testing.T) {
    70  	// Check the different kinds of error when listing the root ""
    71  	da := mockdir.New("")
    72  	oA := mockobject.Object("A")
    73  	db := mockdir.New("b")
    74  	oB := mockobject.Object("B/sub")
    75  	dc := mockdir.New("c")
    76  	oC := mockobject.Object("C")
    77  	dd := mockdir.New("d")
    78  	oD := mockobject.Object("D")
    79  	entries := fs.DirEntries{da, oA, db, oB, dc, oC, dd, oD}
    80  	newEntries, err := filterAndSortDir(context.Background(), entries, true, "", nil, nil)
    81  	require.NoError(t, err)
    82  	assert.Equal(t,
    83  		newEntries,
    84  		fs.DirEntries{oA, oC, oD, db, dc, dd},
    85  	)
    86  }
    87  
    88  type unknownDirEntry string
    89  
    90  func (o unknownDirEntry) Fs() fs.Info                               { return fs.Unknown }
    91  func (o unknownDirEntry) String() string                            { return string(o) }
    92  func (o unknownDirEntry) Remote() string                            { return string(o) }
    93  func (o unknownDirEntry) ModTime(ctx context.Context) (t time.Time) { return t }
    94  func (o unknownDirEntry) Size() int64                               { return 0 }
    95  
    96  func TestFilterAndSortUnknown(t *testing.T) {
    97  	// Check that an unknown entry produces an error
    98  	da := mockdir.New("")
    99  	oA := mockobject.Object("A")
   100  	ub := unknownDirEntry("b")
   101  	oB := mockobject.Object("B/sub")
   102  	entries := fs.DirEntries{da, oA, ub, oB}
   103  	newEntries, err := filterAndSortDir(context.Background(), entries, true, "", nil, nil)
   104  	assert.Error(t, err, "error")
   105  	assert.Nil(t, newEntries)
   106  }