56 lines
2.2 KiB
Go
56 lines
2.2 KiB
Go
package embeddings
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/Silo-Server/silo-server/internal/models"
|
|
)
|
|
|
|
func TestBuildEmbeddingTextSortsCrewDeterministically(t *testing.T) {
|
|
item := &models.MediaItem{
|
|
Title: "Example",
|
|
Type: "movie",
|
|
People: []models.ItemPerson{
|
|
{Person: models.Person{ID: 3, Name: "Charlie"}, Kind: models.PersonKindWriter, SortOrder: 0},
|
|
{Person: models.Person{ID: 1, Name: "Alice"}, Kind: models.PersonKindWriter, SortOrder: 0},
|
|
{Person: models.Person{ID: 2, Name: "Bob"}, Kind: models.PersonKindWriter, SortOrder: 0},
|
|
{Person: models.Person{ID: 5, Name: "Zed"}, Kind: models.PersonKindDirector, SortOrder: 0},
|
|
{Person: models.Person{ID: 4, Name: "Ann"}, Kind: models.PersonKindDirector, SortOrder: 0},
|
|
},
|
|
}
|
|
|
|
text := BuildEmbeddingText(item)
|
|
|
|
if !strings.Contains(text, "Directed by Ann, Zed") {
|
|
t.Fatalf("director order was not deterministic by name: %q", text)
|
|
}
|
|
if !strings.Contains(text, "Written by Alice, Bob, Charlie") {
|
|
t.Fatalf("writer order was not deterministic by name: %q", text)
|
|
}
|
|
}
|
|
|
|
func TestBuildEmbeddingTextSortsActorsBeforeTopFive(t *testing.T) {
|
|
item := &models.MediaItem{
|
|
Title: "Example",
|
|
Type: "movie",
|
|
People: []models.ItemPerson{
|
|
{Person: models.Person{ID: 6, Name: "F"}, Kind: models.PersonKindActor, Character: "Six", SortOrder: 6},
|
|
{Person: models.Person{ID: 2, Name: "B"}, Kind: models.PersonKindActor, Character: "Two", SortOrder: 2},
|
|
{Person: models.Person{ID: 1, Name: "A"}, Kind: models.PersonKindActor, Character: "One", SortOrder: 1},
|
|
{Person: models.Person{ID: 5, Name: "E"}, Kind: models.PersonKindActor, Character: "Five", SortOrder: 5},
|
|
{Person: models.Person{ID: 4, Name: "D"}, Kind: models.PersonKindActor, Character: "Four", SortOrder: 4},
|
|
{Person: models.Person{ID: 3, Name: "C"}, Kind: models.PersonKindActor, Character: "Three", SortOrder: 3},
|
|
},
|
|
}
|
|
|
|
text := BuildEmbeddingText(item)
|
|
|
|
if strings.Contains(text, "F as Six") {
|
|
t.Fatalf("sixth actor should not be included after sorting: %q", text)
|
|
}
|
|
if !strings.Contains(text, "Cast: A as One, B as Two, C as Three, D as Four, E as Five") {
|
|
t.Fatalf("actor order was not deterministic by sort order: %q", text)
|
|
}
|
|
}
|