// Copyright 2023 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0

package jobqueue

import (
	"context"
	"github.com/DATA-DOG/go-sqlmock"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"testing"
)

func TestDBRunnable_Run(t *testing.T) {
	// Mock-DB erstellen
	db, mock, err := sqlmock.New()
	if err != nil {
		t.Fatalf("Could not create mock: %s", err)
	}
	gormDB, _ := gorm.Open(mysql.New(mysql.Config{
		Conn:                      db,
		SkipInitializeWithVersion: true,
	}), &gorm.Config{})

	//existsRows := sqlmock.NewRows([]string{"exists"}).
	//	AddRow(true)

	//mock.ExpectQuery("SELECT EXISTS \\( SELECT 1 FROM information_schema\\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \\);").
	//	WillReturnRows(existsRows)

	mock.ExpectExec("SELECT \\* FROM table_name").WillReturnResult(sqlmock.NewResult(1, 1))

	// Erstellen Sie die zu testende Instanz
	runnable := &DBRunnable{
		Type:  "mysql",
		Query: "SELECT * FROM table_name",
	}

	ctx := context.Background()
	ctx = DBRunnableWithDB(ctx, gormDB)

	// Rufen Sie die Run()-Methode auf und überprüfen Sie die Ergebnisse
	result, err := runnable.Run(ctx)

	// Überprüfungen hier
	if err != nil {
		t.Fatalf("Failed to run: %s", err)
	}
	if result.Status != ResultStatusSuccess {
		t.Fatalf("Expected success, got: %d", result.Status)
	}
}