mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-05 02:39:33 +02:00
137 lines
5.4 KiB
TypeScript
137 lines
5.4 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
|
|
|
import { wait } from '@peertube/peertube-core-utils'
|
|
import {
|
|
UserNotification,
|
|
UserNotificationSetting,
|
|
UserNotificationSettingValue,
|
|
UserNotificationType_Type
|
|
} from '@peertube/peertube-models'
|
|
import {
|
|
ConfigCommand,
|
|
createMultipleServers,
|
|
doubleFollow,
|
|
PeerTubeServer,
|
|
setAccessTokensToServers,
|
|
setDefaultAccountAvatar,
|
|
setDefaultChannelAvatar,
|
|
setDefaultVideoChannel,
|
|
waitJobs
|
|
} from '@peertube/peertube-server-commands'
|
|
import { MockSmtpServer } from '../mock-servers/mock-email.js'
|
|
|
|
export function getAllNotificationsSettings (): UserNotificationSetting {
|
|
return {
|
|
newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newCommentOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
abuseAsModerator: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
videoAutoBlacklistAsModerator: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
blacklistOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
myVideoImportFinished: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
myVideoPublished: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
commentMention: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newFollow: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newUserRegistration: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newInstanceFollower: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
abuseNewMessage: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
abuseStateChange: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
autoInstanceFollowing: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newPeerTubeVersion: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
myVideoStudioEditionFinished: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
myVideoTranscriptionGenerated: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
|
|
newPluginVersion: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL
|
|
}
|
|
}
|
|
|
|
export async function waitUntilNotification (options: {
|
|
server: PeerTubeServer
|
|
notificationType: UserNotificationType_Type
|
|
token: string
|
|
fromDate: Date
|
|
}) {
|
|
const { server, fromDate, notificationType, token } = options
|
|
|
|
do {
|
|
const { data } = await server.notifications.list({ start: 0, count: 5, token })
|
|
if (data.some(n => n.type === notificationType && new Date(n.createdAt) >= fromDate)) break
|
|
|
|
await wait(500)
|
|
} while (true)
|
|
|
|
await waitJobs([ server ])
|
|
}
|
|
|
|
export async function prepareNotificationsTest (serversCount = 3, overrideConfigArg: any = {}) {
|
|
const userNotifications: UserNotification[] = []
|
|
const adminNotifications: UserNotification[] = []
|
|
const adminNotificationsServer2: UserNotification[] = []
|
|
const emails: object[] = []
|
|
|
|
const port = await MockSmtpServer.Instance.collectEmails(emails)
|
|
|
|
const overrideConfig = {
|
|
...ConfigCommand.getEmailOverrideConfig(port),
|
|
|
|
signup: {
|
|
limit: 20
|
|
}
|
|
}
|
|
const servers = await createMultipleServers(serversCount, Object.assign(overrideConfig, overrideConfigArg))
|
|
|
|
await setAccessTokensToServers(servers)
|
|
await setDefaultVideoChannel(servers)
|
|
await setDefaultChannelAvatar(servers)
|
|
await setDefaultAccountAvatar(servers)
|
|
|
|
if (servers[1]) {
|
|
await servers[1].config.enableStudio()
|
|
await servers[1].config.enableLive({ allowReplay: true, transcoding: false })
|
|
}
|
|
|
|
if (serversCount > 1) {
|
|
await doubleFollow(servers[0], servers[1])
|
|
}
|
|
|
|
const user = { username: 'user_1', password: 'super password' }
|
|
await servers[0].users.create({ ...user, videoQuota: 10 * 1000 * 1000 })
|
|
const userAccessToken = await servers[0].login.getAccessToken(user)
|
|
await servers[0].users.updateMe({ token: userAccessToken, displayName: 'User 1' })
|
|
|
|
await servers[0].notifications.updateMySettings({ token: userAccessToken, settings: getAllNotificationsSettings() })
|
|
await servers[0].users.updateMyAvatar({ token: userAccessToken, fixture: 'avatar.png' })
|
|
await servers[0].channels.updateImage({ channelName: 'user_1_channel', token: userAccessToken, fixture: 'avatar.png', type: 'avatar' })
|
|
|
|
await servers[0].notifications.updateMySettings({ settings: getAllNotificationsSettings() })
|
|
|
|
if (serversCount > 1) {
|
|
await servers[1].notifications.updateMySettings({ settings: getAllNotificationsSettings() })
|
|
}
|
|
|
|
{
|
|
const socket = servers[0].socketIO.getUserNotificationSocket({ token: userAccessToken })
|
|
socket.on('new-notification', n => userNotifications.push(n))
|
|
}
|
|
{
|
|
const socket = servers[0].socketIO.getUserNotificationSocket()
|
|
socket.on('new-notification', n => adminNotifications.push(n))
|
|
}
|
|
|
|
if (serversCount > 1) {
|
|
const socket = servers[1].socketIO.getUserNotificationSocket()
|
|
socket.on('new-notification', n => adminNotificationsServer2.push(n))
|
|
}
|
|
|
|
const { videoChannels } = await servers[0].users.getMyInfo()
|
|
const channelId = videoChannels[0].id
|
|
|
|
return {
|
|
userNotifications,
|
|
adminNotifications,
|
|
adminNotificationsServer2,
|
|
userAccessToken,
|
|
emails,
|
|
servers,
|
|
channelId,
|
|
baseOverrideConfig: overrideConfig
|
|
}
|
|
}
|