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

package jobqueue

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

func TestCreateOrUpdateJob(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()
	})

	db := gormDB

	// Migrate the schema
	assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))

	runner := &CounterRunnable{}
	job := NewJob[CounterResult]("job1", runner)

	assert.NoError(t, saveJob(job.GetPersistence(), db))

	var jobPersistence JobPersistence
	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
	assert.Equal(t, job.GetID(), jobPersistence.ID)

	assert.Equal(t, "", jobPersistence.Description)
	assert.Equal(t, Priority(1), jobPersistence.Priority)
	job.description = "Updated description"
	assert.NoError(t, saveJob(job.GetPersistence(), db))
	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
	assert.Equal(t, "Updated description", jobPersistence.Description)

}