diff --git a/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.ts b/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.ts
index f04efa9fc..e87163c4f 100644
--- a/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.ts
+++ b/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.ts
@@ -217,6 +217,7 @@ export class VideoAbuseListComponent extends RestTable implements OnInit, AfterV
}
setTableFilter (filter: string) {
+ // FIXME: cannot use ViewChild, so create a component for the filter input
const filterInput = document.getElementById('table-filter') as HTMLInputElement
if (filterInput) filterInput.value = filter
}
diff --git a/client/src/app/+admin/users/user-edit/user-edit.component.html b/client/src/app/+admin/users/user-edit/user-edit.component.html
index 5303d6096..df9f24749 100644
--- a/client/src/app/+admin/users/user-edit/user-edit.component.html
+++ b/client/src/app/+admin/users/user-edit/user-edit.component.html
@@ -37,13 +37,13 @@
-
+
{{ user.videoAbusesAcceptedCount }} / {{ user.videoAbusesCreatedCount }}
Authored reports accepted
diff --git a/client/src/sass/include/_mixins.scss b/client/src/sass/include/_mixins.scss
index adeee758e..a6d1abd6d 100644
--- a/client/src/sass/include/_mixins.scss
+++ b/client/src/sass/include/_mixins.scss
@@ -692,6 +692,8 @@
margin-bottom: 10px;
& > a {
+ @include disable-default-a-behaviour;
+
text-decoration: none;
color: inherit;
display: block;
diff --git a/server/tests/api/videos/video-abuse.ts b/server/tests/api/videos/video-abuse.ts
index 8a8290e14..26bc3783b 100644
--- a/server/tests/api/videos/video-abuse.ts
+++ b/server/tests/api/videos/video-abuse.ts
@@ -14,7 +14,9 @@ import {
setAccessTokensToServers,
updateVideoAbuse,
uploadVideo,
- removeVideo
+ removeVideo,
+ createUser,
+ userLogin
} from '../../../../shared/extra-utils/index'
import { doubleFollow } from '../../../../shared/extra-utils/server/follows'
import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
@@ -236,16 +238,56 @@ describe('Test video abuses', function () {
await waitJobs(servers)
- {
- const res = await getVideoAbusesList(servers[1].url, servers[1].accessToken)
- expect(res.body.total).to.equal(2)
- expect(res.body.data.length).to.equal(2)
- expect(res.body.data[0].id).to.equal(abuseServer2.id)
+ const res = await getVideoAbusesList(servers[1].url, servers[1].accessToken)
+ expect(res.body.total).to.equal(2, "wrong number of videos returned")
+ expect(res.body.data.length).to.equal(2, "wrong number of videos returned")
+ expect(res.body.data[0].id).to.equal(abuseServer2.id, "wrong origin server id for first video")
- const abuse: VideoAbuse = res.body.data[1]
- expect(abuse.video.deleted).to.be.true
- expect(abuse.video.id).to.equal(abuseServer2.video.id)
- expect(abuse.video.channel).to.exist
+ const abuse: VideoAbuse = res.body.data[0]
+ expect(abuse.video.id).to.equal(abuseServer2.video.id, "wrong video id")
+ expect(abuse.video.channel).to.exist
+ expect(abuse.video.deleted).to.be.true
+ })
+
+ it('Should include counts of reports from reporter and reportee', async function () {
+ this.timeout(10000)
+
+ // register a second user to have two reporters/reportees
+ const user = { username: 'user2', password: 'password' }
+ await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, ...user })
+ const userAccessToken = await userLogin(servers[0], user)
+
+ // upload a third video via this user
+ const video3Attributes = {
+ name: 'my second super name for server 1',
+ description: 'my second super description for server 1'
+ }
+ await uploadVideo(servers[0].url, userAccessToken, video3Attributes)
+
+ const res1 = await getVideosList(servers[0].url)
+ const videos = res1.body.data
+ const video3 = videos.find(video => video.name === 'my second super name for server 1')
+
+ // resume with the test
+ const reason3 = 'my super bad reason 3'
+ await reportVideoAbuse(servers[0].url, servers[0].accessToken, video3.id, reason3)
+ const reason4 = 'my super bad reason 4'
+ await reportVideoAbuse(servers[0].url, userAccessToken, servers[0].video.id, reason4)
+
+ const res2 = await getVideoAbusesList(servers[0].url, servers[0].accessToken)
+
+ {
+ for (const abuse of res2.body.data as VideoAbuse[]) {
+ if (abuse.video.id === video3.id) {
+ expect(abuse.count).to.equal(1, "wrong reports count for video 3")
+ expect(abuse.nth).to.equal(1, "wrong report position in report list for video 3")
+ expect(abuse.countReportsForReportee).to.equal(1, "wrong reports count for reporter on video 3 abuse")
+ expect(abuse.countReportsForReporter).to.equal(3, "wrong reports count for reportee on video 3 abuse")
+ }
+ if (abuse.video.id === servers[0].video.id) {
+ expect(abuse.countReportsForReportee).to.equal(3, "wrong reports count for reporter on video 1 abuse")
+ }
+ }
}
})
@@ -265,7 +307,7 @@ describe('Test video abuses', function () {
{
const res = await getVideoAbusesList(servers[0].url, servers[0].accessToken)
- expect(res.body.total).to.equal(3)
+ expect(res.body.total).to.equal(5)
}
})
diff --git a/server/typings/models/video/video-abuse.ts b/server/typings/models/video/video-abuse.ts
index 54acccdf5..d60f05e4c 100644
--- a/server/typings/models/video/video-abuse.ts
+++ b/server/typings/models/video/video-abuse.ts
@@ -1,6 +1,6 @@
import { VideoAbuseModel } from '../../../models/video/video-abuse'
import { PickWith } from '../../utils'
-import { MVideoAccountLightBlacklistAllFiles } from './video'
+import { MVideoAccountLightBlacklistAllFiles, MVideo } from './video'
import { MAccountDefault, MAccountFormattable } from '../account'
type Use
= PickWith
@@ -16,7 +16,7 @@ export type MVideoAbuseId = Pick
export type MVideoAbuseVideo =
MVideoAbuse &
Pick &
- Use<'Video', MVideoAccountLightBlacklistAllFiles>
+ Use<'Video', MVideo>
export type MVideoAbuseAccountVideo =
MVideoAbuse &