mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-27 23:47:33 -05:00
Add Update + tests to indexer
This commit is contained in:
@@ -154,3 +154,17 @@ func (i Indexer) FindByPartial(t interface{}, field string, pattern string) ([]s
|
||||
return result, nil
|
||||
|
||||
}
|
||||
|
||||
func (i Indexer) Update(t interface{}, field, oldVal, newVal string) error {
|
||||
typeName := getTypeFQN(t)
|
||||
if fields, ok := i.indices[typeName]; ok {
|
||||
for _, idx := range fields.indicesByField[field] {
|
||||
pkVal := valueOf(t, fields.pKFieldName)
|
||||
if err := idx.Update(pkVal, oldVal, newVal); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -114,6 +114,58 @@ func TestIndexer_SearchWithNonUniqueIndex(t *testing.T) {
|
||||
t.Log(res)
|
||||
}
|
||||
|
||||
func TestIndexer_UpdateWithUniqueIndex(t *testing.T) {
|
||||
dataDir := writeIndexTestData(t, testData, "Id")
|
||||
indexer := NewIndex(&Config{
|
||||
DataDir: dataDir,
|
||||
IndexRootDirName: "index.disk",
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
indexer.AddUniqueIndex(&User{}, "UserName", "Id", "users")
|
||||
|
||||
user1 := &User{Id: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"}
|
||||
user2 := &User{Id: "hijklmn-456", UserName: "frank", Email: "frank@example.com"}
|
||||
|
||||
err := indexer.Add(user1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(user2)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Update to non existing value
|
||||
err = indexer.Update(user2, "UserName", "frank", "jane")
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Update to non existing value
|
||||
err = indexer.Update(user2, "UserName", "mikey", "jane")
|
||||
assert.Error(t, err)
|
||||
assert.IsType(t, &alreadyExistsErr{}, err)
|
||||
}
|
||||
|
||||
func TestIndexer_UpdateWithNonUniqueIndex(t *testing.T) {
|
||||
dataDir := writeIndexTestData(t, testData, "Id")
|
||||
indexer := NewIndex(&Config{
|
||||
DataDir: dataDir,
|
||||
IndexRootDirName: "index.disk",
|
||||
Log: zerolog.Logger{},
|
||||
})
|
||||
|
||||
indexer.AddNonUniqueIndex(&TestPet{}, "Name", "Id", "pets")
|
||||
|
||||
pet1 := TestPet{Id: "goefe-789", Kind: "Hog", Color: "Green", Name: "Dicky"}
|
||||
pet2 := TestPet{Id: "xadaf-189", Kind: "Hog", Color: "Green", Name: "Ricky"}
|
||||
|
||||
err := indexer.Add(pet1)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Add(pet2)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = indexer.Update(pet2, "Name", "Ricky", "Jonny")
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
/*
|
||||
func TestManagerQueryMultipleIndices(t *testing.T) {
|
||||
dataDir := writeIndexTestData(t, testData, "Id")
|
||||
|
||||
@@ -29,10 +29,10 @@ func TestNonUniqueIndexAdd(t *testing.T) {
|
||||
func TestNonUniqueIndexUpdate(t *testing.T) {
|
||||
sut, dataPath := getNonUniqueIdxSut(t)
|
||||
|
||||
err := sut.Update("goefe-789", "Green", "Black")
|
||||
err := sut.Update("goefe-789", "", "Black")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = sut.Update("xadaf-189", "Green", "Black")
|
||||
err = sut.Update("xadaf-189", "", "Black")
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.DirExists(t, path.Join(dataPath, "index.disk/PetByColor/Black"))
|
||||
|
||||
@@ -54,16 +54,16 @@ func TestUniqueUpdate(t *testing.T) {
|
||||
uniq, dataDir := getUniqueIdxSut(t)
|
||||
|
||||
t.Log("successful update")
|
||||
err := uniq.Update("", "mikey@example.com", "mikey2@example.com")
|
||||
err := uniq.Update("", "", "mikey2@example.com")
|
||||
assert.NoError(t, err)
|
||||
|
||||
t.Log("failed update because already exists")
|
||||
err = uniq.Update("", "frank@example.com", "mikey2@example.com")
|
||||
err = uniq.Update("", "", "mikey2@example.com")
|
||||
assert.Error(t, err)
|
||||
assert.IsType(t, &alreadyExistsErr{}, err)
|
||||
|
||||
t.Log("failed update because not found")
|
||||
err = uniq.Update("", "notexist@example.com", "something2@example.com")
|
||||
err = uniq.Update("", "", "something2@example.com")
|
||||
assert.Error(t, err)
|
||||
assert.IsType(t, ¬FoundErr{}, err)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user