Fix channel follow with manually approved follower
This commit is contained in:
parent
1593e0dd5c
commit
a6b26afc56
3 changed files with 668 additions and 619 deletions
|
@ -47,7 +47,7 @@ async function processFollow (byActor: MActorSignature, activityId: string, targ
|
|||
byActor,
|
||||
targetActor,
|
||||
activityId,
|
||||
state: CONFIG.FOLLOWERS.INSTANCE.MANUAL_APPROVAL
|
||||
state: await isFollowingInstance(targetActor) && CONFIG.FOLLOWERS.INSTANCE.MANUAL_APPROVAL
|
||||
? 'pending'
|
||||
: 'accepted',
|
||||
transaction: t
|
||||
|
@ -134,7 +134,7 @@ async function acceptIfNeeded (actorFollow: MActorFollow, targetActor: MActorFul
|
|||
// Or if the instance automatically accepts followers
|
||||
if (actorFollow.state === 'accepted') return
|
||||
if (!await isFollowingInstance(targetActor)) return
|
||||
if (CONFIG.FOLLOWERS.INSTANCE.MANUAL_APPROVAL === true) return
|
||||
if (CONFIG.FOLLOWERS.INSTANCE.MANUAL_APPROVAL === true && await isFollowingInstance(targetActor)) return
|
||||
|
||||
actorFollow.state = 'accepted'
|
||||
|
||||
|
|
|
@ -96,247 +96,273 @@ describe('Test follows moderation', function () {
|
|||
commands = servers.map(s => s.follows)
|
||||
})
|
||||
|
||||
it('Should have server 1 following server 2', async function () {
|
||||
this.timeout(30000)
|
||||
describe('Default behaviour', function () {
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
it('Should have server 1 following server 2', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should have correct follows', async function () {
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
})
|
||||
|
||||
it('Should remove follower on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
|
||||
await commands[1].removeFollower({ follower: servers[0] })
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should not not have follows anymore', async function () {
|
||||
await checkNoFollowers(servers)
|
||||
})
|
||||
})
|
||||
|
||||
it('Should have correct follows', async function () {
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
})
|
||||
describe('Disabled/Enabled followers', function () {
|
||||
|
||||
it('Should remove follower on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
it('Should disable followers on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
|
||||
await commands[1].removeFollower({ follower: servers[0] })
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should not not have follows anymore', async function () {
|
||||
await checkNoFollowers(servers)
|
||||
})
|
||||
|
||||
it('Should disable followers on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: false,
|
||||
manualApproval: false
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: false,
|
||||
manualApproval: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkNoFollowers(servers)
|
||||
})
|
||||
await checkNoFollowers(servers)
|
||||
})
|
||||
|
||||
it('Should re enable followers on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
it('Should re enable followers on server 2', async function () {
|
||||
this.timeout(10000)
|
||||
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: true,
|
||||
manualApproval: false
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: true,
|
||||
manualApproval: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
})
|
||||
})
|
||||
|
||||
it('Should manually approve followers', async function () {
|
||||
this.timeout(20000)
|
||||
describe('Manual approbation', function () {
|
||||
|
||||
await commands[0].unfollow({ target: servers[1] })
|
||||
await waitJobs(servers)
|
||||
it('Should manually approve followers', async function () {
|
||||
this.timeout(20000)
|
||||
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: true,
|
||||
manualApproval: true
|
||||
await commands[0].unfollow({ target: servers[1] })
|
||||
await waitJobs(servers)
|
||||
|
||||
const subConfig = {
|
||||
followers: {
|
||||
instance: {
|
||||
enabled: true,
|
||||
manualApproval: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
await servers[2].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
await servers[1].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
await servers[2].config.updateCustomSubConfig({ newConfig: subConfig })
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[1].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkServer1And2HasFollowers(servers, 'pending')
|
||||
})
|
||||
await checkServer1And2HasFollowers(servers, 'pending')
|
||||
})
|
||||
|
||||
it('Should accept a follower', async function () {
|
||||
this.timeout(10000)
|
||||
it('Should accept a follower', async function () {
|
||||
this.timeout(10000)
|
||||
|
||||
await commands[1].acceptFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
await commands[1].acceptFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
})
|
||||
await checkServer1And2HasFollowers(servers)
|
||||
})
|
||||
|
||||
it('Should reject another follower', async function () {
|
||||
this.timeout(20000)
|
||||
it('Should reject another follower', async function () {
|
||||
this.timeout(20000)
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[2].url ] })
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[2].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await commands[0].getFollowings()
|
||||
expect(body.total).to.equal(2)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await commands[1].getFollowers()
|
||||
expect(body.total).to.equal(1)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await commands[2].getFollowers()
|
||||
expect(body.total).to.equal(1)
|
||||
}
|
||||
|
||||
await commands[2].rejectFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
|
||||
{ // server 1
|
||||
{
|
||||
const { data } = await commands[0].getFollowings({ state: 'accepted' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
}
|
||||
|
||||
{
|
||||
const { data } = await commands[0].getFollowings({ state: 'rejected' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
expectStartWith(data[0].following.url, servers[2].url)
|
||||
}
|
||||
}
|
||||
|
||||
{ // server 3
|
||||
{
|
||||
const { data } = await commands[2].getFollowers({ state: 'accepted' })
|
||||
expect(data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
{
|
||||
const { data } = await commands[2].getFollowers({ state: 'rejected' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
expectStartWith(data[0].follower.url, servers[0].url)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
it('Should still auto accept channel followers', async function () {
|
||||
await commands[0].follow({ handles: [ 'root_channel@' + servers[1].host ] })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await commands[0].getFollowings()
|
||||
expect(body.total).to.equal(2)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await commands[1].getFollowers()
|
||||
expect(body.total).to.equal(1)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await commands[2].getFollowers()
|
||||
expect(body.total).to.equal(1)
|
||||
}
|
||||
|
||||
await commands[2].rejectFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
|
||||
{ // server 1
|
||||
{
|
||||
const { data } = await commands[0].getFollowings({ state: 'accepted' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
}
|
||||
|
||||
{
|
||||
const { data } = await commands[0].getFollowings({ state: 'rejected' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
expectStartWith(data[0].following.url, servers[2].url)
|
||||
}
|
||||
}
|
||||
|
||||
{ // server 3
|
||||
{
|
||||
const { data } = await commands[2].getFollowers({ state: 'accepted' })
|
||||
expect(data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
{
|
||||
const { data } = await commands[2].getFollowers({ state: 'rejected' })
|
||||
expect(data).to.have.lengthOf(1)
|
||||
expectStartWith(data[0].follower.url, servers[0].url)
|
||||
}
|
||||
}
|
||||
const follow = body.data[0]
|
||||
expect(follow.following.name).to.equal('root_channel')
|
||||
expect(follow.state).to.equal('accepted')
|
||||
})
|
||||
})
|
||||
|
||||
it('Should not change the follow on refollow with and without auto accept', async function () {
|
||||
const run = async () => {
|
||||
describe('Accept/reject state', function () {
|
||||
|
||||
it('Should not change the follow on refollow with and without auto accept', async function () {
|
||||
const run = async () => {
|
||||
await commands[0].follow({ hosts: [ servers[2].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
following: servers[2],
|
||||
followingState: 'rejected'
|
||||
})
|
||||
}
|
||||
|
||||
await servers[2].config.updateExistingSubConfig({ newConfig: { followers: { instance: { manualApproval: false } } } })
|
||||
await run()
|
||||
|
||||
await servers[2].config.updateExistingSubConfig({ newConfig: { followers: { instance: { manualApproval: true } } } })
|
||||
await run()
|
||||
})
|
||||
|
||||
it('Should not change the rejected status on unfollow', async function () {
|
||||
await commands[0].unfollow({ target: servers[2] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'deleted',
|
||||
following: servers[2],
|
||||
followingState: 'rejected'
|
||||
})
|
||||
})
|
||||
|
||||
it('Should delete the follower and add again the follower', async function () {
|
||||
await commands[2].removeFollower({ follower: servers[0] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[2].url ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
followerState: 'pending',
|
||||
following: servers[2],
|
||||
followingState: 'pending'
|
||||
})
|
||||
})
|
||||
|
||||
it('Should be able to reject a previously accepted follower', async function () {
|
||||
await commands[1].rejectFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
following: servers[1],
|
||||
followingState: 'rejected'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
await servers[2].config.updateExistingSubConfig({ newConfig: { followers: { instance: { manualApproval: false } } } })
|
||||
await run()
|
||||
it('Should be able to re accept a previously rejected follower', async function () {
|
||||
await commands[1].acceptFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
|
||||
await servers[2].config.updateExistingSubConfig({ newConfig: { followers: { instance: { manualApproval: true } } } })
|
||||
await run()
|
||||
})
|
||||
|
||||
it('Should not change the rejected status on unfollow', async function () {
|
||||
await commands[0].unfollow({ target: servers[2] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'deleted',
|
||||
following: servers[2],
|
||||
followingState: 'rejected'
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'accepted',
|
||||
following: servers[1],
|
||||
followingState: 'accepted'
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('Should delete the follower and add again the follower', async function () {
|
||||
await commands[2].removeFollower({ follower: servers[0] })
|
||||
await waitJobs(servers)
|
||||
describe('Muted servers', function () {
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[2].url ] })
|
||||
await waitJobs(servers)
|
||||
it('Should ignore follow requests of muted servers', async function () {
|
||||
await servers[1].blocklist.addToServerBlocklist({ server: servers[0].host })
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'pending',
|
||||
following: servers[2],
|
||||
followingState: 'pending'
|
||||
})
|
||||
})
|
||||
await commands[0].unfollow({ target: servers[1] })
|
||||
|
||||
it('Should be able to reject a previously accepted follower', async function () {
|
||||
await commands[1].rejectFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
following: servers[1],
|
||||
followingState: 'rejected'
|
||||
})
|
||||
})
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'deleted',
|
||||
following: servers[1],
|
||||
followingState: 'deleted'
|
||||
})
|
||||
|
||||
it('Should be able to re accept a previously rejected follower', async function () {
|
||||
await commands[1].acceptFollower({ follower: 'peertube@' + servers[0].host })
|
||||
await waitJobs(servers)
|
||||
await commands[0].follow({ hosts: [ servers[1].host ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'accepted',
|
||||
following: servers[1],
|
||||
followingState: 'accepted'
|
||||
})
|
||||
})
|
||||
|
||||
it('Should ignore follow requests of muted servers', async function () {
|
||||
await servers[1].blocklist.addToServerBlocklist({ server: servers[0].host })
|
||||
|
||||
await commands[0].unfollow({ target: servers[1] })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'deleted',
|
||||
following: servers[1],
|
||||
followingState: 'deleted'
|
||||
})
|
||||
|
||||
await commands[0].follow({ hosts: [ servers[1].host ] })
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
following: servers[1],
|
||||
followingState: 'deleted'
|
||||
await checkFollows({
|
||||
follower: servers[0],
|
||||
followerState: 'rejected',
|
||||
following: servers[1],
|
||||
followingState: 'deleted'
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
@ -53,164 +53,206 @@ describe('Test users subscriptions', function () {
|
|||
command = servers[0].subscriptions
|
||||
})
|
||||
|
||||
it('Should display videos of server 2 on server 1', async function () {
|
||||
const { total } = await servers[0].videos.list()
|
||||
describe('Destinction between server videos and user videos', function () {
|
||||
it('Should display videos of server 2 on server 1', async function () {
|
||||
const { total } = await servers[0].videos.list()
|
||||
|
||||
expect(total).to.equal(4)
|
||||
expect(total).to.equal(4)
|
||||
})
|
||||
|
||||
it('User of server 1 should follow user of server 3 and root of server 1', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'root_channel@localhost:' + servers[0].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
const attributes = { name: 'video server 3 added after follow' }
|
||||
const { uuid } = await servers[2].videos.upload({ token: users[2].accessToken, attributes })
|
||||
video3UUID = uuid
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should not display videos of server 3 on server 1', async function () {
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(4)
|
||||
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('User of server 1 should follow user of server 3 and root of server 1', async function () {
|
||||
this.timeout(60000)
|
||||
describe('Subscription endpoints', function () {
|
||||
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'root_channel@localhost:' + servers[0].port })
|
||||
it('Should list subscriptions', async function () {
|
||||
{
|
||||
const body = await command.list()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
await waitJobs(servers)
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(2)
|
||||
|
||||
const attributes = { name: 'video server 3 added after follow' }
|
||||
const { uuid } = await servers[2].videos.upload({ token: users[2].accessToken, attributes })
|
||||
video3UUID = uuid
|
||||
const subscriptions = body.data
|
||||
expect(subscriptions).to.be.an('array')
|
||||
expect(subscriptions).to.have.lengthOf(2)
|
||||
|
||||
await waitJobs(servers)
|
||||
expect(subscriptions[0].name).to.equal('user3_channel')
|
||||
expect(subscriptions[1].name).to.equal('root_channel')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should get subscription', async function () {
|
||||
{
|
||||
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||
|
||||
expect(videoChannel.name).to.equal('user3_channel')
|
||||
expect(videoChannel.host).to.equal('localhost:' + servers[2].port)
|
||||
expect(videoChannel.displayName).to.equal('Main user3 channel')
|
||||
expect(videoChannel.followingCount).to.equal(0)
|
||||
expect(videoChannel.followersCount).to.equal(1)
|
||||
}
|
||||
|
||||
{
|
||||
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||
|
||||
expect(videoChannel.name).to.equal('root_channel')
|
||||
expect(videoChannel.host).to.equal('localhost:' + servers[0].port)
|
||||
expect(videoChannel.displayName).to.equal('Main root channel')
|
||||
expect(videoChannel.followingCount).to.equal(0)
|
||||
expect(videoChannel.followersCount).to.equal(1)
|
||||
}
|
||||
})
|
||||
|
||||
it('Should return the existing subscriptions', async function () {
|
||||
const uris = [
|
||||
'user3_channel@localhost:' + servers[2].port,
|
||||
'root2_channel@localhost:' + servers[0].port,
|
||||
'root_channel@localhost:' + servers[0].port,
|
||||
'user3_channel@localhost:' + servers[0].port
|
||||
]
|
||||
|
||||
const body = await command.exist({ token: users[0].accessToken, uris })
|
||||
|
||||
expect(body['user3_channel@localhost:' + servers[2].port]).to.be.true
|
||||
expect(body['root2_channel@localhost:' + servers[0].port]).to.be.false
|
||||
expect(body['root_channel@localhost:' + servers[0].port]).to.be.true
|
||||
expect(body['user3_channel@localhost:' + servers[0].port]).to.be.false
|
||||
})
|
||||
|
||||
it('Should search among subscriptions', async function () {
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'user3_channel' })
|
||||
expect(body.total).to.equal(1)
|
||||
expect(body.data).to.have.lengthOf(1)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'toto' })
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('Should not display videos of server 3 on server 1', async function () {
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(4)
|
||||
describe('Subscription videos', function () {
|
||||
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow')
|
||||
}
|
||||
})
|
||||
it('Should list subscription videos', async function () {
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
it('Should list subscriptions', async function () {
|
||||
{
|
||||
const body = await command.list()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(3)
|
||||
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(2)
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(3)
|
||||
|
||||
const subscriptions = body.data
|
||||
expect(subscriptions).to.be.an('array')
|
||||
expect(subscriptions).to.have.lengthOf(2)
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
}
|
||||
})
|
||||
|
||||
expect(subscriptions[0].name).to.equal('user3_channel')
|
||||
expect(subscriptions[1].name).to.equal('root_channel')
|
||||
}
|
||||
})
|
||||
it('Should upload a video by root on server 1 and see it in the subscription videos', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
it('Should get subscription', async function () {
|
||||
{
|
||||
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||
const videoName = 'video server 1 added after follow'
|
||||
await servers[0].videos.upload({ attributes: { name: videoName } })
|
||||
|
||||
expect(videoChannel.name).to.equal('user3_channel')
|
||||
expect(videoChannel.host).to.equal('localhost:' + servers[2].port)
|
||||
expect(videoChannel.displayName).to.equal('Main user3 channel')
|
||||
expect(videoChannel.followingCount).to.equal(0)
|
||||
expect(videoChannel.followersCount).to.equal(1)
|
||||
}
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
expect(videoChannel.name).to.equal('root_channel')
|
||||
expect(videoChannel.host).to.equal('localhost:' + servers[0].port)
|
||||
expect(videoChannel.displayName).to.equal('Main root channel')
|
||||
expect(videoChannel.followingCount).to.equal(0)
|
||||
expect(videoChannel.followersCount).to.equal(1)
|
||||
}
|
||||
})
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(4)
|
||||
|
||||
it('Should return the existing subscriptions', async function () {
|
||||
const uris = [
|
||||
'user3_channel@localhost:' + servers[2].port,
|
||||
'root2_channel@localhost:' + servers[0].port,
|
||||
'root_channel@localhost:' + servers[0].port,
|
||||
'user3_channel@localhost:' + servers[0].port
|
||||
]
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(4)
|
||||
|
||||
const body = await command.exist({ token: users[0].accessToken, uris })
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
expect(videos[3].name).to.equal('video server 1 added after follow')
|
||||
}
|
||||
|
||||
expect(body['user3_channel@localhost:' + servers[2].port]).to.be.true
|
||||
expect(body['root2_channel@localhost:' + servers[0].port]).to.be.false
|
||||
expect(body['root_channel@localhost:' + servers[0].port]).to.be.true
|
||||
expect(body['user3_channel@localhost:' + servers[0].port]).to.be.false
|
||||
})
|
||||
{
|
||||
const { data, total } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
it('Should search among subscriptions', async function () {
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'user3_channel' })
|
||||
expect(body.total).to.equal(1)
|
||||
expect(body.data).to.have.lengthOf(1)
|
||||
}
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'toto' })
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
})
|
||||
it('Should have server 1 following server 3 and display server 3 videos', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
it('Should list subscription videos', async function () {
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
await servers[0].follows.follow({ hosts: [ servers[2].url ] })
|
||||
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(3)
|
||||
await waitJobs(servers)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(3)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should upload a video by root on server 1 and see it in the subscription videos', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
const videoName = 'video server 1 added after follow'
|
||||
await servers[0].videos.upload({ attributes: { name: videoName } })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(4)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(4)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
expect(videos[3].name).to.equal('video server 1 added after follow')
|
||||
}
|
||||
|
||||
{
|
||||
const { data, total } = await servers[0].videos.list()
|
||||
expect(total).to.equal(8)
|
||||
|
||||
const names = [ '1-3', '2-3', 'video server 3 added after follow' ]
|
||||
for (const name of names) {
|
||||
const video = data.find(v => v.name.includes(name))
|
||||
expect(video).to.not.be.undefined
|
||||
}
|
||||
})
|
||||
|
||||
it('Should remove follow server 1 -> server 3 and hide server 3 videos', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await servers[0].follows.unfollow({ target: servers[2] })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
for (const video of data) {
|
||||
|
@ -218,145 +260,85 @@ describe('Test users subscriptions', function () {
|
|||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
it('Should still list subscription videos', async function () {
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(4)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(4)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
expect(videos[3].name).to.equal('video server 1 added after follow')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('Should have server 1 follow server 3 and display server 3 videos', async function () {
|
||||
this.timeout(60000)
|
||||
describe('Existing subscription video update', function () {
|
||||
|
||||
await servers[0].follows.follow({ hosts: [ servers[2].url ] })
|
||||
it('Should update a video of server 3 and see the updated video on server 1', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await waitJobs(servers)
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'video server 3 added after follow updated' } })
|
||||
|
||||
const { data, total } = await servers[0].videos.list()
|
||||
expect(total).to.equal(8)
|
||||
await waitJobs(servers)
|
||||
|
||||
const names = [ '1-3', '2-3', 'video server 3 added after follow' ]
|
||||
for (const name of names) {
|
||||
const video = data.find(v => v.name.includes(name))
|
||||
expect(video).to.not.be.undefined
|
||||
}
|
||||
})
|
||||
|
||||
it('Should remove follow server 1 -> server 3 and hide server 3 videos', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await servers[0].follows.unfollow({ target: servers[2] })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should still list subscription videos', async function () {
|
||||
{
|
||||
const body = await command.listVideos()
|
||||
expect(body.total).to.equal(0)
|
||||
expect(body.data).to.be.an('array')
|
||||
expect(body.data).to.have.lengthOf(0)
|
||||
}
|
||||
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(4)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(4)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow')
|
||||
expect(videos[3].name).to.equal('video server 1 added after follow')
|
||||
}
|
||||
expect(body.data[2].name).to.equal('video server 3 added after follow updated')
|
||||
})
|
||||
})
|
||||
|
||||
it('Should update a video of server 3 and see the updated video on server 1', async function () {
|
||||
this.timeout(30000)
|
||||
describe('Subscription removal', function () {
|
||||
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'video server 3 added after follow updated' } })
|
||||
it('Should remove user of server 3 subscription', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await waitJobs(servers)
|
||||
await command.remove({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.data[2].name).to.equal('video server 3 added after follow updated')
|
||||
})
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should remove user of server 3 subscription', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await command.remove({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
|
||||
it('Should not display its videos anymore', async function () {
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(1)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(1)
|
||||
|
||||
expect(videos[0].name).to.equal('video server 1 added after follow')
|
||||
})
|
||||
|
||||
it('Should remove the root subscription and not display the videos anymore', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await command.remove({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(0)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(0)
|
||||
}
|
||||
})
|
||||
|
||||
it('Should correctly display public videos on server 1', async function () {
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow updated')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should follow user of server 3 again', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
it('Should not display its videos anymore', async function () {
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(3)
|
||||
expect(body.total).to.equal(1)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(3)
|
||||
expect(videos).to.have.lengthOf(1)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow updated')
|
||||
}
|
||||
expect(videos[0].name).to.equal('video server 1 added after follow')
|
||||
})
|
||||
|
||||
{
|
||||
it('Should remove the root subscription and not display the videos anymore', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await command.remove({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(0)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(0)
|
||||
}
|
||||
})
|
||||
|
||||
it('Should correctly display public videos on server 1', async function () {
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
|
@ -365,213 +347,254 @@ describe('Test users subscriptions', function () {
|
|||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow updated')
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('Should follow user channels of server 3 by root of server 3', async function () {
|
||||
this.timeout(60000)
|
||||
describe('Re-follow', function () {
|
||||
|
||||
await servers[2].channels.create({ token: users[2].accessToken, attributes: { name: 'user3_channel2' } })
|
||||
it('Should follow user of server 3 again', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await servers[2].subscriptions.add({ token: servers[2].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
await servers[2].subscriptions.add({ token: servers[2].accessToken, targetUri: 'user3_channel2@localhost:' + servers[2].port })
|
||||
await command.add({ token: users[0].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||
expect(body.total).to.equal(3)
|
||||
|
||||
const videos = body.data
|
||||
expect(videos).to.be.an('array')
|
||||
expect(videos).to.have.lengthOf(3)
|
||||
|
||||
expect(videos[0].name).to.equal('video 1-3')
|
||||
expect(videos[1].name).to.equal('video 2-3')
|
||||
expect(videos[2].name).to.equal('video server 3 added after follow updated')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[0].videos.list()
|
||||
expect(total).to.equal(5)
|
||||
|
||||
for (const video of data) {
|
||||
expect(video.name).to.not.contain('1-3')
|
||||
expect(video.name).to.not.contain('2-3')
|
||||
expect(video.name).to.not.contain('video server 3 added after follow updated')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
it('Should follow user channels of server 3 by root of server 3', async function () {
|
||||
this.timeout(60000)
|
||||
|
||||
await servers[2].channels.create({ token: users[2].accessToken, attributes: { name: 'user3_channel2' } })
|
||||
|
||||
await servers[2].subscriptions.add({ token: servers[2].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||
await servers[2].subscriptions.add({ token: servers[2].accessToken, targetUri: 'user3_channel2@localhost:' + servers[2].port })
|
||||
|
||||
await waitJobs(servers)
|
||||
})
|
||||
})
|
||||
|
||||
it('Should list user 3 followers', async function () {
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 0,
|
||||
count: 5,
|
||||
sort: 'createdAt'
|
||||
})
|
||||
describe('Followers listing', function () {
|
||||
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(3)
|
||||
it('Should list user 3 followers', async function () {
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 0,
|
||||
count: 5,
|
||||
sort: 'createdAt'
|
||||
})
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(3)
|
||||
|
||||
expect(data[1].following.host).to.equal(servers[2].host)
|
||||
expect(data[1].following.name).to.equal('user3_channel')
|
||||
expect(data[1].follower.host).to.equal(servers[2].host)
|
||||
expect(data[1].follower.name).to.equal('root')
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
|
||||
expect(data[2].following.host).to.equal(servers[2].host)
|
||||
expect(data[2].following.name).to.equal('user3_channel2')
|
||||
expect(data[2].follower.host).to.equal(servers[2].host)
|
||||
expect(data[2].follower.name).to.equal('root')
|
||||
}
|
||||
expect(data[1].following.host).to.equal(servers[2].host)
|
||||
expect(data[1].following.name).to.equal('user3_channel')
|
||||
expect(data[1].follower.host).to.equal(servers[2].host)
|
||||
expect(data[1].follower.name).to.equal('root')
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 0,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
expect(data[2].following.host).to.equal(servers[2].host)
|
||||
expect(data[2].following.name).to.equal('user3_channel2')
|
||||
expect(data[2].follower.host).to.equal(servers[2].host)
|
||||
expect(data[2].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 0,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel2')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 1,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel2')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
start: 1,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
expect(total).to.equal(3)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
search: 'user1',
|
||||
sort: '-createdAt'
|
||||
})
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
expect(total).to.equal(1)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
{
|
||||
const { total, data } = await servers[2].accounts.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
accountName: 'user3',
|
||||
search: 'user1',
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
expect(total).to.equal(1)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should list user3_channel followers', async function () {
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 0,
|
||||
count: 5,
|
||||
sort: 'createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(2)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
|
||||
expect(data[1].following.host).to.equal(servers[2].host)
|
||||
expect(data[1].following.name).to.equal('user3_channel')
|
||||
expect(data[1].follower.host).to.equal(servers[2].host)
|
||||
expect(data[1].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 0,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 1,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
search: 'user1',
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(1)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
it('Should list user3_channel followers', async function () {
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 0,
|
||||
count: 5,
|
||||
sort: 'createdAt'
|
||||
})
|
||||
describe('Subscription videos privacy', function () {
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(2)
|
||||
it('Should update video as internal and not see from remote server', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'internal', privacy: VideoPrivacy.INTERNAL } })
|
||||
await waitJobs(servers)
|
||||
|
||||
expect(data[1].following.host).to.equal(servers[2].host)
|
||||
expect(data[1].following.name).to.equal('user3_channel')
|
||||
expect(data[1].follower.host).to.equal(servers[2].host)
|
||||
expect(data[1].follower.name).to.equal('root')
|
||||
}
|
||||
{
|
||||
const { data } = await command.listVideos({ token: users[0].accessToken })
|
||||
expect(data.find(v => v.name === 'internal')).to.not.exist
|
||||
}
|
||||
})
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 0,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[2].host)
|
||||
expect(data[0].follower.name).to.equal('root')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
start: 1,
|
||||
count: 1,
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(2)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
|
||||
{
|
||||
const { total, data } = await servers[2].channels.listFollowers({
|
||||
token: users[2].accessToken,
|
||||
channelName: 'user3_channel',
|
||||
search: 'user1',
|
||||
sort: '-createdAt'
|
||||
})
|
||||
|
||||
expect(total).to.equal(1)
|
||||
expect(data).to.have.lengthOf(1)
|
||||
|
||||
expect(data[0].following.host).to.equal(servers[2].host)
|
||||
expect(data[0].following.name).to.equal('user3_channel')
|
||||
expect(data[0].follower.host).to.equal(servers[0].host)
|
||||
expect(data[0].follower.name).to.equal('user1')
|
||||
}
|
||||
})
|
||||
|
||||
it('Should update video as internal and not see from remote server', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'internal', privacy: VideoPrivacy.INTERNAL } })
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const { data } = await command.listVideos({ token: users[0].accessToken })
|
||||
expect(data.find(v => v.name === 'internal')).to.not.exist
|
||||
}
|
||||
})
|
||||
|
||||
it('Should see internal from local user', async function () {
|
||||
const { data } = await servers[2].subscriptions.listVideos({ token: servers[2].accessToken })
|
||||
expect(data.find(v => v.name === 'internal')).to.exist
|
||||
})
|
||||
|
||||
it('Should update video as private and not see from anyone server', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'private', privacy: VideoPrivacy.PRIVATE } })
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const { data } = await command.listVideos({ token: users[0].accessToken })
|
||||
expect(data.find(v => v.name === 'private')).to.not.exist
|
||||
}
|
||||
|
||||
{
|
||||
it('Should see internal from local user', async function () {
|
||||
const { data } = await servers[2].subscriptions.listVideos({ token: servers[2].accessToken })
|
||||
expect(data.find(v => v.name === 'private')).to.not.exist
|
||||
}
|
||||
expect(data.find(v => v.name === 'internal')).to.exist
|
||||
})
|
||||
|
||||
it('Should update video as private and not see from anyone server', async function () {
|
||||
this.timeout(30000)
|
||||
|
||||
await servers[2].videos.update({ id: video3UUID, attributes: { name: 'private', privacy: VideoPrivacy.PRIVATE } })
|
||||
await waitJobs(servers)
|
||||
|
||||
{
|
||||
const { data } = await command.listVideos({ token: users[0].accessToken })
|
||||
expect(data.find(v => v.name === 'private')).to.not.exist
|
||||
}
|
||||
|
||||
{
|
||||
const { data } = await servers[2].subscriptions.listVideos({ token: servers[2].accessToken })
|
||||
expect(data.find(v => v.name === 'private')).to.not.exist
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
after(async function () {
|
||||
|
|
Loading…
Reference in a new issue