diff --git a/pkg/sqlite/filter.go b/pkg/sqlite/filter.go index 7ced0130b..e6211a91e 100644 --- a/pkg/sqlite/filter.go +++ b/pkg/sqlite/filter.go @@ -729,7 +729,7 @@ type stringListCriterionHandlerBuilder struct { func (m *stringListCriterionHandlerBuilder) handler(criterion *models.StringCriterionInput) criterionHandlerFunc { return func(ctx context.Context, f *filterBuilder) { - if criterion != nil && len(criterion.Value) > 0 { + if criterion != nil { m.addJoinTable(f) stringCriterionHandler(criterion, m.joinTable+"."+m.stringColumn)(ctx, f) diff --git a/pkg/sqlite/setup_test.go b/pkg/sqlite/setup_test.go index 92412ac89..d93ac82f8 100644 --- a/pkg/sqlite/setup_test.go +++ b/pkg/sqlite/setup_test.go @@ -1482,9 +1482,12 @@ func createStudios(ctx context.Context, sqb models.StudioReaderWriter, n int, o } // add alias - alias := getStudioStringValue(i, "Alias") - if err := sqb.UpdateAliases(ctx, created.ID, []string{alias}); err != nil { - return fmt.Errorf("error setting studio alias: %s", err.Error()) + // only add aliases for some scenes + if i == studioIdxWithMovie || i%5 == 0 { + alias := getStudioStringValue(i, "Alias") + if err := sqb.UpdateAliases(ctx, created.ID, []string{alias}); err != nil { + return fmt.Errorf("error setting studio alias: %s", err.Error()) + } } studioIDs = append(studioIDs, created.ID) diff --git a/pkg/sqlite/studio_test.go b/pkg/sqlite/studio_test.go index 5de18fddf..4bffe4517 100644 --- a/pkg/sqlite/studio_test.go +++ b/pkg/sqlite/studio_test.go @@ -229,8 +229,9 @@ func TestStudioQueryForAutoTag(t *testing.T) { t.Errorf("Error finding studios: %s", err.Error()) } - assert.Len(t, studios, 1) - assert.Equal(t, studioIDs[studioIdxWithMovie], studios[0].ID) + if assert.Len(t, studios, 1) { + assert.Equal(t, studioIDs[studioIdxWithMovie], studios[0].ID) + } return nil }) @@ -787,7 +788,7 @@ func TestStudioQueryName(t *testing.T) { } func TestStudioQueryAlias(t *testing.T) { - const studioIdx = 1 + const studioIdx = studioIdxWithMovie studioName := getStudioStringValue(studioIdx, "Alias") aliasCriterion := &models.StringCriterionInput{ @@ -800,6 +801,7 @@ func TestStudioQueryAlias(t *testing.T) { } verifyFn := func(ctx context.Context, studio *models.Studio) { + t.Helper() aliases, err := sqlite.StudioReaderWriter.GetAliases(ctx, studio.ID) if err != nil { t.Errorf("Error querying studios: %s", err.Error()) @@ -819,11 +821,18 @@ func TestStudioQueryAlias(t *testing.T) { verifyStudioQuery(t, studioFilter, verifyFn) aliasCriterion.Modifier = models.CriterionModifierMatchesRegex - aliasCriterion.Value = "studio_.*1_Alias" + aliasCriterion.Value = "studio_.*2_Alias" verifyStudioQuery(t, studioFilter, verifyFn) aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex verifyStudioQuery(t, studioFilter, verifyFn) + + aliasCriterion.Modifier = models.CriterionModifierIsNull + aliasCriterion.Value = "" + verifyStudioQuery(t, studioFilter, verifyFn) + + aliasCriterion.Modifier = models.CriterionModifierNotNull + verifyStudioQuery(t, studioFilter, verifyFn) } func TestStudioUpdateAlias(t *testing.T) { diff --git a/pkg/sqlite/tag_test.go b/pkg/sqlite/tag_test.go index 2f91658de..3a9dbd1f9 100644 --- a/pkg/sqlite/tag_test.go +++ b/pkg/sqlite/tag_test.go @@ -277,6 +277,13 @@ func TestTagQueryAlias(t *testing.T) { aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex verifyTagQuery(t, tagFilter, nil, verifyFn) + + aliasCriterion.Modifier = models.CriterionModifierIsNull + aliasCriterion.Value = "" + verifyTagQuery(t, tagFilter, nil, verifyFn) + + aliasCriterion.Modifier = models.CriterionModifierNotNull + verifyTagQuery(t, tagFilter, nil, verifyFn) } func verifyTagQuery(t *testing.T, tagFilter *models.TagFilterType, findFilter *models.FindFilterType, verifyFn func(ctx context.Context, t *models.Tag)) { diff --git a/ui/v2.5/src/models/list-filter/criteria/captions.ts b/ui/v2.5/src/models/list-filter/criteria/captions.ts index b516b8777..0ba4fc8f4 100644 --- a/ui/v2.5/src/models/list-filter/criteria/captions.ts +++ b/ui/v2.5/src/models/list-filter/criteria/captions.ts @@ -28,7 +28,7 @@ export const CaptionsCriterionOption = new CaptionsCriterionOptionType( export class CaptionCriterion extends StringCriterion { protected toCriterionInput() { - const value = valueToCode(this.value); + const value = valueToCode(this.value) ?? ""; return { value,