123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934 |
- // 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 (
- "errors"
- "fmt"
- "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 BeforeTable2 struct {
- Id int64
- Name string
- Val string `xorm:"-"`
- }
- assert.NoError(t, testEngine.Sync2(new(BeforeTable2)))
- cnt, err := testEngine.Insert([]BeforeTable2{
- {Name: "test1"},
- {Name: "test2"},
- })
- assert.NoError(t, err)
- assert.EqualValues(t, 2, cnt)
- var be []BeforeTable2
- err = testEngine.Before(func(bean interface{}) {
- bean.(*BeforeTable2).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)
- }
- type ProcessorsStruct struct {
- Id int64
- B4InsertFlag int
- AfterInsertedFlag int
- B4UpdateFlag int
- AfterUpdatedFlag int
- B4DeleteFlag int `xorm:"-"`
- AfterDeletedFlag int `xorm:"-"`
- BeforeSetFlag int `xorm:"-"`
- B4InsertViaExt int
- AfterInsertedViaExt int
- B4UpdateViaExt int
- AfterUpdatedViaExt int
- B4DeleteViaExt int `xorm:"-"`
- AfterDeletedViaExt int `xorm:"-"`
- AfterSetFlag int `xorm:"-"`
- }
- func (p *ProcessorsStruct) BeforeInsert() {
- p.B4InsertFlag = 1
- }
- func (p *ProcessorsStruct) BeforeUpdate() {
- p.B4UpdateFlag = 1
- }
- func (p *ProcessorsStruct) BeforeDelete() {
- p.B4DeleteFlag = 1
- }
- func (p *ProcessorsStruct) BeforeSet(col string, cell Cell) {
- p.BeforeSetFlag = p.BeforeSetFlag + 1
- }
- func (p *ProcessorsStruct) AfterInsert() {
- p.AfterInsertedFlag = 1
- }
- func (p *ProcessorsStruct) AfterUpdate() {
- p.AfterUpdatedFlag = 1
- }
- func (p *ProcessorsStruct) AfterDelete() {
- p.AfterDeletedFlag = 1
- }
- func (p *ProcessorsStruct) AfterSet(col string, cell Cell) {
- p.AfterSetFlag = p.AfterSetFlag + 1
- }
- func TestProcessors(t *testing.T) {
- assert.NoError(t, prepareEngine())
- err := testEngine.DropTables(&ProcessorsStruct{})
- if err != nil {
- t.Error(err)
- panic(err)
- }
- p := &ProcessorsStruct{}
- err = testEngine.CreateTables(&ProcessorsStruct{})
- if err != nil {
- t.Error(err)
- panic(err)
- }
- b4InsertFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4InsertViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterInsertFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterInsertedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- _, err = testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
- assert.NoError(t, err)
- assert.True(t, p.Id > 0, "Inserted ID not set")
- assert.True(t, p.B4InsertFlag > 0, "B4InsertFlag not set")
- assert.True(t, p.AfterInsertedFlag > 0, "B4InsertFlag not set")
- assert.True(t, p.B4InsertViaExt > 0, "B4InsertFlag not set")
- assert.True(t, p.AfterInsertedViaExt > 0, "AfterInsertedViaExt not set")
- p2 := &ProcessorsStruct{}
- has, err := testEngine.ID(p.Id).Get(p2)
- assert.NoError(t, err)
- assert.True(t, has)
- assert.True(t, p2.B4InsertFlag > 0, "B4InsertFlag not set")
- assert.True(t, p2.AfterInsertedFlag == 0, "AfterInsertedFlag is set")
- assert.True(t, p2.B4InsertViaExt > 0, "B4InsertViaExt not set")
- assert.True(t, p2.AfterInsertedViaExt == 0, "AfterInsertedViaExt is set")
- assert.True(t, p2.BeforeSetFlag == 9, fmt.Sprintf("BeforeSetFlag is %d not 9", p2.BeforeSetFlag))
- assert.True(t, p2.AfterSetFlag == 9, fmt.Sprintf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
- // --
- // test find processors
- var p2Find []*ProcessorsStruct
- err = testEngine.Find(&p2Find)
- assert.NoError(t, err)
- if len(p2Find) != 1 {
- err = errors.New("Should get 1")
- t.Error(err)
- }
- p21 := p2Find[0]
- if p21.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p21.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag is set"))
- }
- if p21.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p21.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- if p21.BeforeSetFlag != 9 {
- t.Error(fmt.Errorf("BeforeSetFlag is %d not 9", p21.BeforeSetFlag))
- }
- if p21.AfterSetFlag != 9 {
- t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p21.BeforeSetFlag))
- }
- // --
- // test find map processors
- var p2FindMap = make(map[int64]*ProcessorsStruct)
- err = testEngine.Find(&p2FindMap)
- assert.NoError(t, err)
- if len(p2FindMap) != 1 {
- err = errors.New("Should get 1")
- t.Error(err)
- }
- var p22 *ProcessorsStruct
- for _, v := range p2FindMap {
- p22 = v
- }
- if p22.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p22.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag is set"))
- }
- if p22.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p22.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- if p22.BeforeSetFlag != 9 {
- t.Error(fmt.Errorf("BeforeSetFlag is %d not 9", p22.BeforeSetFlag))
- }
- if p22.AfterSetFlag != 9 {
- t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p22.BeforeSetFlag))
- }
- // --
- // test update processors
- b4UpdateFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4UpdateViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterUpdateFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterUpdatedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- p = p2 // reset
- _, err = testEngine.Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag == 0 {
- t.Error(errors.New("AfterUpdatedFlag not set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt == 0 {
- t.Error(errors.New("AfterUpdatedViaExt not set"))
- }
- p2 = &ProcessorsStruct{}
- has, err = testEngine.ID(p.Id).Get(p2)
- assert.NoError(t, err)
- assert.True(t, has)
- if p2.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p2.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set: " + string(p.AfterUpdatedFlag)))
- }
- if p2.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p2.AfterUpdatedViaExt != 0 {
- t.Error(errors.New("AfterUpdatedViaExt is set: " + string(p.AfterUpdatedViaExt)))
- }
- if p2.BeforeSetFlag != 9 {
- t.Error(fmt.Errorf("BeforeSetFlag is %d not 9", p2.BeforeSetFlag))
- }
- if p2.AfterSetFlag != 9 {
- t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
- }
- // --
- // test delete processors
- b4DeleteFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4DeleteViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterDeleteFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterDeletedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- p = p2 // reset
- _, err = testEngine.Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag == 0 {
- t.Error(errors.New("AfterDeletedFlag not set"))
- }
- if p.B4DeleteViaExt == 0 {
- t.Error(errors.New("B4DeleteViaExt not set"))
- }
- if p.AfterDeletedViaExt == 0 {
- t.Error(errors.New("AfterDeletedViaExt not set"))
- }
- // --
- // test insert multi
- pslice := make([]*ProcessorsStruct, 0)
- pslice = append(pslice, &ProcessorsStruct{})
- pslice = append(pslice, &ProcessorsStruct{})
- cnt, err := testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(&pslice)
- assert.NoError(t, err)
- assert.EqualValues(t, 2, cnt, "incorrect insert count")
- for _, elem := range pslice {
- if elem.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if elem.AfterInsertedFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if elem.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if elem.AfterInsertedViaExt == 0 {
- t.Error(errors.New("AfterInsertedViaExt not set"))
- }
- }
- for _, elem := range pslice {
- p = &ProcessorsStruct{}
- _, err = testEngine.ID(elem.Id).Get(p)
- assert.NoError(t, err)
- if p2.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p2.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag is set"))
- }
- if p2.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p2.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- if p2.BeforeSetFlag != 9 {
- t.Error(fmt.Errorf("BeforeSetFlag is %d not 9", p2.BeforeSetFlag))
- }
- if p2.AfterSetFlag != 9 {
- t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
- }
- }
- // --
- }
- func TestProcessorsTx(t *testing.T) {
- assert.NoError(t, prepareEngine())
- err := testEngine.DropTables(&ProcessorsStruct{})
- assert.NoError(t, err)
- err = testEngine.CreateTables(&ProcessorsStruct{})
- assert.NoError(t, err)
- // test insert processors with tx rollback
- session := testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p := &ProcessorsStruct{}
- b4InsertFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4InsertViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterInsertFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterInsertedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- _, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
- assert.NoError(t, err)
- if p.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p.AfterInsertedFlag != 0 {
- t.Error(errors.New("B4InsertFlag is set"))
- }
- if p.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- err = session.Rollback()
- assert.NoError(t, err)
- if p.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p.AfterInsertedFlag != 0 {
- t.Error(errors.New("B4InsertFlag is set"))
- }
- if p.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- session.Close()
- p2 := &ProcessorsStruct{}
- _, err = testEngine.ID(p.Id).Get(p2)
- assert.NoError(t, err)
- if p2.Id > 0 {
- err = errors.New("tx got committed upon insert!?")
- t.Error(err)
- panic(err)
- }
- // --
- // test insert processors with tx commit
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p = &ProcessorsStruct{}
- _, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
- assert.NoError(t, err)
- if p.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag is set"))
- }
- if p.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- err = session.Commit()
- assert.NoError(t, err)
- if p.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p.AfterInsertedFlag == 0 {
- t.Error(errors.New("AfterInsertedFlag not set"))
- }
- if p.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p.AfterInsertedViaExt == 0 {
- t.Error(errors.New("AfterInsertedViaExt not set"))
- }
- session.Close()
- p2 = &ProcessorsStruct{}
- _, err = testEngine.ID(p.Id).Get(p2)
- assert.NoError(t, err)
- if p2.B4InsertFlag == 0 {
- t.Error(errors.New("B4InsertFlag not set"))
- }
- if p2.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag is set"))
- }
- if p2.B4InsertViaExt == 0 {
- t.Error(errors.New("B4InsertViaExt not set"))
- }
- if p2.AfterInsertedViaExt != 0 {
- t.Error(errors.New("AfterInsertedViaExt is set"))
- }
- insertedId := p2.Id
- // --
- // test update processors with tx rollback
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- b4UpdateFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4UpdateViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterUpdateFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterUpdatedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- p = p2 // reset
- _, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt != 0 {
- t.Error(errors.New("AfterUpdatedViaExt is set"))
- }
- err = session.Rollback()
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt != 0 {
- t.Error(errors.New("AfterUpdatedViaExt is set"))
- }
- session.Close()
- p2 = &ProcessorsStruct{}
- _, err = testEngine.ID(insertedId).Get(p2)
- assert.NoError(t, err)
- if p2.B4UpdateFlag != 0 {
- t.Error(errors.New("B4UpdateFlag is set"))
- }
- if p2.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set"))
- }
- if p2.B4UpdateViaExt != 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p2.AfterUpdatedViaExt != 0 {
- t.Error(errors.New("AfterUpdatedViaExt is set"))
- }
- // --
- // test update processors with tx rollback
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p = &ProcessorsStruct{Id: insertedId}
- _, err = session.Update(p)
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set"))
- }
- err = session.Commit()
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag == 0 {
- t.Error(errors.New("AfterUpdatedFlag not set"))
- }
- if p.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag set"))
- }
- if p.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag set"))
- }
- session.Close()
- // test update processors with tx commit
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p = &ProcessorsStruct{}
- _, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag is set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt != 0 {
- t.Error(errors.New("AfterUpdatedViaExt is set"))
- }
- err = session.Commit()
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag == 0 {
- t.Error(errors.New("AfterUpdatedFlag not set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt == 0 {
- t.Error(errors.New("AfterUpdatedViaExt not set"))
- }
- session.Close()
- p2 = &ProcessorsStruct{}
- _, err = testEngine.ID(insertedId).Get(p2)
- assert.NoError(t, err)
- if p.B4UpdateFlag == 0 {
- t.Error(errors.New("B4UpdateFlag not set"))
- }
- if p.AfterUpdatedFlag == 0 {
- t.Error(errors.New("AfterUpdatedFlag not set"))
- }
- if p.B4UpdateViaExt == 0 {
- t.Error(errors.New("B4UpdateViaExt not set"))
- }
- if p.AfterUpdatedViaExt == 0 {
- t.Error(errors.New("AfterUpdatedViaExt not set"))
- }
- // --
- // test delete processors with tx rollback
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- b4DeleteFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.B4DeleteViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- afterDeleteFunc := func(bean interface{}) {
- if v, ok := (bean).(*ProcessorsStruct); ok {
- v.AfterDeletedViaExt = 1
- } else {
- t.Error(errors.New("cast to ProcessorsStruct failed, how can this be!?"))
- }
- }
- p = &ProcessorsStruct{} // reset
- _, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag is set"))
- }
- if p.B4DeleteViaExt == 0 {
- t.Error(errors.New("B4DeleteViaExt not set"))
- }
- if p.AfterDeletedViaExt != 0 {
- t.Error(errors.New("AfterDeletedViaExt is set"))
- }
- err = session.Rollback()
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag is set"))
- }
- if p.B4DeleteViaExt == 0 {
- t.Error(errors.New("B4DeleteViaExt not set"))
- }
- if p.AfterDeletedViaExt != 0 {
- t.Error(errors.New("AfterDeletedViaExt is set"))
- }
- session.Close()
- p2 = &ProcessorsStruct{}
- _, err = testEngine.ID(insertedId).Get(p2)
- assert.NoError(t, err)
- if p2.B4DeleteFlag != 0 {
- t.Error(errors.New("B4DeleteFlag is set"))
- }
- if p2.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag is set"))
- }
- if p2.B4DeleteViaExt != 0 {
- t.Error(errors.New("B4DeleteViaExt is set"))
- }
- if p2.AfterDeletedViaExt != 0 {
- t.Error(errors.New("AfterDeletedViaExt is set"))
- }
- // --
- // test delete processors with tx commit
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p = &ProcessorsStruct{}
- _, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag is set"))
- }
- if p.B4DeleteViaExt == 0 {
- t.Error(errors.New("B4DeleteViaExt not set"))
- }
- if p.AfterDeletedViaExt != 0 {
- t.Error(errors.New("AfterDeletedViaExt is set"))
- }
- err = session.Commit()
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag == 0 {
- t.Error(errors.New("AfterDeletedFlag not set"))
- }
- if p.B4DeleteViaExt == 0 {
- t.Error(errors.New("B4DeleteViaExt not set"))
- }
- if p.AfterDeletedViaExt == 0 {
- t.Error(errors.New("AfterDeletedViaExt not set"))
- }
- session.Close()
- // test delete processors with tx commit
- session = testEngine.NewSession()
- defer session.Close()
- err = session.Begin()
- assert.NoError(t, err)
- p = &ProcessorsStruct{Id: insertedId}
- _, err = session.Delete(p)
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag != 0 {
- t.Error(errors.New("AfterDeletedFlag is set"))
- }
- err = session.Commit()
- assert.NoError(t, err)
- if p.B4DeleteFlag == 0 {
- t.Error(errors.New("B4DeleteFlag not set"))
- }
- if p.AfterDeletedFlag == 0 {
- t.Error(errors.New("AfterDeletedFlag not set"))
- }
- if p.AfterInsertedFlag != 0 {
- t.Error(errors.New("AfterInsertedFlag set"))
- }
- if p.AfterUpdatedFlag != 0 {
- t.Error(errors.New("AfterUpdatedFlag set"))
- }
- session.Close()
- // --
- }
- type AfterLoadStructA struct {
- Id int64
- Content string
- }
- type AfterLoadStructB struct {
- Id int64
- Content string
- AId int64
- A AfterLoadStructA `xorm:"-"`
- Err error `xorm:"-"`
- }
- func (s *AfterLoadStructB) AfterLoad(session *Session) {
- has, err := session.ID(s.AId).NoAutoCondition().Get(&s.A)
- if err != nil {
- s.Err = err
- return
- }
- if !has {
- s.Err = ErrNotExist
- }
- }
- func TestAfterLoadProcessor(t *testing.T) {
- assert.NoError(t, prepareEngine())
- assertSync(t, new(AfterLoadStructA), new(AfterLoadStructB))
- var a = AfterLoadStructA{
- Content: "testa",
- }
- _, err := testEngine.Insert(&a)
- assert.NoError(t, err)
- var b = AfterLoadStructB{
- Content: "testb",
- AId: a.Id,
- }
- _, err = testEngine.Insert(&b)
- assert.NoError(t, err)
- var b2 AfterLoadStructB
- has, err := testEngine.ID(b.Id).Get(&b2)
- assert.NoError(t, err)
- assert.True(t, has)
- assert.EqualValues(t, a.Id, b2.A.Id)
- assert.EqualValues(t, a.Content, b2.A.Content)
- assert.NoError(t, b2.Err)
- b.Id = 0
- _, err = testEngine.Insert(&b)
- assert.NoError(t, err)
- var bs []AfterLoadStructB
- err = testEngine.Find(&bs)
- assert.NoError(t, err)
- assert.EqualValues(t, 2, len(bs))
- for i := 0; i < len(bs); i++ {
- assert.EqualValues(t, a.Id, bs[i].A.Id)
- assert.EqualValues(t, a.Content, bs[i].A.Content)
- assert.NoError(t, bs[i].Err)
- }
- }
- type AfterInsertStruct struct {
- Id int64
- }
- func (a *AfterInsertStruct) AfterInsert() {
- if a.Id == 0 {
- panic("a.Id")
- }
- }
- func TestAfterInsert(t *testing.T) {
- assert.NoError(t, prepareEngine())
- assertSync(t, new(AfterInsertStruct))
- _, err := testEngine.Insert(&AfterInsertStruct{})
- assert.NoError(t, err)
- }
|