import 'mocha' ; import { expect } from 'chai' ; import { wait } from '@shared/core-utils' ; import { Video } from '@shared/models' ; import { cleanupTests , createMultipleServers , doubleFollow , killallServers , PeerTubeServer , setAccessTokensToServers } from '@shared/server-commands' ; import { MockBlocklist } from '../shared' ; async function check ( server , videoUUID , exists = true ) { const { data } = await server . videos . list ( ) ; const video = data . find ( v => v . uuid === videoUUID ) ; if ( exists ) expect ( video ) . to . not . be . undefined ; else expect ( video ) . to . be . undefined ; } describe ( 'Official plugin auto-block videos' , function ( ) { let servers ; let blocklistServer ; let server1Videos = [ ] ; let server2Videos = [ ] ; let port ; before ( async function ( ) { this . timeout ( 60000 ) ; servers = await createMultipleServers ( 2 ) ; await setAccessTokensToServers ( servers ) ; for ( const server of servers ) { await server . plugins . install ( { npmName : 'peertube-plugin-auto-block-videos' } ) ; } blocklistServer = new MockBlocklist ( ) ; port = await blocklistServer . initialize ( ) ; await servers [ 0 ] . videos . quickUpload ( { name : 'video server 1' } ) ; await servers [ 1 ] . videos . quickUpload ( { name : 'video server 2' } ) ; await servers [ 1 ] . videos . quickUpload ( { name : 'video 2 server 2' } ) ; await servers [ 1 ] . videos . quickUpload ( { name : 'video 3 server 2' } ) ; { const { data } = await servers [ 0 ] . videos . list ( ) ; server1Videos = data . map ( v => Object . assign ( v , { url : servers [ 0 ] . url + '/videos/watch/' + v . uuid } ) ) ; } { const { data } = await servers [ 1 ] . videos . list ( ) ; server2Videos = data . map ( v => Object . assign ( v , { url : servers [ 1 ] . url + '/videos/watch/' + v . uuid } ) ) ; } await doubleFollow ( servers [ 0 ] , servers [ 1 ] ) ; } ) ; it ( 'Should update plugin settings' , async function ( ) { await servers [ 0 ] . plugins . updateSettings ( { npmName : 'peertube-plugin-auto-block-videos' , settings : { 'blocklist-urls' : `http://localhost:${ port }/blocklist` , 'check-seconds-interval' : 1 } } ) ; } ) ; it ( 'Should auto block a video' , async function ( ) { this . timeout ( 10000 ) ; await check ( servers [ 0 ] , server2Videos [ 0 ] . uuid , true ) ; blocklistServer . replace ( { data : [ { value : server2Videos [ 0 ] . url } ] } ) ; await wait ( 2000 ) ; await check ( servers [ 0 ] , server2Videos [ 0 ] . uuid , false ) ; } ) ; it ( 'Should have video in blacklists' , async function ( ) { const body = await servers [ 0 ] . blacklist . list ( ) ; const videoBlacklists = body . data ; expect ( videoBlacklists ) . to . have . lengthOf ( 1 ) ; expect ( videoBlacklists [ 0 ] . reason ) . to . contains ( 'Automatically blocked from auto block plugin' ) ; expect ( videoBlacklists [ 0 ] . video . name ) . to . equal ( server2Videos [ 0 ] . name ) ; } ) ; it ( 'Should not block a local video' , async function ( ) { this . timeout ( 10000 ) ; await check ( servers [ 0 ] , server1Videos [ 0 ] . uuid , true ) ; blocklistServer . replace ( { data : [ { value : server1Videos [ 0 ] . url } ] } ) ; await wait ( 2000 ) ; await check ( servers [ 0 ] , server1Videos [ 0 ] . uuid , true ) ; } ) ; it ( 'Should remove a video block' , async function ( ) { this . timeout ( 10000 ) ; await check ( servers [ 0 ] , server2Videos [ 0 ] . uuid , false ) ; blocklistServer . replace ( { data : [ { value : server2Videos [ 0 ] . url , action : 'remove' } ] } ) ; await wait ( 2000 ) ; await check ( servers [ 0 ] , server2Videos [ 0 ] . uuid , true ) ; } ) ; it ( 'Should auto block a video, manually unblock it and do not reblock it automatically' , async function ( ) { this . timeout ( 20000 ) ; const video = server2Videos [ 1 ] ; await check ( servers [ 0 ] , video . uuid , true ) ; blocklistServer . replace ( { data : [ { value : video . url , updatedAt : new Date ( ) . toISOString ( ) } ] } ) ; await wait ( 2000 ) ; await check ( servers [ 0 ] , video . uuid , false ) ; await servers [ 0 ] . blacklist . remove ( { videoId : video . uuid } ) ; await check ( servers [ 0 ] , video . uuid , true ) ; await killallServers ( [ servers [ 0 ] ] ) ; await servers [ 0 ] . run ( ) ; await wait ( 2000 ) ; await check ( servers [ 0 ] , video . uuid , true ) ; } ) ; after ( async function ( ) { await blocklistServer . terminate ( ) ; await cleanupTests ( servers ) ; } ) ; } ) ;