mirror of https://github.com/stashapp/stash.git
Fix performer filters and sort keys (#1413)
* Fix "performer is missing image" filter * Fix `scene_count` sort * Add unit tests Co-authored-by: bnkai <48220860+bnkai@users.noreply.github.com> Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
parent
c08e0c0f60
commit
0472cd9996
|
@ -12,6 +12,7 @@ import (
|
|||
const performerTable = "performers"
|
||||
const performerIDColumn = "performer_id"
|
||||
const performersTagsTable = "performers_tags"
|
||||
const performersImageTable = "performers_image" // performer cover image
|
||||
|
||||
var countPerformersForTagQuery = `
|
||||
SELECT tag_id AS id FROM performers_tags
|
||||
|
@ -339,8 +340,8 @@ func performerIsMissingCriterionHandler(qb *performerQueryBuilder, isMissing *st
|
|||
f.addJoin(performersScenesTable, "scenes_join", "scenes_join.performer_id = performers.id")
|
||||
f.addWhere("scenes_join.scene_id IS NULL")
|
||||
case "image":
|
||||
f.addJoin(performersImagesTable, "", "performers_image.performer_id = performers.id")
|
||||
f.addWhere("performers_image.performer_id IS NULL")
|
||||
f.addJoin(performersImageTable, "image_join", "image_join.performer_id = performers.id")
|
||||
f.addWhere("image_join.performer_id IS NULL")
|
||||
default:
|
||||
f.addWhere("(performers." + *isMissing + " IS NULL OR TRIM(performers." + *isMissing + ") = '')")
|
||||
}
|
||||
|
@ -508,6 +509,9 @@ func (qb *performerQueryBuilder) getPerformerSort(findFilter *models.FindFilterT
|
|||
if sort == "tag_count" {
|
||||
return getCountSort(performerTable, performersTagsTable, performerIDColumn, direction)
|
||||
}
|
||||
if sort == "scenes_count" {
|
||||
return getCountSort(performerTable, performersScenesTable, performerIDColumn, direction)
|
||||
}
|
||||
|
||||
return getSort(sort, direction, "performers")
|
||||
}
|
||||
|
|
|
@ -868,6 +868,72 @@ func TestPerformerQueryIsMissingRating(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestPerformerQueryIsMissingImage(t *testing.T) {
|
||||
withTxn(func(r models.Repository) error {
|
||||
isMissing := "image"
|
||||
performerFilter := &models.PerformerFilterType{
|
||||
IsMissing: &isMissing,
|
||||
}
|
||||
|
||||
// ensure query does not error
|
||||
performers, _, err := r.Performer().Query(performerFilter, nil)
|
||||
if err != nil {
|
||||
t.Errorf("Error querying performers: %s", err.Error())
|
||||
}
|
||||
|
||||
assert.True(t, len(performers) > 0)
|
||||
|
||||
for _, performer := range performers {
|
||||
img, err := r.Performer().GetImage(performer.ID)
|
||||
if err != nil {
|
||||
t.Errorf("error getting performer image: %s", err.Error())
|
||||
}
|
||||
assert.Nil(t, img)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func TestPerformerQuerySortScenesCount(t *testing.T) {
|
||||
sort := "scenes_count"
|
||||
direction := models.SortDirectionEnumDesc
|
||||
findFilter := &models.FindFilterType{
|
||||
Sort: &sort,
|
||||
Direction: &direction,
|
||||
}
|
||||
|
||||
withTxn(func(r models.Repository) error {
|
||||
// just ensure it queries without error
|
||||
performers, _, err := r.Performer().Query(nil, findFilter)
|
||||
if err != nil {
|
||||
t.Errorf("Error querying performers: %s", err.Error())
|
||||
}
|
||||
|
||||
assert.True(t, len(performers) > 0)
|
||||
|
||||
// first performer should be performerIdxWithTwoScenes
|
||||
firstPerformer := performers[0]
|
||||
|
||||
assert.Equal(t, performerIDs[performerIdxWithTwoScenes], firstPerformer.ID)
|
||||
|
||||
// sort in ascending order
|
||||
direction = models.SortDirectionEnumAsc
|
||||
|
||||
performers, _, err = r.Performer().Query(nil, findFilter)
|
||||
if err != nil {
|
||||
t.Errorf("Error querying performers: %s", err.Error())
|
||||
}
|
||||
|
||||
assert.True(t, len(performers) > 0)
|
||||
lastPerformer := performers[len(performers)-1]
|
||||
|
||||
assert.Equal(t, performerIDs[performerIdxWithTwoScenes], lastPerformer.ID)
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// TODO Update
|
||||
// TODO Destroy
|
||||
// TODO Find
|
||||
|
|
Loading…
Reference in New Issue