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  }