From 16ea6abf91403aabed2c71dfac0454610470763b Mon Sep 17 00:00:00 2001
From: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
Date: Mon, 31 Aug 2020 18:17:17 +1000
Subject: [PATCH] Fix age filtering regression (#778)
* Show filter control in loading/error
* Add performer age unit tests
* Fix addWhere regression
---
pkg/models/querybuilder_performer_test.go | 41 +++++++++++++
pkg/models/querybuilder_scene_test.go | 1 +
pkg/models/querybuilder_sql.go | 2 +-
pkg/models/setup_test.go | 12 ++++
ui/v2.5/src/hooks/ListHook.tsx | 73 +++++++++++++----------
5 files changed, 95 insertions(+), 34 deletions(-)
diff --git a/pkg/models/querybuilder_performer_test.go b/pkg/models/querybuilder_performer_test.go
index 268780345..eb65b55bf 100644
--- a/pkg/models/querybuilder_performer_test.go
+++ b/pkg/models/querybuilder_performer_test.go
@@ -7,6 +7,7 @@ import (
"database/sql"
"strings"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
@@ -207,6 +208,46 @@ func TestPerformerDestroyPerformerImage(t *testing.T) {
assert.Nil(t, storedImage)
}
+func TestPerformerQueryAge(t *testing.T) {
+ const age = 19
+ ageCriterion := models.IntCriterionInput{
+ Value: age,
+ Modifier: models.CriterionModifierEquals,
+ }
+
+ verifyPerformerAge(t, ageCriterion)
+
+ ageCriterion.Modifier = models.CriterionModifierNotEquals
+ verifyPerformerAge(t, ageCriterion)
+
+ ageCriterion.Modifier = models.CriterionModifierGreaterThan
+ verifyPerformerAge(t, ageCriterion)
+
+ ageCriterion.Modifier = models.CriterionModifierLessThan
+ verifyPerformerAge(t, ageCriterion)
+}
+
+func verifyPerformerAge(t *testing.T, ageCriterion models.IntCriterionInput) {
+ qb := models.NewPerformerQueryBuilder()
+ performerFilter := models.PerformerFilterType{
+ Age: &ageCriterion,
+ }
+
+ performers, _ := qb.Query(&performerFilter, nil)
+
+ now := time.Now()
+ for _, performer := range performers {
+ bd := performer.Birthdate.String
+ d, _ := time.Parse("2006-01-02", bd)
+ age := now.Year() - d.Year()
+ if now.YearDay() < d.YearDay() {
+ age = age - 1
+ }
+
+ verifyInt(t, age, ageCriterion)
+ }
+}
+
// TODO Update
// TODO Destroy
// TODO Find
diff --git a/pkg/models/querybuilder_scene_test.go b/pkg/models/querybuilder_scene_test.go
index 578f981af..c86e7c3e6 100644
--- a/pkg/models/querybuilder_scene_test.go
+++ b/pkg/models/querybuilder_scene_test.go
@@ -229,6 +229,7 @@ func verifyScenesOCounter(t *testing.T, oCounterCriterion models.IntCriterionInp
}
func verifyInt(t *testing.T, value int, criterion models.IntCriterionInput) {
+ t.Helper()
assert := assert.New(t)
if criterion.Modifier == models.CriterionModifierEquals {
assert.Equal(criterion.Value, value)
diff --git a/pkg/models/querybuilder_sql.go b/pkg/models/querybuilder_sql.go
index 0498667fc..300884491 100644
--- a/pkg/models/querybuilder_sql.go
+++ b/pkg/models/querybuilder_sql.go
@@ -31,7 +31,7 @@ func (qb queryBuilder) executeFind() ([]int, int) {
func (qb *queryBuilder) addWhere(clauses ...string) {
for _, clause := range clauses {
if len(clause) > 0 {
- qb.whereClauses = append(qb.whereClauses, clauses...)
+ qb.whereClauses = append(qb.whereClauses, clause)
}
}
}
diff --git a/pkg/models/setup_test.go b/pkg/models/setup_test.go
index a06924b5c..36c53905d 100644
--- a/pkg/models/setup_test.go
+++ b/pkg/models/setup_test.go
@@ -11,6 +11,7 @@ import (
"os"
"strconv"
"testing"
+ "time"
"github.com/jmoiron/sqlx"
@@ -370,6 +371,13 @@ func getPerformerBoolValue(index int) bool {
return index == 1
}
+func getPerformerBirthdate(index int) string {
+ const minAge = 18
+ birthdate := time.Now()
+ birthdate = birthdate.AddDate(-minAge-index, -1, -1)
+ return birthdate.Format("2006-01-02")
+}
+
//createPerformers creates n performers with plain Name and o performers with camel cased NaMe included
func createPerformers(tx *sqlx.Tx, n int, o int) error {
pqb := models.NewPerformerQueryBuilder()
@@ -391,6 +399,10 @@ func createPerformers(tx *sqlx.Tx, n int, o int) error {
Name: sql.NullString{String: getPerformerStringValue(index, name), Valid: true},
Checksum: getPerformerStringValue(i, checksumField),
Favorite: sql.NullBool{Bool: getPerformerBoolValue(i), Valid: true},
+ Birthdate: models.SQLiteDate{
+ String: getPerformerBirthdate(i),
+ Valid: true,
+ },
}
created, err := pqb.Create(performer, tx)
diff --git a/ui/v2.5/src/hooks/ListHook.tsx b/ui/v2.5/src/hooks/ListHook.tsx
index 2e7a63ad7..b6bfaf037 100644
--- a/ui/v2.5/src/hooks/ListHook.tsx
+++ b/ui/v2.5/src/hooks/ListHook.tsx
@@ -333,38 +333,13 @@ const RenderList = <
/>
);
- let content;
- if (result.loading) {
- content =