Fix comments deleted display

This commit is contained in:
Chocobozzz 2020-05-19 10:48:50 +02:00 committed by Chocobozzz
parent 923ff87da2
commit 8adf0a767f
3 changed files with 48 additions and 14 deletions

View File

@ -178,5 +178,5 @@ async function removeVideoComment (req: express.Request, res: express.Response)
auditLogger.delete(getAuditIdFromRes(res), new CommentAuditView(videoCommentInstance.toFormattedJSON())) auditLogger.delete(getAuditIdFromRes(res), new CommentAuditView(videoCommentInstance.toFormattedJSON()))
return res.type('json').status(204) return res.type('json').status(204).end()
} }

View File

@ -24,13 +24,14 @@ import {
MCommentOwnerVideoReply MCommentOwnerVideoReply
} from '../../typings/models/video' } from '../../typings/models/video'
import { AccountModel } from '../account/account' import { AccountModel } from '../account/account'
import { ActorModel } from '../activitypub/actor' import { ActorModel, unusedActorAttributesForAPI } from '../activitypub/actor'
import { buildBlockedAccountSQL, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils' import { buildBlockedAccountSQL, buildLocalAccountIdsIn, getCommentSort, throwIfNotValid } from '../utils'
import { VideoModel } from './video' import { VideoModel } from './video'
import { VideoChannelModel } from './video-channel' import { VideoChannelModel } from './video-channel'
enum ScopeNames { enum ScopeNames {
WITH_ACCOUNT = 'WITH_ACCOUNT', WITH_ACCOUNT = 'WITH_ACCOUNT',
WITH_ACCOUNT_FOR_API = 'WITH_ACCOUNT_FOR_API',
WITH_IN_REPLY_TO = 'WITH_IN_REPLY_TO', WITH_IN_REPLY_TO = 'WITH_IN_REPLY_TO',
WITH_VIDEO = 'WITH_VIDEO', WITH_VIDEO = 'WITH_VIDEO',
ATTRIBUTES_FOR_API = 'ATTRIBUTES_FOR_API' ATTRIBUTES_FOR_API = 'ATTRIBUTES_FOR_API'
@ -82,6 +83,22 @@ enum ScopeNames {
} }
] ]
}, },
[ScopeNames.WITH_ACCOUNT_FOR_API]: {
include: [
{
model: AccountModel.unscoped(),
include: [
{
attributes: {
exclude: unusedActorAttributesForAPI
},
model: ActorModel, // Default scope includes avatar and server
required: true
}
]
}
]
},
[ScopeNames.WITH_IN_REPLY_TO]: { [ScopeNames.WITH_IN_REPLY_TO]: {
include: [ include: [
{ {
@ -275,18 +292,33 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
limit: count, limit: count,
order: getCommentSort(sort), order: getCommentSort(sort),
where: { where: {
videoId, [Op.and]: [
inReplyToCommentId: null, {
accountId: { videoId
[Op.notIn]: Sequelize.literal( },
'(' + buildBlockedAccountSQL(serverAccountId, userAccountId) + ')' {
) inReplyToCommentId: null
} },
{
[Op.or]: [
{
accountId: {
[Op.notIn]: Sequelize.literal(
'(' + buildBlockedAccountSQL(serverAccountId, userAccountId) + ')'
)
}
},
{
accountId: null
}
]
}
]
} }
} }
const scopes: (string | ScopeOptions)[] = [ const scopes: (string | ScopeOptions)[] = [
ScopeNames.WITH_ACCOUNT, ScopeNames.WITH_ACCOUNT_FOR_API,
{ {
method: [ ScopeNames.ATTRIBUTES_FOR_API, serverAccountId, userAccountId ] method: [ ScopeNames.ATTRIBUTES_FOR_API, serverAccountId, userAccountId ]
} }
@ -328,7 +360,7 @@ export class VideoCommentModel extends Model<VideoCommentModel> {
} }
const scopes: any[] = [ const scopes: any[] = [
ScopeNames.WITH_ACCOUNT, ScopeNames.WITH_ACCOUNT_FOR_API,
{ {
method: [ ScopeNames.ATTRIBUTES_FOR_API, serverAccountId, userAccountId ] method: [ ScopeNames.ATTRIBUTES_FOR_API, serverAccountId, userAccountId ]
} }

View File

@ -195,7 +195,7 @@ describe('Test blocklist', function () {
}) })
it('Should hide its comments', async function () { it('Should hide its comments', async function () {
const resThreads = await getVideoCommentThreads(servers[0].url, videoUUID1, 0, 5, '-createdAt', servers[0].accessToken) const resThreads = await getVideoCommentThreads(servers[0].url, videoUUID1, 0, 25, '-createdAt', servers[0].accessToken)
const threads: VideoComment[] = resThreads.body.data const threads: VideoComment[] = resThreads.body.data
expect(threads).to.have.lengthOf(1) expect(threads).to.have.lengthOf(1)
@ -467,9 +467,11 @@ describe('Test blocklist', function () {
it('Should hide its comments', async function () { it('Should hide its comments', async function () {
for (const token of [ userModeratorToken, servers[0].accessToken ]) { for (const token of [ userModeratorToken, servers[0].accessToken ]) {
const resThreads = await getVideoCommentThreads(servers[0].url, videoUUID1, 0, 5, '-createdAt', token) const resThreads = await getVideoCommentThreads(servers[0].url, videoUUID1, 0, 20, '-createdAt', token)
let threads: VideoComment[] = resThreads.body.data
threads = threads.filter(t => t.isDeleted === false)
const threads: VideoComment[] = resThreads.body.data
expect(threads).to.have.lengthOf(1) expect(threads).to.have.lengthOf(1)
expect(threads[0].totalReplies).to.equal(0) expect(threads[0].totalReplies).to.equal(0)