Fix age filtering regression (#778)

* Show filter control in loading/error
* Add performer age unit tests
* Fix addWhere regression
This commit is contained in:
WithoutPants
2020-08-31 18:17:17 +10:00
committed by GitHub
parent b437425a41
commit 16ea6abf91
5 changed files with 95 additions and 34 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
}
}
}

View File

@@ -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)

View File

@@ -333,13 +333,26 @@ const RenderList = <
/>
);
let content;
if (result.loading) {
content = <LoadingIndicator />;
} else if (result.error) {
content = <h1>{result.error.message}</h1>;
} else {
content = (
function maybeRenderContent() {
if (result.loading || result.error) {
return;
}
return (
<>
{renderPagination()}
{renderContent(result, filter, selectedIds, zoomIndex)}
<PaginationIndex
itemsPerPage={filter.itemsPerPage}
currentPage={filter.currentPage}
totalItems={totalCount}
/>
{renderPagination()}
</>
);
}
const content = (
<div>
<ListFilter
onFilterUpdate={updateQueryParams}
@@ -365,17 +378,11 @@ const RenderList = <
getSelectedData(getData(result), selectedIds),
(deleted) => onDeleteDialogClosed(deleted)
)}
{renderPagination()}
{renderContent(result, filter, selectedIds, zoomIndex)}
<PaginationIndex
itemsPerPage={filter.itemsPerPage}
currentPage={filter.currentPage}
totalItems={totalCount}
/>
{renderPagination()}
{result.loading ? <LoadingIndicator /> : undefined}
{result.error ? <h1>{result.error.message}</h1> : undefined}
{maybeRenderContent()}
</div>
);
}
return { contentTemplate: content, onSelectChange };
};