1
0
Fork 0
golang-github-meilisearch-m.../index_test.go
Daniel Baumann 5d4914ed7f
Adding upstream version 0.31.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-18 21:42:39 +02:00

422 lines
9.5 KiB
Go

package meilisearch
import (
"crypto/tls"
"github.com/stretchr/testify/require"
"testing"
)
func TestIndex_Delete(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
type args struct {
createUid []string
deleteUid []string
}
tests := []struct {
name string
client ServiceManager
args args
}{
{
name: "TestIndexDeleteOneIndex",
client: sv,
args: args{
createUid: []string{"TestIndexDeleteOneIndex"},
deleteUid: []string{"TestIndexDeleteOneIndex"},
},
},
{
name: "TestIndexDeleteOneIndexWithCustomClient",
client: customSv,
args: args{
createUid: []string{"TestIndexDeleteOneIndexWithCustomClient"},
deleteUid: []string{"TestIndexDeleteOneIndexWithCustomClient"},
},
},
{
name: "TestIndexDeleteMultipleIndex",
client: sv,
args: args{
createUid: []string{
"TestIndexDeleteMultipleIndex_1",
"TestIndexDeleteMultipleIndex_2",
"TestIndexDeleteMultipleIndex_3",
"TestIndexDeleteMultipleIndex_4",
"TestIndexDeleteMultipleIndex_5",
},
deleteUid: []string{
"TestIndexDeleteMultipleIndex_1",
"TestIndexDeleteMultipleIndex_2",
"TestIndexDeleteMultipleIndex_3",
"TestIndexDeleteMultipleIndex_4",
"TestIndexDeleteMultipleIndex_5",
},
},
},
{
name: "TestIndexDeleteNotExistingIndex",
client: sv,
args: args{
createUid: []string{},
deleteUid: []string{"TestIndexDeleteNotExistingIndex"},
},
},
{
name: "TestIndexDeleteMultipleNotExistingIndex",
client: sv,
args: args{
createUid: []string{},
deleteUid: []string{
"TestIndexDeleteMultipleNotExistingIndex_1",
"TestIndexDeleteMultipleNotExistingIndex_2",
"TestIndexDeleteMultipleNotExistingIndex_3",
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.client
t.Cleanup(cleanup(c))
for _, uid := range tt.args.createUid {
_, err := setUpEmptyIndex(sv, &IndexConfig{Uid: uid})
require.NoError(t, err, "CreateIndex() in DeleteTest error should be nil")
}
for k := range tt.args.deleteUid {
i := c.Index(tt.args.deleteUid[k])
gotResp, err := i.Delete(tt.args.deleteUid[k])
require.True(t, gotResp)
require.NoError(t, err)
}
})
}
}
func TestIndex_GetStats(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
type args struct {
UID string
client ServiceManager
}
tests := []struct {
name string
args args
wantResp *StatsIndex
}{
{
name: "TestIndexBasicGetStats",
args: args{
UID: "TestIndexBasicGetStats",
client: sv,
},
wantResp: &StatsIndex{
NumberOfDocuments: 6,
IsIndexing: false,
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
RawDocumentDbSize: 4096,
AvgDocumentSize: 674,
},
},
{
name: "TestIndexGetStatsWithCustomClient",
args: args{
UID: "TestIndexGetStatsWithCustomClient",
client: customSv,
},
wantResp: &StatsIndex{
NumberOfDocuments: 6,
IsIndexing: false,
FieldDistribution: map[string]int64{"book_id": 6, "title": 6},
RawDocumentDbSize: 4096,
AvgDocumentSize: 674,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
setUpBasicIndex(sv, tt.args.UID)
c := tt.args.client
i := c.Index(tt.args.UID)
t.Cleanup(cleanup(c))
gotResp, err := i.GetStats()
require.NoError(t, err)
require.Equal(t, tt.wantResp, gotResp)
})
}
}
func Test_newIndex(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
type args struct {
client ServiceManager
uid string
}
tests := []struct {
name string
args args
want IndexManager
}{
{
name: "TestBasicNewIndex",
args: args{
client: sv,
uid: "TestBasicNewIndex",
},
want: sv.Index("TestBasicNewIndex"),
},
{
name: "TestNewIndexCustomClient",
args: args{
client: sv,
uid: "TestNewIndexCustomClient",
},
want: customSv.Index("TestNewIndexCustomClient"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.args.client
t.Cleanup(cleanup(c))
gotIdx := c.Index(tt.args.uid)
task, err := c.CreateIndex(&IndexConfig{Uid: tt.args.uid})
require.NoError(t, err)
testWaitForTask(t, gotIdx, task)
gotIdxResult, err := gotIdx.FetchInfo()
require.NoError(t, err)
wantIdxResult, err := tt.want.FetchInfo()
require.NoError(t, err)
require.Equal(t, gotIdxResult.UID, wantIdxResult.UID)
// Timestamps should be empty unless fetched
require.NotZero(t, gotIdxResult.CreatedAt)
require.NotZero(t, gotIdxResult.UpdatedAt)
})
}
}
func TestIndex_FetchInfo(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
broken := setup(t, "", WithAPIKey("wrong"))
type args struct {
UID string
client ServiceManager
}
tests := []struct {
name string
args args
wantResp *IndexResult
}{
{
name: "TestIndexBasicFetchInfo",
args: args{
UID: "TestIndexBasicFetchInfo",
client: sv,
},
wantResp: &IndexResult{
UID: "TestIndexBasicFetchInfo",
PrimaryKey: "book_id",
},
},
{
name: "TestIndexFetchInfoWithCustomClient",
args: args{
UID: "TestIndexFetchInfoWithCustomClient",
client: customSv,
},
wantResp: &IndexResult{
UID: "TestIndexFetchInfoWithCustomClient",
PrimaryKey: "book_id",
},
},
{
name: "TestIndexFetchInfoWithBrokenClient",
args: args{
UID: "TestIndexFetchInfoWithCustomClient",
client: broken,
},
wantResp: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
setUpBasicIndex(sv, tt.args.UID)
c := tt.args.client
t.Cleanup(cleanup(c))
i := c.Index(tt.args.UID)
gotResp, err := i.FetchInfo()
if tt.wantResp == nil {
require.Error(t, err)
require.Nil(t, gotResp)
} else {
require.NoError(t, err)
require.Equal(t, tt.wantResp.UID, gotResp.UID)
require.Equal(t, tt.wantResp.PrimaryKey, gotResp.PrimaryKey)
// Make sure that timestamps are also fetched and are updated
require.NotZero(t, gotResp.CreatedAt)
require.NotZero(t, gotResp.UpdatedAt)
}
})
}
}
func TestIndex_FetchPrimaryKey(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
type args struct {
UID string
client ServiceManager
}
tests := []struct {
name string
args args
wantPrimaryKey string
}{
{
name: "TestIndexBasicFetchPrimaryKey",
args: args{
UID: "TestIndexBasicFetchPrimaryKey",
client: sv,
},
wantPrimaryKey: "book_id",
},
{
name: "TestIndexFetchPrimaryKeyWithCustomClient",
args: args{
UID: "TestIndexFetchPrimaryKeyWithCustomClient",
client: customSv,
},
wantPrimaryKey: "book_id",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
setUpBasicIndex(tt.args.client, tt.args.UID)
c := tt.args.client
i := c.Index(tt.args.UID)
t.Cleanup(cleanup(c))
gotPrimaryKey, err := i.FetchPrimaryKey()
require.NoError(t, err)
require.Equal(t, &tt.wantPrimaryKey, gotPrimaryKey)
})
}
}
func TestIndex_UpdateIndex(t *testing.T) {
sv := setup(t, "")
customSv := setup(t, "", WithCustomClientWithTLS(&tls.Config{
InsecureSkipVerify: true,
}))
type args struct {
primaryKey string
config IndexConfig
client ServiceManager
}
tests := []struct {
name string
args args
wantResp *IndexResult
}{
{
name: "TestIndexBasicUpdateIndex",
args: args{
client: sv,
config: IndexConfig{
Uid: "indexUID",
},
primaryKey: "book_id",
},
wantResp: &IndexResult{
UID: "indexUID",
PrimaryKey: "book_id",
},
},
{
name: "TestIndexUpdateIndexWithCustomClient",
args: args{
client: customSv,
config: IndexConfig{
Uid: "indexUID",
},
primaryKey: "book_id",
},
wantResp: &IndexResult{
UID: "indexUID",
PrimaryKey: "book_id",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.args.client
t.Cleanup(cleanup(c))
i, err := setUpEmptyIndex(tt.args.client, &tt.args.config)
require.NoError(t, err)
require.Equal(t, tt.args.config.Uid, i.UID)
// Store original timestamps
createdAt := i.CreatedAt
updatedAt := i.UpdatedAt
gotResp, err := i.UpdateIndex(tt.args.primaryKey)
require.NoError(t, err)
_, err = c.WaitForTask(gotResp.TaskUID, 0)
require.NoError(t, err)
require.NoError(t, err)
require.Equal(t, tt.wantResp.UID, gotResp.IndexUID)
gotIndex, err := c.GetIndex(tt.args.config.Uid)
require.NoError(t, err)
require.Equal(t, tt.wantResp.PrimaryKey, gotIndex.PrimaryKey)
// Make sure that timestamps were correctly updated as well
require.Equal(t, createdAt, gotIndex.CreatedAt)
require.NotEqual(t, updatedAt, gotIndex.UpdatedAt)
})
}
}
func TestIndexManagerAndReaders(t *testing.T) {
c := setup(t, "")
idx := c.Index("indexUID")
require.NotNil(t, idx)
require.NotNil(t, idx.GetIndexReader())
require.NotNil(t, idx.GetTaskReader())
require.NotNil(t, idx.GetSettingsManager())
require.NotNil(t, idx.GetSettingsReader())
require.NotNil(t, idx.GetSearch())
require.NotNil(t, idx.GetDocumentManager())
require.NotNil(t, idx.GetDocumentReader())
}