Fix tag/studio alias and caption null filtering (#2990)

* Fix null filter for alias/captions
* Fix error when selecting is null for captions
This commit is contained in:
WithoutPants
2022-10-11 14:21:07 +11:00
committed by GitHub
parent 6ce409cd56
commit 9bff498c28
5 changed files with 28 additions and 9 deletions

View File

@@ -729,7 +729,7 @@ type stringListCriterionHandlerBuilder struct {
func (m *stringListCriterionHandlerBuilder) handler(criterion *models.StringCriterionInput) criterionHandlerFunc { func (m *stringListCriterionHandlerBuilder) handler(criterion *models.StringCriterionInput) criterionHandlerFunc {
return func(ctx context.Context, f *filterBuilder) { return func(ctx context.Context, f *filterBuilder) {
if criterion != nil && len(criterion.Value) > 0 { if criterion != nil {
m.addJoinTable(f) m.addJoinTable(f)
stringCriterionHandler(criterion, m.joinTable+"."+m.stringColumn)(ctx, f) stringCriterionHandler(criterion, m.joinTable+"."+m.stringColumn)(ctx, f)

View File

@@ -1482,10 +1482,13 @@ func createStudios(ctx context.Context, sqb models.StudioReaderWriter, n int, o
} }
// add alias // add alias
// only add aliases for some scenes
if i == studioIdxWithMovie || i%5 == 0 {
alias := getStudioStringValue(i, "Alias") alias := getStudioStringValue(i, "Alias")
if err := sqb.UpdateAliases(ctx, created.ID, []string{alias}); err != nil { if err := sqb.UpdateAliases(ctx, created.ID, []string{alias}); err != nil {
return fmt.Errorf("error setting studio alias: %s", err.Error()) return fmt.Errorf("error setting studio alias: %s", err.Error())
} }
}
studioIDs = append(studioIDs, created.ID) studioIDs = append(studioIDs, created.ID)
studioNames = append(studioNames, created.Name.String) studioNames = append(studioNames, created.Name.String)

View File

@@ -229,8 +229,9 @@ func TestStudioQueryForAutoTag(t *testing.T) {
t.Errorf("Error finding studios: %s", err.Error()) t.Errorf("Error finding studios: %s", err.Error())
} }
assert.Len(t, studios, 1) if assert.Len(t, studios, 1) {
assert.Equal(t, studioIDs[studioIdxWithMovie], studios[0].ID) assert.Equal(t, studioIDs[studioIdxWithMovie], studios[0].ID)
}
return nil return nil
}) })
@@ -787,7 +788,7 @@ func TestStudioQueryName(t *testing.T) {
} }
func TestStudioQueryAlias(t *testing.T) { func TestStudioQueryAlias(t *testing.T) {
const studioIdx = 1 const studioIdx = studioIdxWithMovie
studioName := getStudioStringValue(studioIdx, "Alias") studioName := getStudioStringValue(studioIdx, "Alias")
aliasCriterion := &models.StringCriterionInput{ aliasCriterion := &models.StringCriterionInput{
@@ -800,6 +801,7 @@ func TestStudioQueryAlias(t *testing.T) {
} }
verifyFn := func(ctx context.Context, studio *models.Studio) { verifyFn := func(ctx context.Context, studio *models.Studio) {
t.Helper()
aliases, err := sqlite.StudioReaderWriter.GetAliases(ctx, studio.ID) aliases, err := sqlite.StudioReaderWriter.GetAliases(ctx, studio.ID)
if err != nil { if err != nil {
t.Errorf("Error querying studios: %s", err.Error()) t.Errorf("Error querying studios: %s", err.Error())
@@ -819,11 +821,18 @@ func TestStudioQueryAlias(t *testing.T) {
verifyStudioQuery(t, studioFilter, verifyFn) verifyStudioQuery(t, studioFilter, verifyFn)
aliasCriterion.Modifier = models.CriterionModifierMatchesRegex aliasCriterion.Modifier = models.CriterionModifierMatchesRegex
aliasCriterion.Value = "studio_.*1_Alias" aliasCriterion.Value = "studio_.*2_Alias"
verifyStudioQuery(t, studioFilter, verifyFn) verifyStudioQuery(t, studioFilter, verifyFn)
aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex
verifyStudioQuery(t, studioFilter, verifyFn) 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) { func TestStudioUpdateAlias(t *testing.T) {

View File

@@ -277,6 +277,13 @@ func TestTagQueryAlias(t *testing.T) {
aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex aliasCriterion.Modifier = models.CriterionModifierNotMatchesRegex
verifyTagQuery(t, tagFilter, nil, verifyFn) 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)) { func verifyTagQuery(t *testing.T, tagFilter *models.TagFilterType, findFilter *models.FindFilterType, verifyFn func(ctx context.Context, t *models.Tag)) {

View File

@@ -28,7 +28,7 @@ export const CaptionsCriterionOption = new CaptionsCriterionOptionType(
export class CaptionCriterion extends StringCriterion { export class CaptionCriterion extends StringCriterion {
protected toCriterionInput() { protected toCriterionInput() {
const value = valueToCode(this.value); const value = valueToCode(this.value) ?? "";
return { return {
value, value,