package storage

import (
	"context"
	"testing"

	"github.com/fsouza/fake-gcs-server/fakestorage"
	"github.com/stretchr/testify/require"
)

func TestGcs_ListObjects(t *testing.T) {
	bucketName := "bucket"

	mock := fakestorage.NewServer([]fakestorage.Object{
		{
			ObjectAttrs: fakestorage.ObjectAttrs{
				BucketName: bucketName,
				Name:       "prefix/01.jpg",
			},
		},
		{
			ObjectAttrs: fakestorage.ObjectAttrs{
				BucketName: bucketName,
				Name:       "prefix/02.jpg",
			},
		},
		{
			ObjectAttrs: fakestorage.ObjectAttrs{
				BucketName: bucketName,
				Name:       "prefix/03.jpg",
			},
		},
		{
			ObjectAttrs: fakestorage.ObjectAttrs{
				BucketName: bucketName,
				Name:       "prefix/04.jpg",
			},
		},
	})

	client := &GcsClient{mock.Client()}

	expected := []string{
		"gs://bucket/prefix/01.jpg",
		"gs://bucket/prefix/02.jpg",
		"gs://bucket/prefix/03.jpg",
		"gs://bucket/prefix/04.jpg",
	}

	actual, err := client.ListObjects(context.Background(), bucketName, "prefix/")
	require.NoError(t, err)
	require.Equal(t, expected, actual)
}
