mirror of
https://github.com/stashapp/stash.git
synced 2026-05-09 05:05:29 +02:00
Merge 10cc82f42a into 01a7583364
This commit is contained in:
commit
97e0bf0b97
6 changed files with 64 additions and 5 deletions
|
|
@ -423,6 +423,8 @@ input GroupFilterType {
|
|||
NOT: GroupFilterType
|
||||
|
||||
name: StringCriterionInput
|
||||
"Filter by aliases"
|
||||
aliases: StringCriterionInput
|
||||
director: StringCriterionInput
|
||||
synopsis: StringCriterionInput
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package models
|
|||
type GroupFilterType struct {
|
||||
OperatorFilter[GroupFilterType]
|
||||
Name *StringCriterionInput `json:"name"`
|
||||
Aliases *StringCriterionInput `json:"aliases"`
|
||||
Director *StringCriterionInput `json:"director"`
|
||||
Synopsis *StringCriterionInput `json:"synopsis"`
|
||||
// Filter by duration (in seconds)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ func (qb *groupFilterHandler) criterionHandler() criterionHandler {
|
|||
groupFilter := qb.groupFilter
|
||||
return compoundHandler{
|
||||
stringCriterionHandler(groupFilter.Name, "groups.name"),
|
||||
stringCriterionHandler(groupFilter.Aliases, "groups.aliases"),
|
||||
stringCriterionHandler(groupFilter.Director, "groups.director"),
|
||||
stringCriterionHandler(groupFilter.Synopsis, "groups.description"),
|
||||
intCriterionHandler(groupFilter.Rating100, "groups.rating", nil),
|
||||
|
|
|
|||
|
|
@ -328,6 +328,7 @@ func emptyGroup(idx int) models.Group {
|
|||
return models.Group{
|
||||
ID: groupIDs[idx],
|
||||
Name: groupNames[idx],
|
||||
Aliases: "",
|
||||
TagIDs: models.NewRelatedIDs([]int{}),
|
||||
ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}),
|
||||
SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}),
|
||||
|
|
@ -452,8 +453,9 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) {
|
|||
},
|
||||
},
|
||||
models.Group{
|
||||
ID: groupIDs[groupIdxWithParent],
|
||||
Name: groupNames[groupIdxWithParent],
|
||||
ID: groupIDs[groupIdxWithParent],
|
||||
Name: groupNames[groupIdxWithParent],
|
||||
Aliases: getGroupEmptyString(groupIdxWithParent, "Aliases"),
|
||||
ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{
|
||||
{GroupID: groupIDs[groupIdxWithChild]},
|
||||
{GroupID: groupIDs[groupIdxWithScene], Description: containingGroupDescription},
|
||||
|
|
@ -473,8 +475,9 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) {
|
|||
},
|
||||
},
|
||||
models.Group{
|
||||
ID: groupIDs[groupIdxWithChild],
|
||||
Name: groupNames[groupIdxWithChild],
|
||||
ID: groupIDs[groupIdxWithChild],
|
||||
Name: groupNames[groupIdxWithChild],
|
||||
Aliases: getGroupEmptyString(groupIdxWithChild, "Aliases"),
|
||||
SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{
|
||||
{GroupID: groupIDs[groupIdxWithParent]},
|
||||
{GroupID: groupIDs[groupIdxWithScene], Description: subGroupDescription},
|
||||
|
|
@ -496,6 +499,7 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) {
|
|||
models.Group{
|
||||
ID: groupIDs[groupIdxWithParent],
|
||||
Name: groupNames[groupIdxWithParent],
|
||||
Aliases: getGroupEmptyString(groupIdxWithParent, "Aliases"),
|
||||
ContainingGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}),
|
||||
},
|
||||
false,
|
||||
|
|
@ -514,6 +518,7 @@ func Test_groupQueryBuilder_UpdatePartial(t *testing.T) {
|
|||
models.Group{
|
||||
ID: groupIDs[groupIdxWithChild],
|
||||
Name: groupNames[groupIdxWithChild],
|
||||
Aliases: getGroupEmptyString(groupIdxWithChild, "Aliases"),
|
||||
SubGroups: models.NewRelatedGroupDescriptions([]models.GroupIDDescription{}),
|
||||
},
|
||||
false,
|
||||
|
|
@ -885,6 +890,53 @@ func TestGroupQueryURL(t *testing.T) {
|
|||
verifyGroupQuery(t, filter, verifyFn)
|
||||
}
|
||||
|
||||
func TestGroupQueryAliases(t *testing.T) {
|
||||
const groupIdx = 1
|
||||
const aliasesField = "Aliases"
|
||||
groupAliases := getGroupStringValue(groupIdx, aliasesField)
|
||||
|
||||
aliasesCriterion := models.StringCriterionInput{
|
||||
Value: groupAliases,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
}
|
||||
|
||||
filter := models.GroupFilterType{
|
||||
Aliases: &aliasesCriterion,
|
||||
}
|
||||
|
||||
verifyFn := func(n *models.Group) {
|
||||
t.Helper()
|
||||
verifyString(t, n.Aliases, aliasesCriterion)
|
||||
}
|
||||
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierNotEquals
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierIncludes
|
||||
aliasesCriterion.Value = "oup_0001_A"
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierExcludes
|
||||
aliasesCriterion.Value = "not-present-alias-substring"
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierMatchesRegex
|
||||
aliasesCriterion.Value = "group_.*1_Aliases"
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierNotMatchesRegex
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierIsNull
|
||||
aliasesCriterion.Value = ""
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
|
||||
aliasesCriterion.Modifier = models.CriterionModifierNotNull
|
||||
verifyGroupQuery(t, filter, verifyFn)
|
||||
}
|
||||
|
||||
func TestGroupQueryURLExcludes(t *testing.T) {
|
||||
withRollbackTxn(func(ctx context.Context) error {
|
||||
mqb := db.Group
|
||||
|
|
|
|||
|
|
@ -1520,8 +1520,10 @@ func createGroups(ctx context.Context, mqb models.GroupReaderWriter, n int, o in
|
|||
// groups [ i ] and [ n + o - i - 1 ] should have similar names with only the Name!=NaMe part different
|
||||
|
||||
name = getGroupStringValue(index, name)
|
||||
aliases := getGroupEmptyString(i, "Aliases")
|
||||
group := models.Group{
|
||||
Name: name,
|
||||
Name: name,
|
||||
Aliases: aliases,
|
||||
URLs: models.NewRelatedStrings([]string{
|
||||
getGroupEmptyString(i, urlField),
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ const criterionOptions = [
|
|||
GroupIsMissingCriterionOption,
|
||||
createStringCriterionOption("url"),
|
||||
createStringCriterionOption("name"),
|
||||
createStringCriterionOption("aliases"),
|
||||
createStringCriterionOption("director"),
|
||||
createStringCriterionOption("synopsis"),
|
||||
createDurationCriterionOption("duration"),
|
||||
|
|
|
|||
Loading…
Reference in a new issue