github.com/weaviate/weaviate@v1.24.6/usecases/objects/delete_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package objects 13 14 import ( 15 "context" 16 "errors" 17 "testing" 18 19 "github.com/go-openapi/strfmt" 20 "github.com/sirupsen/logrus/hooks/test" 21 "github.com/stretchr/testify/assert" 22 "github.com/stretchr/testify/mock" 23 "github.com/weaviate/weaviate/entities/search" 24 "github.com/weaviate/weaviate/usecases/config" 25 ) 26 27 func Test_DeleteObjectsWithSameId(t *testing.T) { 28 var ( 29 cls = "MyClass" 30 id = strfmt.UUID("5a1cd361-1e0d-42ae-bd52-ee09cb5f31cc") 31 ) 32 33 manager, vectorRepo := newDeleteDependency() 34 vectorRepo.On("ObjectByID", mock.Anything, mock.Anything, mock.Anything).Return(&search.Result{ 35 ClassName: cls, 36 }, nil).Once() 37 vectorRepo.On("ObjectByID", mock.Anything, mock.Anything, mock.Anything).Return(nil, nil).Once() 38 vectorRepo.On("DeleteObject", cls, id).Return(nil).Once() 39 40 err := manager.DeleteObject(context.Background(), nil, "", id, nil, "") 41 assert.Nil(t, err) 42 vectorRepo.AssertExpectations(t) 43 } 44 45 func Test_DeleteObject(t *testing.T) { 46 var ( 47 cls = "MyClass" 48 id = strfmt.UUID("5a1cd361-1e0d-42ae-bd52-ee09cb5f31cc") 49 errNotFound = errors.New("object not found") 50 ) 51 52 manager, repo := newDeleteDependency() 53 repo.On("DeleteObject", cls, id).Return(nil).Once() 54 repo.On("Exists", cls, id).Return(true, nil).Once() 55 56 err := manager.DeleteObject(context.Background(), nil, cls, id, nil, "") 57 assert.Nil(t, err) 58 repo.AssertExpectations(t) 59 60 // delete non existing object 61 repo.On("Exists", cls, id).Return(false, nil).Once() 62 err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") 63 if _, ok := err.(ErrNotFound); !ok { 64 t.Errorf("error type got: %T want: ErrNotFound", err) 65 } 66 repo.AssertExpectations(t) 67 68 // return internal error if exists() fails 69 repo.On("Exists", cls, id).Return(false, errNotFound).Once() 70 err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") 71 if _, ok := err.(ErrInternal); !ok { 72 t.Errorf("error type got: %T want: ErrInternal", err) 73 } 74 repo.AssertExpectations(t) 75 76 // return internal error if deleteObject() fails 77 repo.On("DeleteObject", cls, id).Return(errNotFound).Once() 78 repo.On("Exists", cls, id).Return(true, nil).Once() 79 err = manager.DeleteObject(context.Background(), nil, cls, id, nil, "") 80 if _, ok := err.(ErrInternal); !ok { 81 t.Errorf("error type got: %T want: ErrInternal", err) 82 } 83 repo.AssertExpectations(t) 84 } 85 86 func newDeleteDependency() (*Manager, *fakeVectorRepo) { 87 vectorRepo := new(fakeVectorRepo) 88 logger, _ := test.NewNullLogger() 89 manager := NewManager( 90 new(fakeLocks), 91 new(fakeSchemaManager), 92 new(config.WeaviateConfig), 93 logger, 94 new(fakeAuthorizer), 95 vectorRepo, 96 getFakeModulesProvider(), 97 new(fakeMetrics)) 98 return manager, vectorRepo 99 }