mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Join count filter criteria (#1254)
Co-authored-by: mrbrdo <mrbrdo@gmail.com> Co-authored-by: peolic <66393006+peolic@users.noreply.github.com>
This commit is contained in:
@@ -1214,6 +1214,88 @@ func TestSceneQueryPagination(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestSceneQueryTagCount(t *testing.T) {
|
||||
const tagCount = 1
|
||||
tagCountCriterion := models.IntCriterionInput{
|
||||
Value: tagCount,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
}
|
||||
|
||||
verifyScenesTagCount(t, tagCountCriterion)
|
||||
|
||||
tagCountCriterion.Modifier = models.CriterionModifierNotEquals
|
||||
verifyScenesTagCount(t, tagCountCriterion)
|
||||
|
||||
tagCountCriterion.Modifier = models.CriterionModifierGreaterThan
|
||||
verifyScenesTagCount(t, tagCountCriterion)
|
||||
|
||||
tagCountCriterion.Modifier = models.CriterionModifierLessThan
|
||||
verifyScenesTagCount(t, tagCountCriterion)
|
||||
}
|
||||
|
||||
func verifyScenesTagCount(t *testing.T, tagCountCriterion models.IntCriterionInput) {
|
||||
withTxn(func(r models.Repository) error {
|
||||
sqb := r.Scene()
|
||||
sceneFilter := models.SceneFilterType{
|
||||
TagCount: &tagCountCriterion,
|
||||
}
|
||||
|
||||
scenes := queryScene(t, sqb, &sceneFilter, nil)
|
||||
assert.Greater(t, len(scenes), 0)
|
||||
|
||||
for _, scene := range scenes {
|
||||
ids, err := sqb.GetTagIDs(scene.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
verifyInt(t, len(ids), tagCountCriterion)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func TestSceneQueryPerformerCount(t *testing.T) {
|
||||
const performerCount = 1
|
||||
performerCountCriterion := models.IntCriterionInput{
|
||||
Value: performerCount,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
}
|
||||
|
||||
verifyScenesPerformerCount(t, performerCountCriterion)
|
||||
|
||||
performerCountCriterion.Modifier = models.CriterionModifierNotEquals
|
||||
verifyScenesPerformerCount(t, performerCountCriterion)
|
||||
|
||||
performerCountCriterion.Modifier = models.CriterionModifierGreaterThan
|
||||
verifyScenesPerformerCount(t, performerCountCriterion)
|
||||
|
||||
performerCountCriterion.Modifier = models.CriterionModifierLessThan
|
||||
verifyScenesPerformerCount(t, performerCountCriterion)
|
||||
}
|
||||
|
||||
func verifyScenesPerformerCount(t *testing.T, performerCountCriterion models.IntCriterionInput) {
|
||||
withTxn(func(r models.Repository) error {
|
||||
sqb := r.Scene()
|
||||
sceneFilter := models.SceneFilterType{
|
||||
PerformerCount: &performerCountCriterion,
|
||||
}
|
||||
|
||||
scenes := queryScene(t, sqb, &sceneFilter, nil)
|
||||
assert.Greater(t, len(scenes), 0)
|
||||
|
||||
for _, scene := range scenes {
|
||||
ids, err := sqb.GetPerformerIDs(scene.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
verifyInt(t, len(ids), performerCountCriterion)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func TestSceneCountByTagID(t *testing.T) {
|
||||
withTxn(func(r models.Repository) error {
|
||||
sqb := r.Scene()
|
||||
|
||||
Reference in New Issue
Block a user