I am struggling with writing a test for my go lambda function with sqlmock and gorm.
This is the function I want to test:
func DoCleanup(con *gorm.DB) {
sixMonthsAgo := time.Now().AddDate(0, -6, 0).Format("2006-02-01")
con.Where("date_to <= ?", sixMonthsAgo).Delete(&Availability{})
con.Where("date_to <= ?", sixMonthsAgo).Delete(&Reservation{})
}
And this is my test:
func TestDoCleanup(m *testing.T) {
var mock sqlmock.Sqlmock
var db *sql.DB
var err error
db, mock, err = sqlmock.New()
assert.Nil(m, err)
dialector := mysql.New(mysql.Config{
DSN: "sqlmock_db_0",
DriverName: "mysql",
Conn: db,
SkipInitializeWithVersion: true,
})
conn, err := gorm.Open(dialector, &gorm.Config{})
if err != nil {
m.Errorf("Failed to open connection to DB: %v", err)
}
if conn == nil {
m.Error("Failed to open connection to DB: conn is nil")
}
defer db.Close()
mock.ExpectQuery(fmt.Sprintf("DELETE FROM availability WHERE date_to <= '%s'", time.Now().AddDate(0, -6, 0).Format("2006-02-01")))
mock.ExpectQuery(fmt.Sprintf("DELETE FROM reservations WHERE date_to <= '%s'", time.Now().AddDate(0, -6, 0).Format("2006-02-01")))
DoCleanup(conn)
err = mock.ExpectationsWereMet()
assert.Nil(m, err)
}
I don't know what I am doing wrong. This is the first time I'm using sqlmock. I've read up a few places, and my code looks fine, but I'm not getting the results. My error is:
Expected nil, but got: &errors.errorString{s:"there is a remaining expectation which was not matched: ExpectedQuery => expecting Query, QueryContext or QueryRow which:\n - matches sql: 'DELETE FROM availability WHERE date_to <= '2022-13-06''\n - is without arguments"}
Any ideas what I'm doing wrong?