Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package objects | |
import ( | |
"context" | |
"errors" | |
"testing" | |
"github.com/go-openapi/strfmt" | |
"github.com/sirupsen/logrus/hooks/test" | |
"github.com/stretchr/testify/assert" | |
"github.com/stretchr/testify/mock" | |
"github.com/weaviate/weaviate/entities/search" | |
"github.com/weaviate/weaviate/usecases/config" | |
) | |
func Test_DeleteObjectsWithSameId(t *testing.T) { | |
var ( | |
cls = "MyClass" | |
id = strfmt.UUID("5a1cd361-1e0d-42ae-bd52-ee09cb5f31cc") | |
) | |
manager, vectorRepo := newDeleteDependency() | |
vectorRepo.On("ObjectByID", mock.Anything, mock.Anything, mock.Anything).Return(&search.Result{ | |
ClassName: cls, | |
}, nil).Once() | |
vectorRepo.On("ObjectByID", mock.Anything, mock.Anything, mock.Anything).Return(nil, nil).Once() | |
vectorRepo.On("DeleteObject", cls, id).Return(nil).Once() | |
err := manager.DeleteObject(context.Background(), nil, "", id, nil, "") | |
assert.Nil(t, err) | |
vectorRepo.AssertExpectations(t) | |
} | |
func Test_DeleteObject(t *testing.T) { | |
var ( | |
cls = "MyClass" | |
id = strfmt.UUID("5a1cd361-1e0d-42ae-bd52-ee09cb5f31cc") | |
errNotFound = errors.New("object not found") | |
) | |
manager, repo := newDeleteDependency() | |
repo.On("DeleteObject", cls, id).Return(nil).Once() | |
repo.On("Exists", cls, id).Return(true, nil).Once() | |
err := manager.DeleteObject(context.Background(), nil, cls, id, nil, "") | |
assert.Nil(t, err) | |
repo.AssertExpectations(t) | |
// delete non existing object | |
repo.On("Exists", cls, id).Return(false, nil).Once() | |
err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") | |
if _, ok := err.(ErrNotFound); !ok { | |
t.Errorf("error type got: %T want: ErrNotFound", err) | |
} | |
repo.AssertExpectations(t) | |
// return internal error if exists() fails | |
repo.On("Exists", cls, id).Return(false, errNotFound).Once() | |
err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") | |
if _, ok := err.(ErrInternal); !ok { | |
t.Errorf("error type got: %T want: ErrInternal", err) | |
} | |
repo.AssertExpectations(t) | |
// return internal error if deleteObject() fails | |
repo.On("DeleteObject", cls, id).Return(errNotFound).Once() | |
repo.On("Exists", cls, id).Return(true, nil).Once() | |
err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") | |
if _, ok := err.(ErrInternal); !ok { | |
t.Errorf("error type got: %T want: ErrInternal", err) | |
} | |
repo.AssertExpectations(t) | |
} | |
func newDeleteDependency() (*Manager, *fakeVectorRepo) { | |
vectorRepo := new(fakeVectorRepo) | |
logger, _ := test.NewNullLogger() | |
manager := NewManager( | |
new(fakeLocks), | |
new(fakeSchemaManager), | |
new(config.WeaviateConfig), | |
logger, | |
new(fakeAuthorizer), | |
vectorRepo, | |
getFakeModulesProvider(), | |
new(fakeMetrics)) | |
return manager, vectorRepo | |
} | |