| // +build go1.9 |
| |
| package sqlmock |
| |
| import ( |
| "database/sql" |
| "database/sql/driver" |
| "errors" |
| "testing" |
| ) |
| |
| func TestStatementTX(t *testing.T) { |
| t.Parallel() |
| db, mock, err := New() |
| if err != nil { |
| t.Errorf("an error '%s' was not expected when opening a stub database connection", err) |
| } |
| defer db.Close() |
| |
| prep := mock.ExpectPrepare("SELECT") |
| mock.ExpectBegin() |
| |
| prep.ExpectQuery().WithArgs(1).WillReturnError(errors.New("fast fail")) |
| |
| stmt, err := db.Prepare("SELECT title, body FROM articles WHERE id = ?") |
| if err != nil { |
| t.Fatalf("unexpected error on prepare: %v", err) |
| } |
| |
| tx, err := db.Begin() |
| if err != nil { |
| t.Fatalf("unexpected error on begin: %v", err) |
| } |
| |
| // upgrade connection for statement |
| txStmt := tx.Stmt(stmt) |
| _, err = txStmt.Query(1) |
| if err == nil || err.Error() != "fast fail" { |
| t.Fatalf("unexpected result: %v", err) |
| } |
| } |
| |
| func Test_sqlmock_CheckNamedValue(t *testing.T) { |
| db, mock, err := New() |
| if err != nil { |
| t.Errorf("an error '%s' was not expected when opening a stub database connection", err) |
| } |
| defer db.Close() |
| tests := []struct { |
| name string |
| arg *driver.NamedValue |
| wantErr bool |
| }{ |
| { |
| arg: &driver.NamedValue{Name: "test", Value: "test"}, |
| wantErr: false, |
| }, |
| { |
| arg: &driver.NamedValue{Name: "test", Value: sql.Out{}}, |
| wantErr: false, |
| }, |
| } |
| for _, tt := range tests { |
| t.Run(tt.name, func(t *testing.T) { |
| if err := mock.(*sqlmock).CheckNamedValue(tt.arg); (err != nil) != tt.wantErr { |
| t.Errorf("CheckNamedValue() error = %v, wantErr %v", err, tt.wantErr) |
| } |
| }) |
| } |
| } |