//go:build !runOnTask

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

import (
	"github.com/stretchr/testify/assert"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"testing"
	"time"
)

func TestWriteToDB3(t *testing.T) {

	gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
	if err != nil {
		t.Fatalf("a error occurred while opening the database: %v", err)
	}
	t.Cleanup(func() {
		sqlDB, err := gormDB.DB()
		if err != nil {
			t.Fatalf("failed to get generic database object from GORM DB: %v", err)
		}
		_ = sqlDB.Close()
	})

	db := gormDB
	db.Logger = db.Logger.LogMode(4)

	manager := NewManager()
	manager.SetDB(db)
	err = manager.AddWorker(NewLocalWorker(1))
	assert.Nil(t, err)

	err = manager.Start()
	assert.Nil(t, err)
	runner := &CounterRunnable{}
	job := NewJob[CounterResult]("job2", runner)

	scheduler := &InstantScheduler{}
	err = manager.ScheduleJob(job, scheduler)
	assert.Nil(t, err)

	time.Sleep(1 * time.Second)

	// test is job in database
	var tmpJob1 JobPersistence
	r := db.First(&tmpJob1, "id = ?", "job2")

	assert.Nil(t, r.Error)
	assert.Equal(t, JobID("job2"), tmpJob1.ID)

	time.Sleep(1 * time.Second)

	err = manager.DeleteJob(job.GetID())
	assert.Nil(t, err)

	// test is job in database
	var tmpJob JobPersistence
	err = db.First(&tmpJob, "id = ?", "job2").Error
	assert.NotNil(t, err)

}