Skip to content

Commit 08b7a81

Browse files
committed
fix(performer): ensure empty aliases don't trigger loaded relationship panic
Modified NormalizeAliases to return an initialized empty slice instead of nil when aliases are empty. This ensures the aliases relationship is marked as 'loaded', preventing a panic in ValidateCreate. Added a corresponding unit test to verify creation with empty or filtered aliases.
1 parent 2bd38c2 commit 08b7a81

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

pkg/performer/alias.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
// NormalizeAliases trims whitespace, deduplicates aliases (case-insensitively),
1010
// and ensures aliases are not empty and do not match the performer's name.
1111
func NormalizeAliases(performerName string, aliases []models.PerformerAlias) []models.PerformerAlias {
12-
var sanitized []models.PerformerAlias
12+
sanitized := []models.PerformerAlias{}
1313
seen := make(map[string]bool)
1414
nameLower := strings.ToLower(strings.TrimSpace(performerName))
1515

pkg/performer/validate_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,3 +307,32 @@ func TestValidateUpdateDeathDate(t *testing.T) {
307307
})
308308
}
309309
}
310+
311+
func TestValidateCreate(t *testing.T) {
312+
db := mocks.NewDatabase()
313+
db.Performer.On("QueryCount", mock.Anything, mock.Anything, mock.Anything).Return(0, nil)
314+
315+
tests := []struct {
316+
name string
317+
pName string
318+
aliases []models.PerformerAlias
319+
}{
320+
{"no aliases", "Performer 1", nil},
321+
{"empty aliases", "Performer 2", []models.PerformerAlias{}},
322+
{"alias matches name", "Performer 3", []models.PerformerAlias{{Alias: "Performer 3", IgnoreAutoTag: true}}},
323+
{"duplicate aliases", "Performer 4", []models.PerformerAlias{{Alias: "Alias 1", IgnoreAutoTag: true}, {Alias: "Alias 1", IgnoreAutoTag: false}}},
324+
}
325+
326+
for _, tt := range tests {
327+
t.Run(tt.name, func(t *testing.T) {
328+
p := models.Performer{
329+
Name: tt.pName,
330+
}
331+
p.Aliases = models.NewRelatedPerformerAliases(NormalizeAliases(p.Name, tt.aliases))
332+
333+
// This should NOT panic
334+
err := ValidateCreate(testCtx, p, db.Performer)
335+
assert.Nil(t, err)
336+
})
337+
}
338+
}

0 commit comments

Comments
 (0)