import 'mocha' ; import * as chai from 'chai' ; import { BulkCommand , cleanupTests , createMultipleServers , doubleFollow , PeerTubeServer , setAccessTokensToServers , waitJobs } from '@shared/server-commands' ; const expect = chai . expect ; describe ( 'Test bulk actions' , function ( ) { const commentsUser3 = [ ] ; let servers = [ ] ; let user1Token ; let user2Token ; let user3Token ; let bulkCommand ; before ( async function ( ) { this . timeout ( 30000 ) ; servers = await createMultipleServers ( 2 ) ; await setAccessTokensToServers ( servers ) ; { const user = { username : 'user1' , password : 'password' } ; await servers [ 0 ] . users . create ( { username : user . username , password : user . password } ) ; user1Token = await servers [ 0 ] . login . getAccessToken ( user ) ; } { const user = { username : 'user2' , password : 'password' } ; await servers [ 0 ] . users . create ( { username : user . username , password : user . password } ) ; user2Token = await servers [ 0 ] . login . getAccessToken ( user ) ; } { const user = { username : 'user3' , password : 'password' } ; await servers [ 1 ] . users . create ( { username : user . username , password : user . password } ) ; user3Token = await servers [ 1 ] . login . getAccessToken ( user ) ; } await doubleFollow ( servers [ 0 ] , servers [ 1 ] ) ; bulkCommand = new BulkCommand ( servers [ 0 ] ) ; } ) ; describe ( 'Bulk remove comments' , function ( ) { async function checkInstanceCommentsRemoved ( ) { { const { data } = await servers [ 0 ] . videos . list ( ) ; for ( const video of data ) { const { data } = await servers [ 0 ] . comments . listThreads ( { videoId : video . id } ) ; const comment = data . find ( c => c . text === 'comment by user 3' ) ; expect ( comment ) . to . not . exist ; } } { const { data } = await servers [ 1 ] . videos . list ( ) ; for ( const video of data ) { const { data } = await servers [ 1 ] . comments . listThreads ( { videoId : video . id } ) ; const comment = data . find ( c => c . text === 'comment by user 3' ) ; if ( video . account . host === 'localhost:' + servers [ 0 ] . port ) { expect ( comment ) . to . not . exist ; } else { expect ( comment ) . to . exist ; } } } } before ( async function ( ) { this . timeout ( 120000 ) ; await servers [ 0 ] . videos . upload ( { attributes : { name : 'video 1 server 1' } } ) ; await servers [ 0 ] . videos . upload ( { attributes : { name : 'video 2 server 1' } } ) ; await servers [ 0 ] . videos . upload ( { token : user1Token , attributes : { name : 'video 3 server 1' } } ) ; await servers [ 1 ] . videos . upload ( { attributes : { name : 'video 1 server 2' } } ) ; await waitJobs ( servers ) ; { const { data } = await servers [ 0 ] . videos . list ( ) ; for ( const video of data ) { await servers [ 0 ] . comments . createThread ( { videoId : video . id , text : 'comment by root server 1' } ) ; await servers [ 0 ] . comments . createThread ( { token : user1Token , videoId : video . id , text : 'comment by user 1' } ) ; await servers [ 0 ] . comments . createThread ( { token : user2Token , videoId : video . id , text : 'comment by user 2' } ) ; } } { const { data } = await servers [ 1 ] . videos . list ( ) ; for ( const video of data ) { await servers [ 1 ] . comments . createThread ( { videoId : video . id , text : 'comment by root server 2' } ) ; const comment = await servers [ 1 ] . comments . createThread ( { token : user3Token , videoId : video . id , text : 'comment by user 3' } ) ; commentsUser3 . push ( { videoId : video . id , commentId : comment . id } ) ; } } await waitJobs ( servers ) ; } ) ; it ( 'Should delete comments of an account on my videos' , async function ( ) { this . timeout ( 60000 ) ; await bulkCommand . removeCommentsOf ( { token : user1Token , attributes : { accountName : 'user2' , scope : 'my-videos' } } ) ; await waitJobs ( servers ) ; for ( const server of servers ) { const { data } = await server . videos . list ( ) ; for ( const video of data ) { const { data } = await server . comments . listThreads ( { videoId : video . id } ) ; const comment = data . find ( c => c . text === 'comment by user 2' ) ; if ( video . name === 'video 3 server 1' ) expect ( comment ) . to . not . exist ; else expect ( comment ) . to . exist ; } } } ) ; it ( 'Should delete comments of an account on the instance' , async function ( ) { this . timeout ( 60000 ) ; await bulkCommand . removeCommentsOf ( { attributes : { accountName : 'user3@localhost:' + servers [ 1 ] . port , scope : 'instance' } } ) ; await waitJobs ( servers ) ; await checkInstanceCommentsRemoved ( ) ; } ) ; it ( 'Should not re create the comment on video update' , async function ( ) { this . timeout ( 60000 ) ; for ( const obj of commentsUser3 ) { await servers [ 1 ] . comments . addReply ( { token : user3Token , videoId : obj . videoId , toCommentId : obj . commentId , text : 'comment by user 3 bis' } ) ; } await waitJobs ( servers ) ; await checkInstanceCommentsRemoved ( ) ; } ) ; } ) ; after ( async function ( ) { await cleanupTests ( servers ) ; } ) ; } ) ;