Introduce subscriptions command
This commit is contained in:
parent
5f8bd4cbb1
commit
2c27e70471
|
@ -3,7 +3,6 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import {
|
||||||
addUserSubscription,
|
|
||||||
addVideoCommentThread,
|
addVideoCommentThread,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
|
@ -11,7 +10,6 @@ import {
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getUserNotifications,
|
getUserNotifications,
|
||||||
markAsReadAllNotifications,
|
markAsReadAllNotifications,
|
||||||
removeUserSubscription,
|
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
|
@ -44,8 +42,8 @@ describe('Test blocklist', function () {
|
||||||
|
|
||||||
async function resetState () {
|
async function resetState () {
|
||||||
try {
|
try {
|
||||||
await removeUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host)
|
await servers[1].subscriptionsCommand.remove({ token: remoteUserToken, uri: 'user1_channel@' + servers[0].host })
|
||||||
await removeUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host)
|
await servers[1].subscriptionsCommand.remove({ token: remoteUserToken, uri: 'user2_channel@' + servers[0].host })
|
||||||
} catch {}
|
} catch {}
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
@ -66,8 +64,8 @@ describe('Test blocklist', function () {
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
await addUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host)
|
await servers[1].subscriptionsCommand.add({ token: remoteUserToken, targetUri: 'user1_channel@' + servers[0].host })
|
||||||
await addUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host)
|
await servers[1].subscriptionsCommand.add({ token: remoteUserToken, targetUri: 'user2_channel@' + servers[0].host })
|
||||||
}
|
}
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import { buildUUID } from '@server/helpers/uuid'
|
import { buildUUID } from '@server/helpers/uuid'
|
||||||
import {
|
import {
|
||||||
addUserSubscription,
|
|
||||||
addVideoCommentThread,
|
addVideoCommentThread,
|
||||||
addVideoToBlacklist,
|
addVideoToBlacklist,
|
||||||
checkAbuseStateChange,
|
checkAbuseStateChange,
|
||||||
|
@ -29,7 +28,6 @@ import {
|
||||||
MockSmtpServer,
|
MockSmtpServer,
|
||||||
prepareNotificationsTest,
|
prepareNotificationsTest,
|
||||||
registerUser,
|
registerUser,
|
||||||
removeUserSubscription,
|
|
||||||
removeVideoFromBlacklist,
|
removeVideoFromBlacklist,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
|
@ -488,8 +486,8 @@ describe('Test moderation notifications', function () {
|
||||||
autoBlacklistTestsCustomConfig.transcoding.enabled = true
|
autoBlacklistTestsCustomConfig.transcoding.enabled = true
|
||||||
await servers[0].configCommand.updateCustomConfig({ newCustomConfig: autoBlacklistTestsCustomConfig })
|
await servers[0].configCommand.updateCustomConfig({ newCustomConfig: autoBlacklistTestsCustomConfig })
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
await addUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[1].subscriptionsCommand.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -611,8 +609,8 @@ describe('Test moderation notifications', function () {
|
||||||
after(async () => {
|
after(async () => {
|
||||||
await servers[0].configCommand.updateCustomConfig({ newCustomConfig: currentCustomConfig })
|
await servers[0].configCommand.updateCustomConfig({ newCustomConfig: currentCustomConfig })
|
||||||
|
|
||||||
await removeUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.remove({ uri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
await removeUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[1].subscriptionsCommand.remove({ uri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -2,21 +2,24 @@
|
||||||
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import { addUserSubscription } from '@shared/extra-utils/users/user-subscriptions'
|
|
||||||
import { cleanupTests, getMyUserInformation, immutableAssign, uploadRandomVideo, waitJobs } from '../../../../shared/extra-utils'
|
|
||||||
import { ServerInfo } from '../../../../shared/extra-utils/index'
|
|
||||||
import { MockSmtpServer } from '../../../../shared/extra-utils/mock-servers/mock-email'
|
|
||||||
import {
|
import {
|
||||||
CheckerBaseParams,
|
CheckerBaseParams,
|
||||||
checkNewVideoFromSubscription,
|
checkNewVideoFromSubscription,
|
||||||
|
cleanupTests,
|
||||||
getAllNotificationsSettings,
|
getAllNotificationsSettings,
|
||||||
|
getMyUserInformation,
|
||||||
getUserNotifications,
|
getUserNotifications,
|
||||||
|
immutableAssign,
|
||||||
markAsReadAllNotifications,
|
markAsReadAllNotifications,
|
||||||
markAsReadNotifications,
|
markAsReadNotifications,
|
||||||
|
MockSmtpServer,
|
||||||
prepareNotificationsTest,
|
prepareNotificationsTest,
|
||||||
updateMyNotificationSettings
|
ServerInfo,
|
||||||
} from '../../../../shared/extra-utils/users/user-notifications'
|
updateMyNotificationSettings,
|
||||||
import { User, UserNotification, UserNotificationSettingValue } from '../../../../shared/models/users'
|
uploadRandomVideo,
|
||||||
|
waitJobs
|
||||||
|
} from '@shared/extra-utils'
|
||||||
|
import { User, UserNotification, UserNotificationSettingValue } from '@shared/models'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
|
||||||
|
@ -35,7 +38,7 @@ describe('Test notifications API', function () {
|
||||||
userNotifications = res.userNotifications
|
userNotifications = res.userNotifications
|
||||||
server = res.servers[0]
|
server = res.servers[0]
|
||||||
|
|
||||||
await addUserSubscription(server.url, userAccessToken, 'root_channel@localhost:' + server.port)
|
await server.subscriptionsCommand.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + server.port })
|
||||||
|
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
await uploadRandomVideo(server, false)
|
await uploadRandomVideo(server, false)
|
||||||
|
|
|
@ -3,30 +3,26 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import { buildUUID } from '@server/helpers/uuid'
|
import { buildUUID } from '@server/helpers/uuid'
|
||||||
import {
|
|
||||||
cleanupTests,
|
|
||||||
updateMyUser,
|
|
||||||
updateVideo,
|
|
||||||
updateVideoChannel,
|
|
||||||
uploadRandomVideoOnServers,
|
|
||||||
wait
|
|
||||||
} from '../../../../shared/extra-utils'
|
|
||||||
import { ServerInfo } from '../../../../shared/extra-utils/index'
|
|
||||||
import { MockSmtpServer } from '../../../../shared/extra-utils/mock-servers/mock-email'
|
|
||||||
import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
|
|
||||||
import {
|
import {
|
||||||
CheckerBaseParams,
|
CheckerBaseParams,
|
||||||
checkMyVideoImportIsFinished,
|
checkMyVideoImportIsFinished,
|
||||||
checkNewActorFollow,
|
checkNewActorFollow,
|
||||||
checkNewVideoFromSubscription,
|
checkNewVideoFromSubscription,
|
||||||
checkVideoIsPublished,
|
checkVideoIsPublished,
|
||||||
|
cleanupTests,
|
||||||
getLastNotification,
|
getLastNotification,
|
||||||
prepareNotificationsTest
|
MockSmtpServer,
|
||||||
} from '../../../../shared/extra-utils/users/user-notifications'
|
prepareNotificationsTest,
|
||||||
import { addUserSubscription, removeUserSubscription } from '../../../../shared/extra-utils/users/user-subscriptions'
|
ServerInfo,
|
||||||
import { getBadVideoUrl, getGoodVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports'
|
updateMyUser,
|
||||||
import { UserNotification, UserNotificationType } from '../../../../shared/models/users'
|
updateVideo,
|
||||||
import { VideoPrivacy } from '../../../../shared/models/videos'
|
updateVideoChannel,
|
||||||
|
uploadRandomVideoOnServers,
|
||||||
|
wait,
|
||||||
|
waitJobs
|
||||||
|
} from '@shared/extra-utils'
|
||||||
|
import { getBadVideoUrl, getGoodVideoUrl, importVideo } from '@shared/extra-utils/videos/video-imports'
|
||||||
|
import { UserNotification, UserNotificationType, VideoPrivacy } from '@shared/models'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
|
||||||
|
@ -79,7 +75,7 @@ describe('Test user notifications', function () {
|
||||||
it('Should send a new video notification if the user follows the local video publisher', async function () {
|
it('Should send a new video notification if the user follows the local video publisher', async function () {
|
||||||
this.timeout(15000)
|
this.timeout(15000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + servers[0].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
const { name, uuid } = await uploadRandomVideoOnServers(servers, 1)
|
const { name, uuid } = await uploadRandomVideoOnServers(servers, 1)
|
||||||
|
@ -89,7 +85,7 @@ describe('Test user notifications', function () {
|
||||||
it('Should send a new video notification from a remote account', async function () {
|
it('Should send a new video notification from a remote account', async function () {
|
||||||
this.timeout(150000) // Server 2 has transcoding enabled
|
this.timeout(150000) // Server 2 has transcoding enabled
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:' + servers[1].port)
|
await servers[0].subscriptionsCommand.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + servers[1].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
const { name, uuid } = await uploadRandomVideoOnServers(servers, 2)
|
const { name, uuid } = await uploadRandomVideoOnServers(servers, 2)
|
||||||
|
@ -418,23 +414,23 @@ describe('Test user notifications', function () {
|
||||||
it('Should notify when a local channel is following one of our channel', async function () {
|
it('Should notify when a local channel is following one of our channel', async function () {
|
||||||
this.timeout(50000)
|
this.timeout(50000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
await checkNewActorFollow(baseParams, 'channel', 'root', 'super root name', myChannelName, 'presence')
|
await checkNewActorFollow(baseParams, 'channel', 'root', 'super root name', myChannelName, 'presence')
|
||||||
|
|
||||||
await removeUserSubscription(servers[0].url, servers[0].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.remove({ uri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should notify when a remote channel is following one of our channel', async function () {
|
it('Should notify when a remote channel is following one of our channel', async function () {
|
||||||
this.timeout(50000)
|
this.timeout(50000)
|
||||||
|
|
||||||
await addUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[1].subscriptionsCommand.add({ targetUri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
await checkNewActorFollow(baseParams, 'channel', 'root', 'super root 2 name', myChannelName, 'presence')
|
await checkNewActorFollow(baseParams, 'channel', 'root', 'super root 2 name', myChannelName, 'presence')
|
||||||
|
|
||||||
await removeUserSubscription(servers[1].url, servers[1].accessToken, 'user_1_channel@localhost:' + servers[0].port)
|
await servers[1].subscriptionsCommand.remove({ uri: 'user_1_channel@localhost:' + servers[0].port })
|
||||||
})
|
})
|
||||||
|
|
||||||
// PeerTube does not support accout -> account follows
|
// PeerTube does not support accout -> account follows
|
||||||
|
|
|
@ -3,25 +3,19 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import {
|
||||||
addUserSubscription,
|
|
||||||
areSubscriptionsExist,
|
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
doubleFollow,
|
doubleFollow,
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getUserSubscription,
|
|
||||||
getVideosList,
|
getVideosList,
|
||||||
listUserSubscriptions,
|
|
||||||
listUserSubscriptionVideos,
|
|
||||||
removeUserSubscription,
|
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
|
SubscriptionsCommand,
|
||||||
updateVideo,
|
updateVideo,
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
userLogin,
|
userLogin,
|
||||||
waitJobs
|
waitJobs
|
||||||
} from '@shared/extra-utils'
|
} from '@shared/extra-utils'
|
||||||
import { Video, VideoChannel } from '@shared/models'
|
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
|
||||||
|
@ -30,6 +24,8 @@ describe('Test users subscriptions', function () {
|
||||||
const users: { accessToken: string }[] = []
|
const users: { accessToken: string }[] = []
|
||||||
let video3UUID: string
|
let video3UUID: string
|
||||||
|
|
||||||
|
let command: SubscriptionsCommand
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
this.timeout(120000)
|
this.timeout(120000)
|
||||||
|
|
||||||
|
@ -58,6 +54,8 @@ describe('Test users subscriptions', function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
command = servers[0].subscriptionsCommand
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should display videos of server 2 on server 1', async function () {
|
it('Should display videos of server 2 on server 1', async function () {
|
||||||
|
@ -69,8 +67,8 @@ describe('Test users subscriptions', function () {
|
||||||
it('User of server 1 should follow user of server 3 and root of server 1', async function () {
|
it('User of server 1 should follow user of server 3 and root of server 1', async function () {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, users[0].accessToken, 'user3_channel@localhost:' + servers[2].port)
|
await command.add({ token: users[0].accessToken, targetUri: 'user3_channel@localhost:' + servers[2].port })
|
||||||
await addUserSubscription(servers[0].url, users[0].accessToken, 'root_channel@localhost:' + servers[0].port)
|
await command.add({ token: users[0].accessToken, targetUri: 'root_channel@localhost:' + servers[0].port })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
@ -93,17 +91,17 @@ describe('Test users subscriptions', function () {
|
||||||
|
|
||||||
it('Should list subscriptions', async function () {
|
it('Should list subscriptions', async function () {
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptions({ url: servers[0].url, token: servers[0].accessToken })
|
const body = await command.list()
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(0)
|
expect(body.data).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptions({ url: servers[0].url, token: users[0].accessToken, sort: 'createdAt' })
|
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(2)
|
expect(body.total).to.equal(2)
|
||||||
|
|
||||||
const subscriptions: VideoChannel[] = res.body.data
|
const subscriptions = body.data
|
||||||
expect(subscriptions).to.be.an('array')
|
expect(subscriptions).to.be.an('array')
|
||||||
expect(subscriptions).to.have.lengthOf(2)
|
expect(subscriptions).to.have.lengthOf(2)
|
||||||
|
|
||||||
|
@ -114,8 +112,7 @@ describe('Test users subscriptions', function () {
|
||||||
|
|
||||||
it('Should get subscription', async function () {
|
it('Should get subscription', async function () {
|
||||||
{
|
{
|
||||||
const res = await getUserSubscription(servers[0].url, users[0].accessToken, 'user3_channel@localhost:' + servers[2].port)
|
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||||
const videoChannel: VideoChannel = res.body
|
|
||||||
|
|
||||||
expect(videoChannel.name).to.equal('user3_channel')
|
expect(videoChannel.name).to.equal('user3_channel')
|
||||||
expect(videoChannel.host).to.equal('localhost:' + servers[2].port)
|
expect(videoChannel.host).to.equal('localhost:' + servers[2].port)
|
||||||
|
@ -125,8 +122,7 @@ describe('Test users subscriptions', function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await getUserSubscription(servers[0].url, users[0].accessToken, 'root_channel@localhost:' + servers[0].port)
|
const videoChannel = await command.get({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||||
const videoChannel: VideoChannel = res.body
|
|
||||||
|
|
||||||
expect(videoChannel.name).to.equal('root_channel')
|
expect(videoChannel.name).to.equal('root_channel')
|
||||||
expect(videoChannel.host).to.equal('localhost:' + servers[0].port)
|
expect(videoChannel.host).to.equal('localhost:' + servers[0].port)
|
||||||
|
@ -144,8 +140,7 @@ describe('Test users subscriptions', function () {
|
||||||
'user3_channel@localhost:' + servers[0].port
|
'user3_channel@localhost:' + servers[0].port
|
||||||
]
|
]
|
||||||
|
|
||||||
const res = await areSubscriptionsExist(servers[0].url, users[0].accessToken, uris)
|
const body = await command.exist({ token: users[0].accessToken, uris })
|
||||||
const body = res.body
|
|
||||||
|
|
||||||
expect(body['user3_channel@localhost:' + servers[2].port]).to.be.true
|
expect(body['user3_channel@localhost:' + servers[2].port]).to.be.true
|
||||||
expect(body['root2_channel@localhost:' + servers[0].port]).to.be.false
|
expect(body['root2_channel@localhost:' + servers[0].port]).to.be.false
|
||||||
|
@ -155,45 +150,31 @@ describe('Test users subscriptions', function () {
|
||||||
|
|
||||||
it('Should search among subscriptions', async function () {
|
it('Should search among subscriptions', async function () {
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptions({
|
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'user3_channel' })
|
||||||
url: servers[0].url,
|
expect(body.total).to.equal(1)
|
||||||
token: users[0].accessToken,
|
expect(body.data).to.have.lengthOf(1)
|
||||||
sort: '-createdAt',
|
|
||||||
search: 'user3_channel'
|
|
||||||
})
|
|
||||||
expect(res.body.total).to.equal(1)
|
|
||||||
|
|
||||||
const subscriptions = res.body.data
|
|
||||||
expect(subscriptions).to.have.lengthOf(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptions({
|
const body = await command.list({ token: users[0].accessToken, sort: '-createdAt', search: 'toto' })
|
||||||
url: servers[0].url,
|
expect(body.total).to.equal(0)
|
||||||
token: users[0].accessToken,
|
expect(body.data).to.have.lengthOf(0)
|
||||||
sort: '-createdAt',
|
|
||||||
search: 'toto'
|
|
||||||
})
|
|
||||||
expect(res.body.total).to.equal(0)
|
|
||||||
|
|
||||||
const subscriptions = res.body.data
|
|
||||||
expect(subscriptions).to.have.lengthOf(0)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list subscription videos', async function () {
|
it('Should list subscription videos', async function () {
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, servers[0].accessToken)
|
const body = await command.listVideos()
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(0)
|
expect(body.data).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(3)
|
expect(body.total).to.equal(3)
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(3)
|
expect(videos).to.have.lengthOf(3)
|
||||||
|
|
||||||
|
@ -212,17 +193,17 @@ describe('Test users subscriptions', function () {
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, servers[0].accessToken)
|
const body = await command.listVideos()
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(0)
|
expect(body.data).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(4)
|
expect(body.total).to.equal(4)
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(4)
|
expect(videos).to.have.lengthOf(4)
|
||||||
|
|
||||||
|
@ -281,17 +262,17 @@ describe('Test users subscriptions', function () {
|
||||||
|
|
||||||
it('Should still list subscription videos', async function () {
|
it('Should still list subscription videos', async function () {
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, servers[0].accessToken)
|
const body = await command.listVideos()
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(0)
|
expect(body.data).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(4)
|
expect(body.total).to.equal(4)
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(4)
|
expect(videos).to.have.lengthOf(4)
|
||||||
|
|
||||||
|
@ -309,44 +290,41 @@ describe('Test users subscriptions', function () {
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
const videos: Video[] = res.body.data
|
expect(body.data[2].name).to.equal('video server 3 added after follow updated')
|
||||||
expect(videos[2].name).to.equal('video server 3 added after follow updated')
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should remove user of server 3 subscription', async function () {
|
it('Should remove user of server 3 subscription', async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await removeUserSubscription(servers[0].url, users[0].accessToken, 'user3_channel@localhost:' + servers[2].port)
|
await command.remove({ token: users[0].accessToken, uri: 'user3_channel@localhost:' + servers[2].port })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should not display its videos anymore', async function () {
|
it('Should not display its videos anymore', async function () {
|
||||||
{
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
expect(body.total).to.equal(1)
|
||||||
expect(res.body.total).to.equal(1)
|
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(1)
|
expect(videos).to.have.lengthOf(1)
|
||||||
|
|
||||||
expect(videos[0].name).to.equal('video server 1 added after follow')
|
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 () {
|
it('Should remove the root subscription and not display the videos anymore', async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await removeUserSubscription(servers[0].url, users[0].accessToken, 'root_channel@localhost:' + servers[0].port)
|
await command.remove({ token: users[0].accessToken, uri: 'root_channel@localhost:' + servers[0].port })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.list({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(0)
|
expect(videos).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
|
@ -366,15 +344,15 @@ describe('Test users subscriptions', function () {
|
||||||
it('Should follow user of server 3 again', async function () {
|
it('Should follow user of server 3 again', async function () {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, users[0].accessToken, 'user3_channel@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 res = await listUserSubscriptionVideos(servers[0].url, users[0].accessToken, 'createdAt')
|
const body = await command.listVideos({ token: users[0].accessToken, sort: 'createdAt' })
|
||||||
expect(res.body.total).to.equal(3)
|
expect(body.total).to.equal(3)
|
||||||
|
|
||||||
const videos: Video[] = res.body.data
|
const videos = body.data
|
||||||
expect(videos).to.be.an('array')
|
expect(videos).to.be.an('array')
|
||||||
expect(videos).to.have.lengthOf(3)
|
expect(videos).to.have.lengthOf(3)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import * as chai from 'chai'
|
||||||
import * as xmlParser from 'fast-xml-parser'
|
import * as xmlParser from 'fast-xml-parser'
|
||||||
import { HttpStatusCode } from '@shared/core-utils'
|
import { HttpStatusCode } from '@shared/core-utils'
|
||||||
import {
|
import {
|
||||||
addUserSubscription,
|
|
||||||
addVideoCommentThread,
|
addVideoCommentThread,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
|
@ -14,7 +13,6 @@ import {
|
||||||
flushAndRunServer,
|
flushAndRunServer,
|
||||||
getMyUserInformation,
|
getMyUserInformation,
|
||||||
getUserScopedTokens,
|
getUserScopedTokens,
|
||||||
listUserSubscriptionVideos,
|
|
||||||
renewUserScopedTokens,
|
renewUserScopedTokens,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
|
@ -319,8 +317,8 @@ describe('Test syndication feeds', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, feeduserAccessToken)
|
const body = await servers[0].subscriptionsCommand.listVideos({ token: feeduserAccessToken })
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
|
|
||||||
const query = { accountId: feeduserAccountId, token: feeduserFeedToken }
|
const query = { accountId: feeduserAccountId, token: feeduserFeedToken }
|
||||||
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
||||||
|
@ -340,8 +338,8 @@ describe('Test syndication feeds', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list no videos for a user with videos but no subscriptions', async function () {
|
it('Should list no videos for a user with videos but no subscriptions', async function () {
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, userAccessToken)
|
const body = await servers[0].subscriptionsCommand.listVideos({ token: userAccessToken })
|
||||||
expect(res.body.total).to.equal(0)
|
expect(body.total).to.equal(0)
|
||||||
|
|
||||||
const query = { accountId: userAccountId, token: userFeedToken }
|
const query = { accountId: userAccountId, token: userFeedToken }
|
||||||
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
||||||
|
@ -352,13 +350,13 @@ describe('Test syndication feeds', () => {
|
||||||
it('Should list self videos for a user with a subscription to themselves', async function () {
|
it('Should list self videos for a user with a subscription to themselves', async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, userAccessToken, 'john_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.add({ token: userAccessToken, targetUri: 'john_channel@localhost:' + servers[0].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, userAccessToken)
|
const body = await servers[0].subscriptionsCommand.listVideos({ token: userAccessToken })
|
||||||
expect(res.body.total).to.equal(1)
|
expect(body.total).to.equal(1)
|
||||||
expect(res.body.data[0].name).to.equal('user video')
|
expect(body.data[0].name).to.equal('user video')
|
||||||
|
|
||||||
const query = { accountId: userAccountId, token: userFeedToken, version: 1 }
|
const query = { accountId: userAccountId, token: userFeedToken, version: 1 }
|
||||||
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
||||||
|
@ -370,12 +368,12 @@ describe('Test syndication feeds', () => {
|
||||||
it('Should list videos of a user\'s subscription', async function () {
|
it('Should list videos of a user\'s subscription', async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:' + servers[0].port)
|
await servers[0].subscriptionsCommand.add({ token: userAccessToken, targetUri: 'root_channel@localhost:' + servers[0].port })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await listUserSubscriptionVideos(servers[0].url, userAccessToken)
|
const body = await servers[0].subscriptionsCommand.listVideos({ token: userAccessToken })
|
||||||
expect(res.body.total).to.equal(2, "there should be 2 videos part of the subscription")
|
expect(body.total).to.equal(2, "there should be 2 videos part of the subscription")
|
||||||
|
|
||||||
const query = { accountId: userAccountId, token: userFeedToken, version: 2 }
|
const query = { accountId: userAccountId, token: userFeedToken, version: 2 }
|
||||||
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
const json = await servers[0].feedCommand.getJSON({ feed: 'subscriptions', query })
|
||||||
|
|
|
@ -17,7 +17,7 @@ import { OverviewsCommand } from '../overviews'
|
||||||
import { makeGetRequest } from '../requests/requests'
|
import { makeGetRequest } from '../requests/requests'
|
||||||
import { SearchCommand } from '../search'
|
import { SearchCommand } from '../search'
|
||||||
import { SocketIOCommand } from '../socket'
|
import { SocketIOCommand } from '../socket'
|
||||||
import { AccountsCommand, BlocklistCommand } from '../users'
|
import { AccountsCommand, BlocklistCommand, SubscriptionsCommand } from '../users'
|
||||||
import { ConfigCommand } from './config-command'
|
import { ConfigCommand } from './config-command'
|
||||||
import { ContactFormCommand } from './contact-form-command'
|
import { ContactFormCommand } from './contact-form-command'
|
||||||
import { DebugCommand } from './debug-command'
|
import { DebugCommand } from './debug-command'
|
||||||
|
@ -98,6 +98,7 @@ interface ServerInfo {
|
||||||
socketIOCommand?: SocketIOCommand
|
socketIOCommand?: SocketIOCommand
|
||||||
accountsCommand?: AccountsCommand
|
accountsCommand?: AccountsCommand
|
||||||
blocklistCommand?: BlocklistCommand
|
blocklistCommand?: BlocklistCommand
|
||||||
|
subscriptionsCommand?: SubscriptionsCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
function parallelTests () {
|
function parallelTests () {
|
||||||
|
@ -322,6 +323,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = []
|
||||||
server.socketIOCommand = new SocketIOCommand(server)
|
server.socketIOCommand = new SocketIOCommand(server)
|
||||||
server.accountsCommand = new AccountsCommand(server)
|
server.accountsCommand = new AccountsCommand(server)
|
||||||
server.blocklistCommand = new BlocklistCommand(server)
|
server.blocklistCommand = new BlocklistCommand(server)
|
||||||
|
server.subscriptionsCommand = new SubscriptionsCommand(server)
|
||||||
|
|
||||||
res(server)
|
res(server)
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,5 +4,5 @@ export * from './blocklist-command'
|
||||||
|
|
||||||
export * from './login'
|
export * from './login'
|
||||||
export * from './user-notifications'
|
export * from './user-notifications'
|
||||||
export * from './user-subscriptions'
|
export * from './subscriptions-command'
|
||||||
export * from './users'
|
export * from './users'
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
import { ResultList, Video, VideoChannel } from '@shared/models'
|
||||||
|
import { HttpStatusCode } from '../../core-utils/miscs/http-error-codes'
|
||||||
|
import { AbstractCommand, OverrideCommandOptions } from '../shared'
|
||||||
|
|
||||||
|
export class SubscriptionsCommand extends AbstractCommand {
|
||||||
|
|
||||||
|
add (options: OverrideCommandOptions & {
|
||||||
|
targetUri: string
|
||||||
|
}) {
|
||||||
|
const path = '/api/v1/users/me/subscriptions'
|
||||||
|
|
||||||
|
return this.postBodyRequest({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
fields: { uri: options.targetUri },
|
||||||
|
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
list (options: OverrideCommandOptions & {
|
||||||
|
sort?: string // default -createdAt
|
||||||
|
search?: string
|
||||||
|
} = {}) {
|
||||||
|
const { sort = '-createdAt', search } = options
|
||||||
|
const path = '/api/v1/users/me/subscriptions'
|
||||||
|
|
||||||
|
return this.getRequestBody<ResultList<VideoChannel>>({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
query: {
|
||||||
|
sort,
|
||||||
|
search
|
||||||
|
},
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
listVideos (options: OverrideCommandOptions & {
|
||||||
|
sort?: string // default -createdAt
|
||||||
|
} = {}) {
|
||||||
|
const { sort = '-createdAt' } = options
|
||||||
|
const path = '/api/v1/users/me/subscriptions/videos'
|
||||||
|
|
||||||
|
return this.getRequestBody<ResultList<Video>>({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
query: { sort },
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
get (options: OverrideCommandOptions & {
|
||||||
|
uri: string
|
||||||
|
}) {
|
||||||
|
const path = '/api/v1/users/me/subscriptions/' + options.uri
|
||||||
|
|
||||||
|
return this.getRequestBody<VideoChannel>({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
remove (options: OverrideCommandOptions & {
|
||||||
|
uri: string
|
||||||
|
}) {
|
||||||
|
const path = '/api/v1/users/me/subscriptions/' + options.uri
|
||||||
|
|
||||||
|
return this.deleteRequest({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
exist (options: OverrideCommandOptions & {
|
||||||
|
uris: string[]
|
||||||
|
}) {
|
||||||
|
const path = '/api/v1/users/me/subscriptions/exist'
|
||||||
|
|
||||||
|
return this.getRequestBody<{ [id: string ]: boolean }>({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
path,
|
||||||
|
query: { 'uris[]': options.uris },
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,93 +0,0 @@
|
||||||
import { makeDeleteRequest, makeGetRequest, makePostBodyRequest } from '../requests/requests'
|
|
||||||
import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
|
|
||||||
|
|
||||||
function addUserSubscription (url: string, token: string, targetUri: string, statusCodeExpected = HttpStatusCode.NO_CONTENT_204) {
|
|
||||||
const path = '/api/v1/users/me/subscriptions'
|
|
||||||
|
|
||||||
return makePostBodyRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
token,
|
|
||||||
statusCodeExpected,
|
|
||||||
fields: { uri: targetUri }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function listUserSubscriptions (parameters: {
|
|
||||||
url: string
|
|
||||||
token: string
|
|
||||||
sort?: string
|
|
||||||
search?: string
|
|
||||||
statusCodeExpected?: number
|
|
||||||
}) {
|
|
||||||
const { url, token, sort = '-createdAt', search, statusCodeExpected = HttpStatusCode.OK_200 } = parameters
|
|
||||||
const path = '/api/v1/users/me/subscriptions'
|
|
||||||
|
|
||||||
return makeGetRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
token,
|
|
||||||
statusCodeExpected,
|
|
||||||
query: {
|
|
||||||
sort,
|
|
||||||
search
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function listUserSubscriptionVideos (url: string, token: string, sort = '-createdAt', statusCodeExpected = HttpStatusCode.OK_200) {
|
|
||||||
const path = '/api/v1/users/me/subscriptions/videos'
|
|
||||||
|
|
||||||
return makeGetRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
token,
|
|
||||||
statusCodeExpected,
|
|
||||||
query: { sort }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserSubscription (url: string, token: string, uri: string, statusCodeExpected = HttpStatusCode.OK_200) {
|
|
||||||
const path = '/api/v1/users/me/subscriptions/' + uri
|
|
||||||
|
|
||||||
return makeGetRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
token,
|
|
||||||
statusCodeExpected
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function removeUserSubscription (url: string, token: string, uri: string, statusCodeExpected = HttpStatusCode.NO_CONTENT_204) {
|
|
||||||
const path = '/api/v1/users/me/subscriptions/' + uri
|
|
||||||
|
|
||||||
return makeDeleteRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
token,
|
|
||||||
statusCodeExpected
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function areSubscriptionsExist (url: string, token: string, uris: string[], statusCodeExpected = HttpStatusCode.OK_200) {
|
|
||||||
const path = '/api/v1/users/me/subscriptions/exist'
|
|
||||||
|
|
||||||
return makeGetRequest({
|
|
||||||
url,
|
|
||||||
path,
|
|
||||||
query: { 'uris[]': uris },
|
|
||||||
token,
|
|
||||||
statusCodeExpected
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
export {
|
|
||||||
areSubscriptionsExist,
|
|
||||||
addUserSubscription,
|
|
||||||
listUserSubscriptions,
|
|
||||||
getUserSubscription,
|
|
||||||
listUserSubscriptionVideos,
|
|
||||||
removeUserSubscription
|
|
||||||
}
|
|
Loading…
Reference in New Issue