mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
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:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user