github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/sqlx/task_test.go (about) 1 package sqlx_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/google/uuid" 8 "github.com/stretchr/testify/assert" 9 10 "github.com/artisanhe/tools/sqlx" 11 ) 12 13 func TestWithTasks(t *testing.T) { 14 tt := assert.New(t) 15 16 dbTest := sqlx.NewDatabase("test_for_user") 17 defer func() { 18 err := db.Do(dbTest.Drop()).Err() 19 tt.NoError(err) 20 }() 21 22 { 23 dbTest.Register(&User{}) 24 err := dbTest.MigrateTo(db, false) 25 tt.NoError(err) 26 } 27 28 { 29 taskList := sqlx.NewTasks(db) 30 31 taskList = taskList.With(func(db *sqlx.DB) error { 32 user := User{ 33 Name: uuid.New().String(), 34 Gender: GenderMale, 35 } 36 return db.Do(dbTest.Insert(&user).Comment("InsertUser")).Err() 37 }) 38 39 taskList = taskList.With(func(db *sqlx.DB) error { 40 subTaskList := sqlx.NewTasks(db) 41 42 subTaskList = subTaskList.With(func(db *sqlx.DB) error { 43 user := User{ 44 Name: uuid.New().String(), 45 Gender: GenderMale, 46 } 47 return db.Do(dbTest.Insert(&user).Comment("InsertUser")).Err() 48 }) 49 50 subTaskList = subTaskList.With(func(db *sqlx.DB) error { 51 return fmt.Errorf("rollback") 52 }) 53 54 return subTaskList.Do() 55 }) 56 57 err := taskList.Do() 58 tt.NotNil(err) 59 } 60 61 taskList := sqlx.NewTasks(db) 62 63 taskList = taskList.With(func(db *sqlx.DB) error { 64 user := User{ 65 Name: uuid.New().String(), 66 Gender: GenderMale, 67 } 68 return db.Do(dbTest.Insert(&user).Comment("InsertUser")).Err() 69 }) 70 71 taskList = taskList.With(func(db *sqlx.DB) error { 72 subTaskList := sqlx.NewTasks(db) 73 74 subTaskList = subTaskList.With(func(db *sqlx.DB) error { 75 user := User{ 76 Name: uuid.New().String(), 77 Gender: GenderMale, 78 } 79 return db.Do(dbTest.Insert(&user).Comment("InsertUser")).Err() 80 }) 81 82 subTaskList = subTaskList.With(func(db *sqlx.DB) error { 83 user := User{ 84 Name: uuid.New().String(), 85 Gender: GenderMale, 86 } 87 return db.Do(dbTest.Insert(&user).Comment("InsertUser")).Err() 88 }) 89 90 return subTaskList.Do() 91 }) 92 93 err := taskList.Do() 94 tt.NoError(err) 95 }