//go:build !runOnTask

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

import (
	"gorm.io/gorm"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"gorm.io/driver/sqlite"
)

func TestSaveJobWithSQLite(t *testing.T) {

	gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
	if err != nil {
		t.Fatalf("an 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()
	})

	manager := &Manager{database: gormDB}
	//saver := NewJobSyncer(manager)

	// Starte den DBSaver
	saver := NewJobSyncer(manager)

	jobID := JobID("testJob")
	job := NewJob[CounterResult](jobID, &CounterRunnable{})

	saver.Sync(job)

	time.Sleep(100 * time.Millisecond)

	manager.WaitSync()

	var count int64
	gormDB.Model(&JobPersistence{}).Count(&count)
	assert.Equal(t, int64(1), count, "It should be 1 job in the database")

	// get job from database
	var jobFromDB JobPersistence
	gormDB.First(&jobFromDB, "id = ?", jobID)
	assert.Equal(t, jobID, jobFromDB.ID, "JobID should be the same")

}