mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-17 06:28:22 +00:00
feat: add configurable timeout for automatically removing resolved reports (#7940)
Supersedes [this PR](https://codeberg.org/lenikadali/forgejo/pulls/1) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7940 Reviewed-by: Otto <otto@codeberg.org> Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: Leni Kadali <lenikadali@noreply.codeberg.org> Co-committed-by: Leni Kadali <lenikadali@noreply.codeberg.org>
This commit is contained in:
parent
b2c8a1cfd3
commit
29eaab5ff4
10 changed files with 247 additions and 4 deletions
97
services/moderation/reporting_test.go
Normal file
97
services/moderation/reporting_test.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package moderation
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"forgejo.org/models/db"
|
||||
report_model "forgejo.org/models/moderation"
|
||||
"forgejo.org/models/unittest"
|
||||
"forgejo.org/modules/timeutil"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestRemoveResolvedReportsWhenNoTimeSet(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
// reportAge needs to be an int64 to match what timeutil.Day expects so we cast the value
|
||||
reportAge := int64(20)
|
||||
resolvedReport := &report_model.AbuseReport{
|
||||
Status: report_model.ReportStatusTypeHandled,
|
||||
ReporterID: 1, ContentType: report_model.ReportedContentTypeRepository,
|
||||
ContentID: 2, Category: report_model.AbuseCategoryTypeOther,
|
||||
CreatedUnix: timeutil.TimeStampNow(),
|
||||
ResolvedUnix: timeutil.TimeStamp(time.Now().Unix() - timeutil.Day*reportAge),
|
||||
}
|
||||
_, err := db.GetEngine(db.DefaultContext).NoAutoTime().Insert(resolvedReport)
|
||||
require.NoError(t, err)
|
||||
|
||||
// No reports should be deleted when the default time to keep is 0
|
||||
err = RemoveResolvedReports(db.DefaultContext, time.Second*0)
|
||||
require.NoError(t, err)
|
||||
unittest.AssertExistsIf(t, true, resolvedReport)
|
||||
}
|
||||
|
||||
func TestRemoveResolvedReportsWhenMatchTimeSet(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
// keepReportsFor needs to an int64 to match what timeutil.Day expects so we cast the value
|
||||
keepReportsFor := int64(4)
|
||||
resolvedReport := &report_model.AbuseReport{
|
||||
Status: report_model.ReportStatusTypeHandled,
|
||||
ReporterID: 1, ContentType: report_model.ReportedContentTypeRepository,
|
||||
ContentID: 2, Category: report_model.AbuseCategoryTypeOther,
|
||||
CreatedUnix: timeutil.TimeStampNow(),
|
||||
ResolvedUnix: timeutil.TimeStamp(time.Now().Unix() - timeutil.Day*keepReportsFor),
|
||||
}
|
||||
|
||||
_, err := db.GetEngine(db.DefaultContext).NoAutoTime().Insert(resolvedReport)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Report should be deleted when older than the default time to keep
|
||||
err = RemoveResolvedReports(db.DefaultContext, time.Second*4)
|
||||
require.NoError(t, err)
|
||||
unittest.AssertExistsIf(t, false, resolvedReport)
|
||||
}
|
||||
|
||||
func TestRemoveResolvedReportsWhenTimeSetButReportNew(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
resolvedReport := &report_model.AbuseReport{
|
||||
Status: report_model.ReportStatusTypeHandled,
|
||||
ReporterID: 1, ContentType: report_model.ReportedContentTypeRepository,
|
||||
ContentID: 2, Category: report_model.AbuseCategoryTypeOther,
|
||||
CreatedUnix: timeutil.TimeStampNow(),
|
||||
ResolvedUnix: timeutil.TimeStampNow(),
|
||||
}
|
||||
_, err := db.GetEngine(db.DefaultContext).NoAutoTime().Insert(resolvedReport)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Report should not be deleted when newer than the default time to keep
|
||||
err = RemoveResolvedReports(db.DefaultContext, time.Second*4)
|
||||
require.NoError(t, err)
|
||||
unittest.AssertExistsIf(t, true, resolvedReport)
|
||||
}
|
||||
|
||||
func TestDoesNotRemoveOpenReports(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
// keepReportsFor needs to an int64 to match what timeutil.Day expects so we cast the value
|
||||
keepReportsFor := int64(4)
|
||||
resolvedReport := &report_model.AbuseReport{
|
||||
Status: report_model.ReportStatusTypeOpen,
|
||||
ReporterID: 1, ContentType: report_model.ReportedContentTypeRepository,
|
||||
ContentID: 2, Category: report_model.AbuseCategoryTypeOther,
|
||||
CreatedUnix: timeutil.TimeStampNow(),
|
||||
ResolvedUnix: timeutil.TimeStamp(time.Now().Unix() - timeutil.Day*keepReportsFor),
|
||||
}
|
||||
|
||||
_, err := db.GetEngine(db.DefaultContext).NoAutoTime().Insert(resolvedReport)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Report should not be deleted when open
|
||||
// and older than the default time to keep
|
||||
err = RemoveResolvedReports(db.DefaultContext, time.Second*4)
|
||||
require.NoError(t, err)
|
||||
unittest.AssertExistsIf(t, true, resolvedReport)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue