From 8b79671aa6d451611f8029a48b08cf0df18da265 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 11 Apr 2017 23:04:15 +0800 Subject: [PATCH] bug fixed and add processors tests --- processors_test.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++ session.go | 10 +++++++ 2 files changed, 78 insertions(+) create mode 100644 processors_test.go diff --git a/processors_test.go b/processors_test.go new file mode 100644 index 00000000..e370d7a0 --- /dev/null +++ b/processors_test.go @@ -0,0 +1,68 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBefore_Get(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type BeforeTable struct { + Id int64 + Name string + Val string `xorm:"-"` + } + + assert.NoError(t, testEngine.Sync2(new(BeforeTable))) + + cnt, err := testEngine.Insert(&BeforeTable{ + Name: "test", + }) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var be BeforeTable + has, err := testEngine.Before(func(bean interface{}) { + bean.(*BeforeTable).Val = "val" + }).Get(&be) + assert.NoError(t, err) + assert.Equal(t, true, has) + assert.Equal(t, "val", be.Val) + assert.Equal(t, "test", be.Name) +} + +func TestBefore_Find(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type BeforeTable struct { + Id int64 + Name string + Val string `xorm:"-"` + } + + assert.NoError(t, testEngine.Sync2(new(BeforeTable))) + + cnt, err := testEngine.Insert([]BeforeTable{ + {Name: "test1"}, + {Name: "test2"}, + }) + assert.NoError(t, err) + assert.EqualValues(t, 2, cnt) + + var be []BeforeTable + err = testEngine.Before(func(bean interface{}) { + bean.(*BeforeTable).Val = "val" + }).Find(&be) + assert.NoError(t, err) + assert.Equal(t, 2, len(be)) + assert.Equal(t, "val", be[0].Val) + assert.Equal(t, "test1", be[0].Name) + assert.Equal(t, "val", be[1].Val) + assert.Equal(t, "test2", be[1].Name) +} diff --git a/session.go b/session.go index d7694dc7..29d840e2 100644 --- a/session.go +++ b/session.go @@ -311,6 +311,11 @@ func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount } func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount int, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) { + // handle beforeClosures + for _, closure := range session.beforeClosures { + closure(bean) + } + scanResults := make([]interface{}, fieldsCount) for i := 0; i < len(fields); i++ { var cell interface{} @@ -332,6 +337,11 @@ func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount i b.AfterSet(key, Cell(scanResults[ii].(*interface{}))) } } + + // handle afterClosures + for _, closure := range session.afterClosures { + closure(bean) + } }() dbTZ := session.Engine.DatabaseTZ