98 lines
3 KiB
Go
98 lines
3 KiB
Go
package files
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"telesrv/internal/seed/appearance"
|
|
)
|
|
|
|
func TestSeedAppearanceImportsDefaultWallpaperDocuments(t *testing.T) {
|
|
media := newFakeMediaStore()
|
|
blobs, err := NewLocalFS(t.TempDir())
|
|
if err != nil {
|
|
t.Fatalf("NewLocalFS: %v", err)
|
|
}
|
|
svc := NewService(media, blobs, 2)
|
|
|
|
stats, err := svc.SeedAppearance(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("SeedAppearance: %v", err)
|
|
}
|
|
if stats.Skipped || stats.Wallpapers == 0 || stats.Documents == 0 || stats.Blobs < stats.Documents {
|
|
t.Fatalf("SeedAppearance stats = %+v, want non-empty wallpapers/documents with >=1 blob each", stats)
|
|
}
|
|
|
|
var first appearance.Wallpaper
|
|
for _, w := range appearance.Default().Wallpapers {
|
|
if w.Document.ID != 0 {
|
|
first = w
|
|
break
|
|
}
|
|
}
|
|
if first.Document.ID == 0 {
|
|
t.Fatalf("no wallpaper with a document in catalog")
|
|
}
|
|
doc, ok, err := media.GetDocument(context.Background(), first.Document.ID)
|
|
if err != nil || !ok {
|
|
t.Fatalf("GetDocument(%d) = ok %v err %v", first.Document.ID, ok, err)
|
|
}
|
|
if doc.DCID != 2 || doc.MimeType != first.Document.MimeType || doc.Size != first.Document.Size {
|
|
t.Fatalf("document = dc %d mime %q size %d, want dc 2 mime %q size %d",
|
|
doc.DCID, doc.MimeType, doc.Size, first.Document.MimeType, first.Document.Size)
|
|
}
|
|
if len(doc.Thumbs) == 0 || doc.Thumbs[0].Type != "m" {
|
|
t.Fatalf("document thumbs = %+v, want m thumbnail", doc.Thumbs)
|
|
}
|
|
if _, ok, err := media.GetFileBlob(context.Background(), fmt.Sprintf("doc:%d", first.Document.ID)); err != nil || !ok {
|
|
t.Fatalf("main blob ok=%v err=%v, want present", ok, err)
|
|
}
|
|
if _, ok, err := media.GetFileBlob(context.Background(), fmt.Sprintf("doc:%d:m", first.Document.ID)); err != nil || !ok {
|
|
t.Fatalf("thumb blob ok=%v err=%v, want present", ok, err)
|
|
}
|
|
}
|
|
|
|
func TestSeedAppearanceSkipsUnchangedCatalogAndRepairsMissingBlob(t *testing.T) {
|
|
ctx := context.Background()
|
|
media := newFakeMediaStore()
|
|
blobs, err := NewLocalFS(t.TempDir())
|
|
if err != nil {
|
|
t.Fatalf("NewLocalFS: %v", err)
|
|
}
|
|
svc := NewService(media, blobs, 2)
|
|
|
|
first, err := svc.SeedAppearance(ctx)
|
|
if err != nil {
|
|
t.Fatalf("first SeedAppearance: %v", err)
|
|
}
|
|
if first.Skipped || first.Documents == 0 || first.Blobs == 0 {
|
|
t.Fatalf("first stats = %+v, want import", first)
|
|
}
|
|
second, err := svc.SeedAppearance(ctx)
|
|
if err != nil {
|
|
t.Fatalf("second SeedAppearance: %v", err)
|
|
}
|
|
if !second.Skipped || second.Documents != 0 || second.Blobs != 0 {
|
|
t.Fatalf("second stats = %+v, want unchanged catalog skip", second)
|
|
}
|
|
|
|
var firstDocID int64
|
|
for _, w := range appearance.Default().Wallpapers {
|
|
if w.Document.ID != 0 && w.Document.Path != "" {
|
|
firstDocID = w.Document.ID
|
|
break
|
|
}
|
|
}
|
|
if firstDocID == 0 {
|
|
t.Fatal("no wallpaper document found")
|
|
}
|
|
delete(media.blobs, fmt.Sprintf("doc:%d", firstDocID))
|
|
repaired, err := svc.SeedAppearance(ctx)
|
|
if err != nil {
|
|
t.Fatalf("repair SeedAppearance: %v", err)
|
|
}
|
|
if repaired.Skipped || repaired.Documents == 0 || repaired.Blobs == 0 {
|
|
t.Fatalf("repair stats = %+v, want missing blob to force reimport", repaired)
|
|
}
|
|
}
|