1
0
Fork 0

Introduce subscriptions command

This commit is contained in:
Chocobozzz 2021-07-07 16:40:49 +02:00
parent 5f8bd4cbb1
commit 2c27e70471
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
10 changed files with 208 additions and 234 deletions

View File

@ -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)

View File

@ -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 })
}) })
}) })

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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 })

View File

@ -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)
}) })

View File

@ -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'

View File

@ -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
})
}
}

View File

@ -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
}