mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 04:14:39 +03:00
Stash rating system (#2830)
* add rating100 fields to represent rating range 1-100 * deprecate existing (1-5) rating fields * add half- and quarter-star options for rating system * add decimal rating system option Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
@@ -440,7 +440,7 @@ func TestPerformerQueryEthnicityAndRating(t *testing.T) {
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
},
|
||||
And: &models.PerformerFilterType{
|
||||
Rating: &models.IntCriterionInput{
|
||||
Rating100: &models.IntCriterionInput{
|
||||
Value: performerRating,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
},
|
||||
@@ -450,7 +450,10 @@ func TestPerformerQueryEthnicityAndRating(t *testing.T) {
|
||||
withTxn(func(ctx context.Context) error {
|
||||
performers := queryPerformers(ctx, t, &performerFilter, nil)
|
||||
|
||||
assert.Len(t, performers, 1)
|
||||
if !assert.Len(t, performers, 1) {
|
||||
return nil
|
||||
}
|
||||
|
||||
assert.Equal(t, performerEth, performers[0].Ethnicity)
|
||||
if assert.NotNil(t, performers[0].Rating) {
|
||||
assert.Equal(t, performerRating, *performers[0].Rating)
|
||||
@@ -478,7 +481,7 @@ func TestPerformerQueryEthnicityNotRating(t *testing.T) {
|
||||
performerFilter := models.PerformerFilterType{
|
||||
Ethnicity: ðCriterion,
|
||||
Not: &models.PerformerFilterType{
|
||||
Rating: &ratingCriterion,
|
||||
Rating100: &ratingCriterion,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1173,32 +1176,32 @@ func TestPerformerStashIDs(t *testing.T) {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
}
|
||||
func TestPerformerQueryRating(t *testing.T) {
|
||||
func TestPerformerQueryLegacyRating(t *testing.T) {
|
||||
const rating = 3
|
||||
ratingCriterion := models.IntCriterionInput{
|
||||
Value: rating,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
}
|
||||
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierNotEquals
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierGreaterThan
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierLessThan
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierIsNull
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierNotNull
|
||||
verifyPerformersRating(t, ratingCriterion)
|
||||
verifyPerformersLegacyRating(t, ratingCriterion)
|
||||
}
|
||||
|
||||
func verifyPerformersRating(t *testing.T, ratingCriterion models.IntCriterionInput) {
|
||||
func verifyPerformersLegacyRating(t *testing.T, ratingCriterion models.IntCriterionInput) {
|
||||
withTxn(func(ctx context.Context) error {
|
||||
performerFilter := models.PerformerFilterType{
|
||||
Rating: &ratingCriterion,
|
||||
@@ -1206,6 +1209,50 @@ func verifyPerformersRating(t *testing.T, ratingCriterion models.IntCriterionInp
|
||||
|
||||
performers := queryPerformers(ctx, t, &performerFilter, nil)
|
||||
|
||||
// convert criterion value to the 100 value
|
||||
ratingCriterion.Value = models.Rating5To100(ratingCriterion.Value)
|
||||
|
||||
for _, performer := range performers {
|
||||
verifyIntPtr(t, performer.Rating, ratingCriterion)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func TestPerformerQueryRating100(t *testing.T) {
|
||||
const rating = 60
|
||||
ratingCriterion := models.IntCriterionInput{
|
||||
Value: rating,
|
||||
Modifier: models.CriterionModifierEquals,
|
||||
}
|
||||
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierNotEquals
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierGreaterThan
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierLessThan
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierIsNull
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
|
||||
ratingCriterion.Modifier = models.CriterionModifierNotNull
|
||||
verifyPerformersRating100(t, ratingCriterion)
|
||||
}
|
||||
|
||||
func verifyPerformersRating100(t *testing.T, ratingCriterion models.IntCriterionInput) {
|
||||
withTxn(func(ctx context.Context) error {
|
||||
performerFilter := models.PerformerFilterType{
|
||||
Rating100: &ratingCriterion,
|
||||
}
|
||||
|
||||
performers := queryPerformers(ctx, t, &performerFilter, nil)
|
||||
|
||||
for _, performer := range performers {
|
||||
verifyIntPtr(t, performer.Rating, ratingCriterion)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user