github.com/Accefy/pop@v0.0.0-20230428174248-e9f677eab5b9/callbacks_test.go (about)

     1  package pop
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func Test_Callbacks(t *testing.T) {
    10  	if PDB == nil {
    11  		t.Skip("skipping integration tests")
    12  	}
    13  	transaction(func(tx *Connection) {
    14  		r := require.New(t)
    15  
    16  		user := &CallbacksUser{
    17  			BeforeS: "BS",
    18  			BeforeC: "BC",
    19  			BeforeU: "BU",
    20  			BeforeD: "BD",
    21  			BeforeV: "BV",
    22  			AfterS:  "AS",
    23  			AfterC:  "AC",
    24  			AfterU:  "AU",
    25  			AfterD:  "AD",
    26  			AfterF:  "AF",
    27  		}
    28  
    29  		r.NoError(tx.Save(user))
    30  
    31  		r.Equal("BeforeSave", user.BeforeS)
    32  		r.Equal("BeforeCreate", user.BeforeC)
    33  		r.Equal("AfterSave", user.AfterS)
    34  		r.Equal("AfterCreate", user.AfterC)
    35  		r.Equal("BU", user.BeforeU)
    36  		r.Equal("AU", user.AfterU)
    37  
    38  		r.NoError(tx.Update(user))
    39  
    40  		r.Equal("BeforeUpdate", user.BeforeU)
    41  		r.Equal("AfterUpdate", user.AfterU)
    42  		r.Equal("BD", user.BeforeD)
    43  		r.Equal("AD", user.AfterD)
    44  
    45  		r.Equal("AF", user.AfterF)
    46  		r.NoError(tx.Find(user, user.ID))
    47  		r.Equal("AfterFind", user.AfterF)
    48  		r.Empty(user.AfterEF)
    49  
    50  		r.NoError(tx.Eager().Find(user, user.ID))
    51  		r.Equal("AfterEagerFind", user.AfterEF)
    52  
    53  		r.NoError(tx.Destroy(user))
    54  
    55  		r.Equal("BeforeDestroy", user.BeforeD)
    56  		r.Equal("AfterDestroy", user.AfterD)
    57  
    58  		verrs, err := tx.ValidateAndSave(user)
    59  		r.False(verrs.HasAny())
    60  		r.NoError(err)
    61  		r.Equal("BeforeValidate", user.BeforeV)
    62  	})
    63  }
    64  
    65  func Test_Callbacks_on_Slice(t *testing.T) {
    66  	if PDB == nil {
    67  		t.Skip("skipping integration tests")
    68  	}
    69  	transaction(func(tx *Connection) {
    70  		r := require.New(t)
    71  		for i := 0; i < 2; i++ {
    72  			r.NoError(tx.Create(&CallbacksUser{}))
    73  		}
    74  
    75  		users := CallbacksUsers{}
    76  		r.NoError(tx.All(&users))
    77  		r.Len(users, 2)
    78  		for _, u := range users {
    79  			r.Equal("AfterFind", u.AfterF)
    80  			r.Empty(u.AfterEF)
    81  		}
    82  
    83  		r.NoError(tx.Eager().All(&users))
    84  		r.Len(users, 2)
    85  		for _, u := range users {
    86  			r.Equal("AfterEagerFind", u.AfterEF)
    87  		}
    88  	})
    89  }