github.com/weaviate/weaviate@v1.24.6/modules/text2vec-contextionary/extensions/usecase_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 extensions 13 14 import ( 15 "bytes" 16 "fmt" 17 "sort" 18 "testing" 19 20 "github.com/stretchr/testify/assert" 21 "github.com/stretchr/testify/require" 22 "github.com/weaviate/weaviate/entities/moduletools" 23 ) 24 25 func Test_UseCase(t *testing.T) { 26 storage := newFakeStorage() 27 uc := NewUseCase(storage) 28 29 t.Run("storing and loading something", func(t *testing.T) { 30 err := uc.Store("concept1", []byte("value1")) 31 require.Nil(t, err) 32 33 err = uc.Store("concept2", []byte("value2")) 34 require.Nil(t, err) 35 36 val, err := uc.Load("concept1") 37 require.Nil(t, err) 38 assert.Equal(t, []byte("value1"), val) 39 40 val, err = uc.Load("concept2") 41 require.Nil(t, err) 42 assert.Equal(t, []byte("value2"), val) 43 44 vals, err := uc.LoadAll() 45 require.Nil(t, err) 46 assert.Equal(t, []byte("value1\nvalue2\n"), vals) 47 }) 48 49 t.Run("when storing fails", func(t *testing.T) { 50 storage.putError = fmt.Errorf("oops") 51 err := uc.Store("concept1", []byte("value1")) 52 assert.Equal(t, "store concept \"concept1\": oops", err.Error()) 53 }) 54 55 t.Run("when loading fails", func(t *testing.T) { 56 storage.getError = fmt.Errorf("oops") 57 _, err := uc.Load("concept1") 58 assert.Equal(t, "load concept \"concept1\": oops", err.Error()) 59 }) 60 } 61 62 func newFakeStorage() *fakeStorage { 63 return &fakeStorage{ 64 store: map[string][]byte{}, 65 } 66 } 67 68 type fakeStorage struct { 69 store map[string][]byte 70 getError error 71 putError error 72 } 73 74 func (f *fakeStorage) Get(k []byte) ([]byte, error) { 75 return f.store[string(k)], f.getError 76 } 77 78 func (f *fakeStorage) Put(k, v []byte) error { 79 f.store[string(k)] = v 80 return f.putError 81 } 82 83 func (f *fakeStorage) Scan(scan moduletools.ScanFn) error { 84 var keys [][]byte 85 for key := range f.store { 86 keys = append(keys, []byte(key)) 87 } 88 89 sort.Slice(keys, func(a, b int) bool { 90 return bytes.Compare(keys[a], keys[b]) == -1 91 }) 92 93 for _, key := range keys { 94 scan(key, f.store[string(key)]) 95 } 96 97 return nil 98 }