Skip to content
Snippets Groups Projects
Select Git revision
  • b4366c7db5f377bda5569e46f4085d3803c1a89b
  • master default protected
  • 0.1.1
  • 0.1.0
4 results

pages.go

Blame
  • database-8_test.go 3.26 KiB
    // 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"
    	"time"
    )
    
    func TestUpdateJob(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
    
    	assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))
    
    	runner := &CounterRunnable{}
    	job := NewJob[CounterResult]("job1", runner)
    	assert.NoError(t, saveJob(job.GetPersistence(), db))
    
    	job.SetPriority(PriorityHigh)
    	assert.NoError(t, updateJob(job.GetPersistence(), db))
    
    	var jobPersistence JobPersistence
    	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
    	assert.Equal(t, PriorityDefault, jobPersistence.Priority) // PriorityDefault because the update should not update the priority
    
    	assert.NoError(t, saveJob(job.GetPersistence(), db))
    
    	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
    	assert.Equal(t, PriorityHigh, jobPersistence.Priority)
    
    	var count int64
    	db.Model(&JobPersistence{}).Count(&count)
    	assert.Equal(t, int64(1), count) // Nur ein Datensatz sollte vorhanden sein
    }
    
    func TestCheckAndSaveOrUpdate(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
    
    	assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))
    
    	runner := &CounterRunnable{}
    	job := NewJob[CounterResult]("job1", runner)
    
    	syncer := &JobSyncer{manager: &Manager{database: db}}
    
    	var jobPersistence JobPersistence
    
    	assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
    	jobPersistence = JobPersistence{}
    	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
    	assert.Equal(t, PriorityDefault, jobPersistence.Priority)
    
    	job.SetPriority(PriorityHigh)
    	assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
    	jobPersistence = JobPersistence{}
    	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
    	assert.Equal(t, PriorityDefault, jobPersistence.Priority) // second update should not update the priority, because update only update stats and logs
    
    	// set stats and logs and test
    	job.stats = JobStats{
    		JobID:        job.GetID(),
    		RunCount:     2,
    		SuccessCount: 3,
    		ErrorCount:   4,
    		TimeMetrics:  TimeMetrics{},
    		CreatedAt:    time.Time{},
    		UpdatedAt:    time.Time{},
    		DeletedAt:    gorm.DeletedAt{},
    	}
    
    	job.logs = []JobLog{
    		{
    			JobID: job.GetID(),
    		}}
    
    	assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
    
    	job.stats.RunCount = 9
    	assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
    
    	jobPersistence = JobPersistence{}
    	assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
    }