93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package tasks
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"encoding/json"
|
||
|
|
"errors"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/Silo-Server/silo-server/internal/taskmanager"
|
||
|
|
)
|
||
|
|
|
||
|
|
type fakeEbookMetadataEnricher struct {
|
||
|
|
enriched int
|
||
|
|
err error
|
||
|
|
called bool
|
||
|
|
}
|
||
|
|
|
||
|
|
func (f *fakeEbookMetadataEnricher) Run(context.Context) (int, error) {
|
||
|
|
f.called = true
|
||
|
|
return f.enriched, f.err
|
||
|
|
}
|
||
|
|
|
||
|
|
type ebookMetadataProgressReporter struct {
|
||
|
|
messages []string
|
||
|
|
result json.RawMessage
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p *ebookMetadataProgressReporter) Report(_ float64, message string) {
|
||
|
|
p.messages = append(p.messages, message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p *ebookMetadataProgressReporter) SetResultData(data json.RawMessage) {
|
||
|
|
p.result = data
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSyncEbookMetadataTaskProperties(t *testing.T) {
|
||
|
|
task := NewSyncEbookMetadataTask(&fakeEbookMetadataEnricher{})
|
||
|
|
|
||
|
|
if task.Key() != "sync_ebook_metadata" {
|
||
|
|
t.Fatalf("Key() = %q, want sync_ebook_metadata", task.Key())
|
||
|
|
}
|
||
|
|
if task.Name() != "Sync Ebook Metadata" {
|
||
|
|
t.Fatalf("Name() = %q, want Sync Ebook Metadata", task.Name())
|
||
|
|
}
|
||
|
|
if task.Category() != taskmanager.TaskCategoryMetadata {
|
||
|
|
t.Fatalf("Category() = %q, want %q", task.Category(), taskmanager.TaskCategoryMetadata)
|
||
|
|
}
|
||
|
|
if task.IsHidden() {
|
||
|
|
t.Fatal("IsHidden() = true, want false")
|
||
|
|
}
|
||
|
|
triggers := task.DefaultTriggers()
|
||
|
|
if len(triggers) != 1 || triggers[0].Type != taskmanager.TriggerTypeInterval || triggers[0].IntervalMs != 5*60*1000 {
|
||
|
|
t.Fatalf("DefaultTriggers() = %#v, want one 5 minute interval", triggers)
|
||
|
|
}
|
||
|
|
if strings.Contains(strings.ToLower(task.Description()), "narrator") {
|
||
|
|
t.Fatalf("Description() mentions narrator: %q", task.Description())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSyncEbookMetadataTaskExecuteReportsResult(t *testing.T) {
|
||
|
|
enricher := &fakeEbookMetadataEnricher{enriched: 3}
|
||
|
|
task := NewSyncEbookMetadataTask(enricher)
|
||
|
|
progress := &ebookMetadataProgressReporter{}
|
||
|
|
|
||
|
|
if err := task.Execute(context.Background(), progress); err != nil {
|
||
|
|
t.Fatalf("Execute() error = %v", err)
|
||
|
|
}
|
||
|
|
if !enricher.called {
|
||
|
|
t.Fatal("enricher was not called")
|
||
|
|
}
|
||
|
|
var result map[string]int
|
||
|
|
if err := json.Unmarshal(progress.result, &result); err != nil {
|
||
|
|
t.Fatalf("result data JSON error: %v", err)
|
||
|
|
}
|
||
|
|
if result["items_enriched"] != 3 {
|
||
|
|
t.Fatalf("items_enriched = %d, want 3", result["items_enriched"])
|
||
|
|
}
|
||
|
|
if len(progress.messages) == 0 || !strings.Contains(progress.messages[len(progress.messages)-1], "3 items enriched") {
|
||
|
|
t.Fatalf("progress messages = %#v, want completion count", progress.messages)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSyncEbookMetadataTaskExecuteWrapsError(t *testing.T) {
|
||
|
|
enricher := &fakeEbookMetadataEnricher{err: errors.New("boom")}
|
||
|
|
task := NewSyncEbookMetadataTask(enricher)
|
||
|
|
|
||
|
|
err := task.Execute(context.Background(), &ebookMetadataProgressReporter{})
|
||
|
|
if err == nil || !strings.Contains(err.Error(), "ebook metadata sync") {
|
||
|
|
t.Fatalf("Execute() error = %v, want wrapped ebook metadata sync error", err)
|
||
|
|
}
|
||
|
|
}
|