func (me *mysqlTest) TestDelete() { t := me.T() ds := me.db.From("entry") var e entry found, err := ds.Where(goqu.I("int").Eq(9)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) _, err = ds.Where(goqu.I("id").Eq(e.Id)).Delete().Exec() assert.NoError(t, err) count, err := ds.Count() assert.NoError(t, err) assert.Equal(t, count, 9) var id uint32 found, err = ds.Where(goqu.I("id").Eq(e.Id)).ScanVal(&id) assert.NoError(t, err) assert.False(t, found) e = entry{} found, err = ds.Where(goqu.I("int").Eq(8)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) assert.NotEqual(t, e.Id, 0) id = 0 _, err = ds.Where(goqu.I("id").Eq(e.Id)).Returning("id").Delete().ScanVal(&id) assert.Equal(t, err.Error(), "goqu: Adapter does not support RETURNING clause") }
func (me *postgresTest) TestInsertReturning() { t := me.T() ds := me.db.From("entry") now := time.Now() e := entry{Int: 10, Float: 1.000000, String: "1.000000", Time: now, Bool: true, Bytes: []byte("1.000000")} found, err := ds.Returning(goqu.Star()).Insert(e).ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) assert.True(t, e.Id > 0) var ids []uint32 assert.NoError(t, ds.Returning("id").Insert([]entry{ {Int: 11, Float: 1.100000, String: "1.100000", Time: now, Bool: false, Bytes: []byte("1.100000")}, {Int: 12, Float: 1.200000, String: "1.200000", Time: now, Bool: true, Bytes: []byte("1.200000")}, {Int: 13, Float: 1.300000, String: "1.300000", Time: now, Bool: false, Bytes: []byte("1.300000")}, {Int: 14, Float: 1.400000, String: "1.400000", Time: now, Bool: true, Bytes: []byte("1.400000")}, }).ScanVals(&ids)) assert.Len(t, ids, 4) for _, id := range ids { assert.True(t, id > 0) } var ints []int64 assert.NoError(t, ds.Returning("int").Insert( entry{Int: 15, Float: 1.500000, String: "1.500000", Time: now, Bool: false, Bytes: []byte("1.500000")}, entry{Int: 16, Float: 1.600000, String: "1.600000", Time: now, Bool: true, Bytes: []byte("1.600000")}, entry{Int: 17, Float: 1.700000, String: "1.700000", Time: now, Bool: false, Bytes: []byte("1.700000")}, entry{Int: 18, Float: 1.800000, String: "1.800000", Time: now, Bool: true, Bytes: []byte("1.800000")}, ).ScanVals(&ints)) assert.True(t, found) assert.Equal(t, ints, []int64{15, 16, 17, 18}) }
func (me *postgresTest) TestDelete() { t := me.T() ds := me.db.From("entry") var e entry found, err := ds.Where(goqu.I("int").Eq(9)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) _, err = ds.Where(goqu.I("id").Eq(e.Id)).Delete().Exec() assert.NoError(t, err) count, err := ds.Count() assert.NoError(t, err) assert.Equal(t, count, 9) var id uint32 found, err = ds.Where(goqu.I("id").Eq(e.Id)).ScanVal(&id) assert.NoError(t, err) assert.False(t, found) e = entry{} found, err = ds.Where(goqu.I("int").Eq(8)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) assert.NotEqual(t, e.Id, 0) id = 0 _, err = ds.Where(goqu.I("id").Eq(e.Id)).Returning("id").Delete().ScanVal(&id) assert.NoError(t, err) assert.Equal(t, id, e.Id) }
func (me *crudExecTest) TestScanStruct() { t := me.T() mDb, mock, err := sqlmock.New() assert.NoError(t, err) mock.ExpectQuery(`SELECT \* FROM "items"`). WillReturnError(fmt.Errorf("query error")) mock.ExpectQuery(`SELECT \* FROM "items"`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).FromCSVString("111 Test Addr,Test1")) mock.ExpectQuery(`SELECT \* FROM "items"`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"address", "name", "phone_number", "age"}).FromCSVString("111 Test Addr,Test1,111-111-1111,20")) mock.ExpectQuery(`SELECT \* FROM "items"`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).FromCSVString("111 Test Addr,Test1")) db := New("db-mock", mDb) exec := newCrudExec(db, nil, `SELECT * FROM "items"`) var slicePtr []testCrudActionItem var item testCrudActionItem found, err := exec.ScanStruct(item) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") assert.False(t, found) found, err = exec.ScanStruct(&slicePtr) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") assert.False(t, found) found, err = exec.ScanStruct(&item) assert.EqualError(t, err, "query error") assert.False(t, found) found, err = exec.ScanStruct(&item) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, item.Address, "111 Test Addr") assert.Equal(t, item.Name, "Test1") var composed testComposedCrudActionItem found, err = exec.ScanStruct(&composed) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, composed.Address, "111 Test Addr") assert.Equal(t, composed.Name, "Test1") assert.Equal(t, composed.PhoneNumber, "111-111-1111") assert.Equal(t, composed.Age, 20) var noTag testCrudActionNoTagsItem found, err = exec.ScanStruct(&noTag) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, noTag.Address, "111 Test Addr") assert.Equal(t, noTag.Name, "Test1") }
func (me *datasetTest) TestPrepared() { t := me.T() ds := From("test") preparedDs := ds.Prepared(true) assert.True(t, preparedDs.isPrepared) assert.False(t, ds.isPrepared) //should apply the prepared to any datasets created from the root assert.True(t, preparedDs.Where(Ex{"a": 1}).isPrepared) }
func Test_Mock_AssertNumberOfCalls(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("Test_Mock_AssertNumberOfCalls", 1, 2, 3).Return(5, 6, 7) mockedService.Called(1, 2, 3) assert.True(t, mockedService.AssertNumberOfCalls(t, "Test_Mock_AssertNumberOfCalls", 1)) mockedService.Called(1, 2, 3) assert.True(t, mockedService.AssertNumberOfCalls(t, "Test_Mock_AssertNumberOfCalls", 2)) }
// AssertCalled asserts that the method was called. func (m *Mock) AssertCalled(t TestingT, methodName string, arguments ...interface{}) bool { if !assert.True(t, m.methodWasCalled(methodName, arguments), fmt.Sprintf("The \"%s\" method should have been called with %d argument(s), but was not.", methodName, len(arguments))) { t.Logf("%v", m.expectedCalls()) return false } return true }
func (me *datasetTest) TestScanStruct_WithPreparedStatements() { t := me.T() mDb, mock, err := sqlmock.New() assert.NoError(t, err) mock.ExpectQuery(`SELECT "address", "name" FROM "items" WHERE \(\("address" = \?\) AND \("name" IN \(\?, \?, \?\)\)\) LIMIT \?`). WithArgs("111 Test Addr", "Bob", "Sally", "Billy", 1). WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).FromCSVString("111 Test Addr,Test1")) mock.ExpectQuery(`SELECT "test" FROM "items" WHERE \(\("address" = \?\) AND \("name" IN \(\?, \?, \?\)\)\) LIMIT \?`). WithArgs("111 Test Addr", "Bob", "Sally", "Billy", 1). WillReturnRows(sqlmock.NewRows([]string{"test"}).FromCSVString("test1\ntest2")) db := New("mock", mDb) var item dsTestActionItem found, err := db.From("items").Prepared(true).Where(Ex{"name": []string{"Bob", "Sally", "Billy"}, "address": "111 Test Addr"}).ScanStruct(&item) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, item.Address, "111 Test Addr") assert.Equal(t, item.Name, "Test1") _, err = db.From("items").ScanStruct(item) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") _, err = db.From("items").ScanStruct([]dsTestActionItem{}) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") _, err = db.From("items"). Prepared(true). Select("test"). Where(Ex{"name": []string{"Bob", "Sally", "Billy"}, "address": "111 Test Addr"}). ScanStruct(&item) assert.EqualError(t, err, `goqu: Unable to find corresponding field to column "test" returned by query`) }
func (me *databaseTest) TestScanStruct() { t := me.T() mDb, mock, err := sqlmock.New() assert.NoError(t, err) mock.ExpectQuery(`SELECT \* FROM "items" LIMIT 1`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"address", "name"}).FromCSVString("111 Test Addr,Test1")) mock.ExpectQuery(`SELECT "test" FROM "items" LIMIT 1`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"test"}).FromCSVString("test1\ntest2")) db := New("mock", mDb) var item testActionItem found, err := db.ScanStruct(&item, `SELECT * FROM "items" LIMIT 1`) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, item.Address, "111 Test Addr") assert.Equal(t, item.Name, "Test1") _, err = db.ScanStruct(item, `SELECT * FROM "items" LIMIT 1`) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") _, err = db.ScanStruct([]testActionItem{}, `SELECT * FROM "items" LIMIT 1`) assert.EqualError(t, err, "goqu: Type must be a pointer to a struct when calling ScanStruct") _, err = db.ScanStruct(&item, `SELECT "test" FROM "items" LIMIT 1`) assert.EqualError(t, err, `goqu: Unable to find corresponding field to column "test" returned by query`) }
func Test_Arguments_Assert(t *testing.T) { var args Arguments = []interface{}{"string", 123, true} assert.True(t, args.Assert(t, "string", 123, true)) }
func Test_Mock_AssertCalled_WithArguments_With_Repeatability(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("Test_Mock_AssertCalled_WithArguments_With_Repeatability", 1, 2, 3).Return(5, 6, 7).Once() mockedService.On("Test_Mock_AssertCalled_WithArguments_With_Repeatability", 2, 3, 4).Return(5, 6, 7).Once() mockedService.Called(1, 2, 3) mockedService.Called(2, 3, 4) tt := new(testing.T) assert.True(t, mockedService.AssertCalled(tt, "Test_Mock_AssertCalled_WithArguments_With_Repeatability", 1, 2, 3)) assert.True(t, mockedService.AssertCalled(tt, "Test_Mock_AssertCalled_WithArguments_With_Repeatability", 2, 3, 4)) assert.False(t, mockedService.AssertCalled(tt, "Test_Mock_AssertCalled_WithArguments_With_Repeatability", 3, 4, 5)) }
func (me *adapterTest) TestRegisterAdapter() { t := me.T() RegisterAdapter("test", func(ds *Dataset) Adapter { return NewDefaultAdapter(ds) }) assert.True(t, HasAdapter("test")) removeAdapter("test") }
func Test_Arguments_Is(t *testing.T) { var args Arguments = []interface{}{"string", 123, true} assert.True(t, args.Is("string", 123, true)) assert.False(t, args.Is("wrong", 456, false)) }
func Test_Mock_AssertCalled_WithAnythingOfTypeArgument(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("Test_Mock_AssertCalled_WithAnythingOfTypeArgument", Anything, Anything, Anything).Return() mockedService.Called(1, "two", []uint8("three")) assert.True(t, mockedService.AssertCalled(t, "Test_Mock_AssertCalled_WithAnythingOfTypeArgument", AnythingOfType("int"), AnythingOfType("string"), AnythingOfType("[]uint8"))) }
func (me *postgresTest) TestUpdate() { t := me.T() ds := me.db.From("entry") var e entry found, err := ds.Where(goqu.I("int").Eq(9)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) e.Int = 11 _, err = ds.Where(goqu.I("id").Eq(e.Id)).Update(e).Exec() assert.NoError(t, err) count, err := ds.Where(goqu.I("int").Eq(11)).Count() assert.NoError(t, err) assert.Equal(t, count, 1) var id uint32 found, err = ds.Where(goqu.I("int").Eq(11)).Returning("id").Update(map[string]interface{}{"int": 9}).ScanVal(&id) assert.NoError(t, err) assert.True(t, found) assert.Equal(t, id, e.Id) }
func Test_Mock_AssertCalled_WithArguments(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("Test_Mock_AssertCalled_WithArguments", 1, 2, 3).Return(5, 6, 7) mockedService.Called(1, 2, 3) tt := new(testing.T) assert.True(t, mockedService.AssertCalled(tt, "Test_Mock_AssertCalled_WithArguments", 1, 2, 3)) assert.False(t, mockedService.AssertCalled(tt, "Test_Mock_AssertCalled_WithArguments", 2, 3, 4)) }
func (me *postgresTest) TestInsert() { t := me.T() ds := me.db.From("entry") now := time.Now() e := entry{Int: 10, Float: 1.000000, String: "1.000000", Time: now, Bool: true, Bytes: []byte("1.000000")} _, err := ds.Insert(e).Exec() assert.NoError(t, err) var insertedEntry entry found, err := ds.Where(goqu.I("int").Eq(10)).ScanStruct(&insertedEntry) assert.NoError(t, err) assert.True(t, found) assert.True(t, insertedEntry.Id > 0) entries := []entry{ {Int: 11, Float: 1.100000, String: "1.100000", Time: now, Bool: false, Bytes: []byte("1.100000")}, {Int: 12, Float: 1.200000, String: "1.200000", Time: now, Bool: true, Bytes: []byte("1.200000")}, {Int: 13, Float: 1.300000, String: "1.300000", Time: now, Bool: false, Bytes: []byte("1.300000")}, {Int: 14, Float: 1.400000, String: "1.400000", Time: now, Bool: true, Bytes: []byte("1.400000")}, } _, err = ds.Insert(entries).Exec() assert.NoError(t, err) var newEntries []entry assert.NoError(t, ds.Where(goqu.I("int").In([]uint32{11, 12, 13, 14})).ScanStructs(&newEntries)) assert.Len(t, newEntries, 4) _, err = ds.Insert( entry{Int: 15, Float: 1.500000, String: "1.500000", Time: now, Bool: false, Bytes: []byte("1.500000")}, entry{Int: 16, Float: 1.600000, String: "1.600000", Time: now, Bool: true, Bytes: []byte("1.600000")}, entry{Int: 17, Float: 1.700000, String: "1.700000", Time: now, Bool: false, Bytes: []byte("1.700000")}, entry{Int: 18, Float: 1.800000, String: "1.800000", Time: now, Bool: true, Bytes: []byte("1.800000")}, ).Exec() assert.NoError(t, err) newEntries = newEntries[0:0] assert.NoError(t, ds.Where(goqu.I("int").In([]uint32{15, 16, 17, 18})).ScanStructs(&newEntries)) assert.Len(t, newEntries, 4) }
func (me *adapterTest) TestNewAdapter() { t := me.T() RegisterAdapter("test", func(ds *Dataset) Adapter { return NewDefaultAdapter(ds) }) assert.True(t, HasAdapter("test")) adapter := NewAdapter("test", From("test")) assert.NotNil(t, adapter) removeAdapter("test") adapter = NewAdapter("test", From("test")) assert.NotNil(t, adapter) }
func (me *mysqlTest) TestUpdate() { t := me.T() ds := me.db.From("entry") var e entry found, err := ds.Where(goqu.I("int").Eq(9)).Select("id").ScanStruct(&e) assert.NoError(t, err) assert.True(t, found) e.Int = 11 _, err = ds.Where(goqu.I("id").Eq(e.Id)).Update(e).Exec() assert.NoError(t, err) count, err := ds.Where(goqu.I("int").Eq(11)).Count() assert.NoError(t, err) assert.Equal(t, count, 1) }
func Test_Mock_AssertExpectationsCustomType(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("TheExampleMethod3", AnythingOfType("*mock.ExampleType")).Return(nil).Once() tt := new(testing.T) assert.False(t, mockedService.AssertExpectations(tt)) // make the call now mockedService.TheExampleMethod3(&ExampleType{}) // now assert expectations assert.True(t, mockedService.AssertExpectations(tt)) }
func Test_Mock_AssertExpectations(t *testing.T) { var mockedService *TestExampleImplementation = new(TestExampleImplementation) mockedService.On("Test_Mock_AssertExpectations", 1, 2, 3).Return(5, 6, 7) tt := new(testing.T) assert.False(t, mockedService.AssertExpectations(tt)) // make the call now mockedService.Called(1, 2, 3) // now assert expectations assert.True(t, mockedService.AssertExpectations(tt)) }
func Test_AssertExpectationsForObjects_Helper(t *testing.T) { var mockedService1 *TestExampleImplementation = new(TestExampleImplementation) var mockedService2 *TestExampleImplementation = new(TestExampleImplementation) var mockedService3 *TestExampleImplementation = new(TestExampleImplementation) mockedService1.On("Test_AssertExpectationsForObjects_Helper", 1).Return() mockedService2.On("Test_AssertExpectationsForObjects_Helper", 2).Return() mockedService3.On("Test_AssertExpectationsForObjects_Helper", 3).Return() mockedService1.Called(1) mockedService2.Called(2) mockedService3.Called(3) assert.True(t, AssertExpectationsForObjects(t, mockedService1.Mock, mockedService2.Mock, mockedService3.Mock)) }
func (me *databaseTest) TestScanVal() { t := me.T() mDb, mock, err := sqlmock.New() assert.NoError(t, err) mock.ExpectQuery(`SELECT "id" FROM "items"`). WithArgs(). WillReturnRows(sqlmock.NewRows([]string{"id"}).FromCSVString("10")) db := New("mock", mDb) var id int64 found, err := db.ScanVal(&id, `SELECT "id" FROM "items"`) assert.NoError(t, err) assert.Equal(t, id, 10) assert.True(t, found) found, err = db.ScanVal([]int64{}, `SELECT "id" FROM "items"`) assert.EqualError(t, err, "goqu: Type must be a pointer when calling ScanVal") found, err = db.ScanVal(10, `SELECT "id" FROM "items"`) assert.EqualError(t, err, "goqu: Type must be a pointer when calling ScanVal") }
func (me *datasetTest) TestScanVal_WithPreparedStatement() { t := me.T() mDb, mock, err := sqlmock.New() assert.NoError(t, err) mock.ExpectQuery(`SELECT "id" FROM "items" WHERE \(\("address" = \?\) AND \("name" IN \(\?, \?, \?\)\)\) LIMIT ?`). WithArgs("111 Test Addr", "Bob", "Sally", "Billy", 1). WillReturnRows(sqlmock.NewRows([]string{"id"}).FromCSVString("10")) db := New("mock", mDb) var id int64 found, err := db.From("items"). Prepared(true). Select("id"). Where(Ex{"name": []string{"Bob", "Sally", "Billy"}, "address": "111 Test Addr"}). ScanVal(&id) assert.NoError(t, err) assert.Equal(t, id, 10) assert.True(t, found) found, err = db.From("items").ScanVal([]int64{}) assert.EqualError(t, err, "goqu: Type must be a pointer when calling ScanVal") found, err = db.From("items").ScanVal(10) assert.EqualError(t, err, "goqu: Type must be a pointer when calling ScanVal") }
// True asserts that the specified value is true. // // require.True(t, myBool, "myBool should be true") func True(t TestingT, value bool, msgAndArgs ...interface{}) { if !assert.True(t, value, msgAndArgs...) { t.FailNow() } }
func (me *postgresTest) TestQuery() { t := me.T() var entries []entry ds := me.db.From("entry") assert.NoError(t, ds.Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 10) floatVal := float64(0) baseDate, err := time.Parse(time.RFC3339Nano, "2015-02-22T18:19:55.000000000-00:00") assert.NoError(t, err) baseDate = baseDate.UTC() for i, entry := range entries { f := fmt.Sprintf("%f", floatVal) assert.Equal(t, entry.Id, uint32(i+1)) assert.Equal(t, entry.Int, i) assert.Equal(t, fmt.Sprintf("%f", entry.Float), f) assert.Equal(t, entry.String, f) assert.Equal(t, entry.Bytes, []byte(f)) assert.Equal(t, entry.Bool, i%2 == 0) assert.Equal(t, entry.Time.Unix(), baseDate.Add(time.Duration(i)*time.Hour).Unix()) floatVal += float64(0.1) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("bool").IsTrue()).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 5) assert.NoError(t, err) for _, entry := range entries { assert.True(t, entry.Bool) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("int").Gt(4)).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 5) assert.NoError(t, err) for _, entry := range entries { assert.True(t, entry.Int > 4) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("int").Gte(5)).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 5) assert.NoError(t, err) for _, entry := range entries { assert.True(t, entry.Int >= 5) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("int").Lt(5)).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 5) assert.NoError(t, err) for _, entry := range entries { assert.True(t, entry.Int < 5) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("int").Lte(4)).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 5) assert.NoError(t, err) for _, entry := range entries { assert.True(t, entry.Int <= 4) } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("string").Eq("0.100000")).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 1) assert.NoError(t, err) for _, entry := range entries { assert.Equal(t, entry.String, "0.100000") } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("string").Like("0.1%")).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 1) assert.NoError(t, err) for _, entry := range entries { assert.Equal(t, entry.String, "0.100000") } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("string").NotLike("0.1%")).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 9) assert.NoError(t, err) for _, entry := range entries { assert.NotEqual(t, entry.String, "0.100000") } entries = entries[0:0] assert.NoError(t, ds.Where(goqu.I("string").IsNull()).Order(goqu.I("id").Asc()).ScanStructs(&entries)) assert.Len(t, entries, 0) }
func (me *datasetAdapterTest) TestSupportsOrderByOnUpdate() { t := me.T() dsAdapter := me.GetDs("test").Adapter() assert.True(t, dsAdapter.SupportsLimitOnDelete()) }