From cb3e425163c4408de5bd7b578fde45300d6de9e8 Mon Sep 17 00:00:00 2001 From: Benjamin Rupp Date: Wed, 25 Sep 2019 10:33:09 -0400 Subject: [PATCH] Moving Exec(...) test to 1.9 build as NamedValueChecker is only supported since 1.9 --- expectations_before_go18.go | 5 +++++ expectations_go19_test.go | 43 +++++++++++++++++++++++++++++++++++++ expectations_test.go | 38 +------------------------------- 3 files changed, 49 insertions(+), 37 deletions(-) create mode 100644 expectations_go19_test.go diff --git a/expectations_before_go18.go b/expectations_before_go18.go index 11036a8..e368e04 100644 --- a/expectations_before_go18.go +++ b/expectations_before_go18.go @@ -3,6 +3,7 @@ package sqlmock import ( + "database/sql/driver" "fmt" "reflect" ) @@ -39,6 +40,10 @@ func (e *queryBasedExpectation) argsMatches(args []namedValue) error { return fmt.Errorf("could not convert %d argument %T - %+v to driver value: %s", k, e.args[k], e.args[k], err) } + if !driver.IsValue(darg) { + return fmt.Errorf("argument %d: non-subset type %T returned from Value", k, darg) + } + if !reflect.DeepEqual(darg, v.Value) { return fmt.Errorf("argument %d expected [%T - %+v] does not match actual [%T - %+v]", k, darg, darg, v.Value, v.Value) } diff --git a/expectations_go19_test.go b/expectations_go19_test.go new file mode 100644 index 0000000..4ea5f04 --- /dev/null +++ b/expectations_go19_test.go @@ -0,0 +1,43 @@ +// +build go1.9 + +package sqlmock + +import ( + "context" + "testing" +) + +func TestCustomValueConverterExec(t *testing.T) { + db, mock, _ := New(ValueConverterOption(CustomConverter{})) + expectedQuery := "INSERT INTO tags \\(name,email,age,hobbies\\) VALUES \\(\\?,\\?,\\?,\\?\\)" + query := "INSERT INTO tags (name,email,age,hobbies) VALUES (?,?,?,?)" + name := "John" + email := "j@jj.j" + age := 12 + hobbies := []string{"soccer", "netflix"} + mock.ExpectBegin() + mock.ExpectPrepare(expectedQuery) + mock.ExpectExec(expectedQuery).WithArgs(name, email, age, hobbies).WillReturnResult(NewResult(1, 1)) + mock.ExpectCommit() + + ctx := context.Background() + tx, e := db.BeginTx(ctx, nil) + if e != nil { + t.Error(e) + return + } + stmt, e := db.PrepareContext(ctx, query) + if e != nil { + t.Error(e) + return + } + _, e = stmt.Exec(name, email, age, hobbies) + if e != nil { + t.Error(e) + return + } + tx.Commit() + if err := mock.ExpectationsWereMet(); err != nil { + t.Error(err) + } +} diff --git a/expectations_test.go b/expectations_test.go index facf43c..09e0441 100644 --- a/expectations_test.go +++ b/expectations_test.go @@ -1,7 +1,6 @@ package sqlmock import ( - "context" "database/sql/driver" "errors" "fmt" @@ -193,39 +192,4 @@ func TestCustomValueConverterQueryScan(t *testing.T) { if err := mock.ExpectationsWereMet(); err != nil { t.Error(err) } -} - -func TestCustomValueConverterExec(t *testing.T) { - db, mock, _ := New(ValueConverterOption(CustomConverter{})) - expectedQuery := "INSERT INTO tags \\(name,email,age,hobbies\\) VALUES \\(\\?,\\?,\\?,\\?\\)" - query := "INSERT INTO tags (name,email,age,hobbies) VALUES (?,?,?,?)" - name := "John" - email := "j@jj.j" - age := 12 - hobbies := []string{"soccer", "netflix"} - mock.ExpectBegin() - mock.ExpectPrepare(expectedQuery) - mock.ExpectExec(expectedQuery).WithArgs(name, email, age, hobbies).WillReturnResult(NewResult(1, 1)) - mock.ExpectCommit() - - ctx := context.Background() - tx, e := db.BeginTx(ctx, nil) - if e != nil { - t.Error(e) - return - } - stmt, e := db.PrepareContext(ctx, query) - if e != nil { - t.Error(e) - return - } - _, e = stmt.Exec(name, email, age, hobbies) - if e != nil { - t.Error(e) - return - } - tx.Commit() - if err := mock.ExpectationsWereMet(); err != nil { - t.Error(err) - } -} +} \ No newline at end of file