aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/extra-utils
diff options
context:
space:
mode:
Diffstat (limited to 'shared/extra-utils')
-rw-r--r--shared/extra-utils/index.ts2
-rw-r--r--shared/extra-utils/miscs/sql.ts22
-rw-r--r--shared/extra-utils/mock-servers/joinpeertube-versions.ts31
-rw-r--r--shared/extra-utils/mock-servers/mock-instances-index.ts (renamed from shared/extra-utils/instances-index/mock-instances-index.ts)0
-rw-r--r--shared/extra-utils/requests/activitypub.ts9
-rw-r--r--shared/extra-utils/server/servers.ts1
-rw-r--r--shared/extra-utils/users/user-notifications.ts72
7 files changed, 121 insertions, 16 deletions
diff --git a/shared/extra-utils/index.ts b/shared/extra-utils/index.ts
index 5c95a1b3e..898a92d43 100644
--- a/shared/extra-utils/index.ts
+++ b/shared/extra-utils/index.ts
@@ -1,7 +1,7 @@
1export * from './bulk/bulk' 1export * from './bulk/bulk'
2export * from './cli/cli' 2export * from './cli/cli'
3export * from './feeds/feeds' 3export * from './feeds/feeds'
4export * from './instances-index/mock-instances-index' 4export * from './mock-servers/mock-instances-index'
5export * from './miscs/miscs' 5export * from './miscs/miscs'
6export * from './miscs/sql' 6export * from './miscs/sql'
7export * from './miscs/stubs' 7export * from './miscs/stubs'
diff --git a/shared/extra-utils/miscs/sql.ts b/shared/extra-utils/miscs/sql.ts
index 740f0c2d6..35e493456 100644
--- a/shared/extra-utils/miscs/sql.ts
+++ b/shared/extra-utils/miscs/sql.ts
@@ -106,12 +106,20 @@ async function closeAllSequelize (servers: ServerInfo[]) {
106 } 106 }
107} 107}
108 108
109function setPluginVersion (internalServerNumber: number, pluginName: string, newVersion: string) { 109function setPluginField (internalServerNumber: number, pluginName: string, field: string, value: string) {
110 const seq = getSequelize(internalServerNumber) 110 const seq = getSequelize(internalServerNumber)
111 111
112 const options = { type: QueryTypes.UPDATE } 112 const options = { type: QueryTypes.UPDATE }
113 113
114 return seq.query(`UPDATE "plugin" SET "version" = '${newVersion}' WHERE "name" = '${pluginName}'`, options) 114 return seq.query(`UPDATE "plugin" SET "${field}" = '${value}' WHERE "name" = '${pluginName}'`, options)
115}
116
117function setPluginVersion (internalServerNumber: number, pluginName: string, newVersion: string) {
118 return setPluginField(internalServerNumber, pluginName, 'version', newVersion)
119}
120
121function setPluginLatestVersion (internalServerNumber: number, pluginName: string, newVersion: string) {
122 return setPluginField(internalServerNumber, pluginName, 'latestVersion', newVersion)
115} 123}
116 124
117function setActorFollowScores (internalServerNumber: number, newScore: number) { 125function setActorFollowScores (internalServerNumber: number, newScore: number) {
@@ -122,14 +130,24 @@ function setActorFollowScores (internalServerNumber: number, newScore: number) {
122 return seq.query(`UPDATE "actorFollow" SET "score" = ${newScore}`, options) 130 return seq.query(`UPDATE "actorFollow" SET "score" = ${newScore}`, options)
123} 131}
124 132
133function setTokenField (internalServerNumber: number, accessToken: string, field: string, value: string) {
134 const seq = getSequelize(internalServerNumber)
135
136 const options = { type: QueryTypes.UPDATE }
137
138 return seq.query(`UPDATE "oAuthToken" SET "${field}" = '${value}' WHERE "accessToken" = '${accessToken}'`, options)
139}
140
125export { 141export {
126 setVideoField, 142 setVideoField,
127 setPlaylistField, 143 setPlaylistField,
128 setActorField, 144 setActorField,
129 countVideoViewsOf, 145 countVideoViewsOf,
130 setPluginVersion, 146 setPluginVersion,
147 setPluginLatestVersion,
131 selectQuery, 148 selectQuery,
132 deleteAll, 149 deleteAll,
150 setTokenField,
133 updateQuery, 151 updateQuery,
134 setActorFollowScores, 152 setActorFollowScores,
135 closeAllSequelize, 153 closeAllSequelize,
diff --git a/shared/extra-utils/mock-servers/joinpeertube-versions.ts b/shared/extra-utils/mock-servers/joinpeertube-versions.ts
new file mode 100644
index 000000000..d7d5b2c49
--- /dev/null
+++ b/shared/extra-utils/mock-servers/joinpeertube-versions.ts
@@ -0,0 +1,31 @@
1import * as express from 'express'
2
3export class MockJoinPeerTubeVersions {
4 private latestVersion: string
5
6 initialize () {
7 return new Promise<void>(res => {
8 const app = express()
9
10 app.use('/', (req: express.Request, res: express.Response, next: express.NextFunction) => {
11 if (process.env.DEBUG) console.log('Receiving request on mocked server %s.', req.url)
12
13 return next()
14 })
15
16 app.get('/versions.json', (req: express.Request, res: express.Response) => {
17 return res.json({
18 peertube: {
19 latestVersion: this.latestVersion
20 }
21 })
22 })
23
24 app.listen(42102, () => res())
25 })
26 }
27
28 setLatestVersion (latestVersion: string) {
29 this.latestVersion = latestVersion
30 }
31}
diff --git a/shared/extra-utils/instances-index/mock-instances-index.ts b/shared/extra-utils/mock-servers/mock-instances-index.ts
index 2604eda03..2604eda03 100644
--- a/shared/extra-utils/instances-index/mock-instances-index.ts
+++ b/shared/extra-utils/mock-servers/mock-instances-index.ts
diff --git a/shared/extra-utils/requests/activitypub.ts b/shared/extra-utils/requests/activitypub.ts
index 4762a8665..ecd8ce823 100644
--- a/shared/extra-utils/requests/activitypub.ts
+++ b/shared/extra-utils/requests/activitypub.ts
@@ -5,20 +5,19 @@ import { activityPubContextify } from '../../../server/helpers/activitypub'
5 5
6function makePOSTAPRequest (url: string, body: any, httpSignature: any, headers: any) { 6function makePOSTAPRequest (url: string, body: any, httpSignature: any, headers: any) {
7 const options = { 7 const options = {
8 method: 'POST', 8 method: 'POST' as 'POST',
9 uri: url,
10 json: body, 9 json: body,
11 httpSignature, 10 httpSignature,
12 headers 11 headers
13 } 12 }
14 13
15 return doRequest(options) 14 return doRequest(url, options)
16} 15}
17 16
18async function makeFollowRequest (to: { url: string }, by: { url: string, privateKey }) { 17async function makeFollowRequest (to: { url: string }, by: { url: string, privateKey }) {
19 const follow = { 18 const follow = {
20 type: 'Follow', 19 type: 'Follow',
21 id: by.url + '/toto', 20 id: by.url + '/' + new Date().getTime(),
22 actor: by.url, 21 actor: by.url,
23 object: to.url 22 object: to.url
24 } 23 }
@@ -34,7 +33,7 @@ async function makeFollowRequest (to: { url: string }, by: { url: string, privat
34 } 33 }
35 const headers = buildGlobalHeaders(body) 34 const headers = buildGlobalHeaders(body)
36 35
37 return makePOSTAPRequest(to.url, body, httpSignature, headers) 36 return makePOSTAPRequest(to.url + '/inbox', body, httpSignature, headers)
38} 37}
39 38
40export { 39export {
diff --git a/shared/extra-utils/server/servers.ts b/shared/extra-utils/server/servers.ts
index 08d05ef36..779a3cc36 100644
--- a/shared/extra-utils/server/servers.ts
+++ b/shared/extra-utils/server/servers.ts
@@ -37,6 +37,7 @@ interface ServerInfo {
37 customConfigFile?: string 37 customConfigFile?: string
38 38
39 accessToken?: string 39 accessToken?: string
40 refreshToken?: string
40 videoChannel?: VideoChannel 41 videoChannel?: VideoChannel
41 42
42 video?: { 43 video?: {
diff --git a/shared/extra-utils/users/user-notifications.ts b/shared/extra-utils/users/user-notifications.ts
index 467a3d959..249e82925 100644
--- a/shared/extra-utils/users/user-notifications.ts
+++ b/shared/extra-utils/users/user-notifications.ts
@@ -2,7 +2,8 @@
2 2
3import { expect } from 'chai' 3import { expect } from 'chai'
4import { inspect } from 'util' 4import { inspect } from 'util'
5import { AbuseState } from '@shared/models' 5import { AbuseState, PluginType } from '@shared/models'
6import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
6import { UserNotification, UserNotificationSetting, UserNotificationSettingValue, UserNotificationType } from '../../models/users' 7import { UserNotification, UserNotificationSetting, UserNotificationSettingValue, UserNotificationType } from '../../models/users'
7import { MockSmtpServer } from '../miscs/email' 8import { MockSmtpServer } from '../miscs/email'
8import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests' 9import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
@@ -11,7 +12,6 @@ import { flushAndRunMultipleServers, ServerInfo } from '../server/servers'
11import { getUserNotificationSocket } from '../socket/socket-io' 12import { getUserNotificationSocket } from '../socket/socket-io'
12import { setAccessTokensToServers, userLogin } from './login' 13import { setAccessTokensToServers, userLogin } from './login'
13import { createUser, getMyUserInformation } from './users' 14import { createUser, getMyUserInformation } from './users'
14import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
15 15
16function updateMyNotificationSettings ( 16function updateMyNotificationSettings (
17 url: string, 17 url: string,
@@ -629,7 +629,59 @@ async function checkNewBlacklistOnMyVideo (
629 await checkNotification(base, notificationChecker, emailNotificationFinder, 'presence') 629 await checkNotification(base, notificationChecker, emailNotificationFinder, 'presence')
630} 630}
631 631
632function getAllNotificationsSettings () { 632async function checkNewPeerTubeVersion (base: CheckerBaseParams, latestVersion: string, type: CheckerType) {
633 const notificationType = UserNotificationType.NEW_PEERTUBE_VERSION
634
635 function notificationChecker (notification: UserNotification, type: CheckerType) {
636 if (type === 'presence') {
637 expect(notification).to.not.be.undefined
638 expect(notification.type).to.equal(notificationType)
639
640 expect(notification.peertube).to.exist
641 expect(notification.peertube.latestVersion).to.equal(latestVersion)
642 } else {
643 expect(notification).to.satisfy((n: UserNotification) => {
644 return n === undefined || n.peertube === undefined || n.peertube.latestVersion !== latestVersion
645 })
646 }
647 }
648
649 function emailNotificationFinder (email: object) {
650 const text = email['text']
651
652 return text.includes(latestVersion)
653 }
654
655 await checkNotification(base, notificationChecker, emailNotificationFinder, type)
656}
657
658async function checkNewPluginVersion (base: CheckerBaseParams, pluginType: PluginType, pluginName: string, type: CheckerType) {
659 const notificationType = UserNotificationType.NEW_PLUGIN_VERSION
660
661 function notificationChecker (notification: UserNotification, type: CheckerType) {
662 if (type === 'presence') {
663 expect(notification).to.not.be.undefined
664 expect(notification.type).to.equal(notificationType)
665
666 expect(notification.plugin.name).to.equal(pluginName)
667 expect(notification.plugin.type).to.equal(pluginType)
668 } else {
669 expect(notification).to.satisfy((n: UserNotification) => {
670 return n === undefined || n.plugin === undefined || n.plugin.name !== pluginName
671 })
672 }
673 }
674
675 function emailNotificationFinder (email: object) {
676 const text = email['text']
677
678 return text.includes(pluginName)
679 }
680
681 await checkNotification(base, notificationChecker, emailNotificationFinder, type)
682}
683
684function getAllNotificationsSettings (): UserNotificationSetting {
633 return { 685 return {
634 newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL, 686 newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
635 newCommentOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL, 687 newCommentOnMyVideo: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
@@ -644,11 +696,13 @@ function getAllNotificationsSettings () {
644 newInstanceFollower: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL, 696 newInstanceFollower: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
645 abuseNewMessage: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL, 697 abuseNewMessage: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
646 abuseStateChange: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL, 698 abuseStateChange: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
647 autoInstanceFollowing: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL 699 autoInstanceFollowing: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
648 } as UserNotificationSetting 700 newPeerTubeVersion: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL,
701 newPluginVersion: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL
702 }
649} 703}
650 704
651async function prepareNotificationsTest (serversCount = 3) { 705async function prepareNotificationsTest (serversCount = 3, overrideConfigArg: any = {}) {
652 const userNotifications: UserNotification[] = [] 706 const userNotifications: UserNotification[] = []
653 const adminNotifications: UserNotification[] = [] 707 const adminNotifications: UserNotification[] = []
654 const adminNotificationsServer2: UserNotification[] = [] 708 const adminNotificationsServer2: UserNotification[] = []
@@ -665,7 +719,7 @@ async function prepareNotificationsTest (serversCount = 3) {
665 limit: 20 719 limit: 20
666 } 720 }
667 } 721 }
668 const servers = await flushAndRunMultipleServers(serversCount, overrideConfig) 722 const servers = await flushAndRunMultipleServers(serversCount, Object.assign(overrideConfig, overrideConfigArg))
669 723
670 await setAccessTokensToServers(servers) 724 await setAccessTokensToServers(servers)
671 725
@@ -749,5 +803,7 @@ export {
749 checkNewInstanceFollower, 803 checkNewInstanceFollower,
750 prepareNotificationsTest, 804 prepareNotificationsTest,
751 checkNewCommentAbuseForModerators, 805 checkNewCommentAbuseForModerators,
752 checkNewAccountAbuseForModerators 806 checkNewAccountAbuseForModerators,
807 checkNewPeerTubeVersion,
808 checkNewPluginVersion
753} 809}