fix: behavior when getting removed callback

This commit is contained in:
snackmgmg 2024-03-18 23:03:43 +09:00
parent 1b0aa802df
commit f68e189300
2 changed files with 27 additions and 2 deletions

View File

@ -154,8 +154,11 @@ func (p *processor) Execute(db *DB) *DB {
func (p *processor) Get(name string) func(*DB) {
for i := len(p.callbacks) - 1; i >= 0; i-- {
if v := p.callbacks[i]; v.name == name && !v.remove {
return v.handler
if v := p.callbacks[i]; v.name == name {
if !v.remove {
return v.handler
}
return nil
}
}
return nil

View File

@ -206,3 +206,25 @@ func TestPluginCallbacks(t *testing.T) {
t.Errorf("callbacks tests failed, got %v", msg)
}
}
func TestCallbacksRemoveAndGet(t *testing.T) {
db, _ := gorm.Open(nil, nil)
createCallback := db.Callback().Create()
err := createCallback.Register("plugin_1_fn1", c1)
if err != nil {
t.Errorf("callbacks tests failed, got error: %v", err)
}
if cb := createCallback.Get("plugin_1_fn1"); reflect.DeepEqual(cb, c1) {
t.Errorf("callbacks tests failed, got: %p, want: %p", cb, c1)
}
err = createCallback.Remove("plugin_1_fn1")
if err != nil {
t.Errorf("callbacks test failed, got error: %v", err)
}
if cb := createCallback.Get("plugin_1_fn1"); cb != nil {
t.Errorf("callbacks test failed. got: %p, want: nil", cb)
}
}