github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/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/johnnyeven/libtools/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  }