package repository import ( "context" "github.com/DATA-DOG/go-sqlmock" "github.com/jmoiron/sqlx" "github.com/stretchr/testify/require" "go.uber.org/zap" "testing" ) func TestProblemRepository_CreateProblem(t *testing.T) { t.Parallel() db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) require.NoError(t, err) defer db.Close() sqlxDB := sqlx.NewDb(db, "sqlmock") defer sqlxDB.Close() problemRepo := NewProblemRepository(sqlxDB, zap.NewNop()) t.Run("valid problem creation", func(t *testing.T) { title := "Problem title" rows := sqlmock.NewRows([]string{"id"}).AddRow(1) mock.ExpectQuery(sqlxDB.Rebind(createProblemQuery)).WithArgs(title).WillReturnRows(rows) id, err := problemRepo.CreateProblem(context.Background(), title) require.NoError(t, err) require.Equal(t, int32(1), id) }) } func TestProblemRepository_DeleteProblem(t *testing.T) { t.Parallel() db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) require.NoError(t, err) defer db.Close() sqlxDB := sqlx.NewDb(db, "sqlmock") defer sqlxDB.Close() problemRepo := NewProblemRepository(sqlxDB, zap.NewNop()) t.Run("valid problem deletion", func(t *testing.T) { id := int32(1) rows := sqlmock.NewResult(1, 1) mock.ExpectExec(sqlxDB.Rebind(deleteProblemQuery)).WithArgs(id).WillReturnResult(rows) err = problemRepo.DeleteProblem(context.Background(), id) require.NoError(t, err) }) }