From 32a18cbf33a7cdbbe3d4885d32e4b67e19cdc1cf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 11 Mar 2021 16:54:52 +0100 Subject: Add new plugin/peertube version notifs --- .../tests/api/notifications/admin-notifications.ts | 165 +++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 server/tests/api/notifications/admin-notifications.ts (limited to 'server/tests/api/notifications/admin-notifications.ts') diff --git a/server/tests/api/notifications/admin-notifications.ts b/server/tests/api/notifications/admin-notifications.ts new file mode 100644 index 000000000..e07327d74 --- /dev/null +++ b/server/tests/api/notifications/admin-notifications.ts @@ -0,0 +1,165 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +import { expect } from 'chai' +import { MockJoinPeerTubeVersions } from '@shared/extra-utils/mock-servers/joinpeertube-versions' +import { cleanupTests, installPlugin, setPluginLatestVersion, setPluginVersion, wait } from '../../../../shared/extra-utils' +import { ServerInfo } from '../../../../shared/extra-utils/index' +import { MockSmtpServer } from '../../../../shared/extra-utils/miscs/email' +import { + CheckerBaseParams, + checkNewPeerTubeVersion, + checkNewPluginVersion, + prepareNotificationsTest +} from '../../../../shared/extra-utils/users/user-notifications' +import { UserNotification, UserNotificationType } from '../../../../shared/models/users' +import { PluginType } from '@shared/models' + +describe('Test admin notifications', function () { + let server: ServerInfo + let userNotifications: UserNotification[] = [] + let adminNotifications: UserNotification[] = [] + let emails: object[] = [] + let baseParams: CheckerBaseParams + let joinPeerTubeServer: MockJoinPeerTubeVersions + + before(async function () { + this.timeout(120000) + + const config = { + peertube: { + check_latest_version: { + enabled: true, + url: 'http://localhost:42102/versions.json' + } + }, + plugins: { + index: { + enabled: true, + check_latest_versions_interval: '5 seconds' + } + } + } + + const res = await prepareNotificationsTest(1, config) + emails = res.emails + server = res.servers[0] + + userNotifications = res.userNotifications + adminNotifications = res.adminNotifications + + baseParams = { + server: server, + emails, + socketNotifications: adminNotifications, + token: server.accessToken + } + + await installPlugin({ + url: server.url, + accessToken: server.accessToken, + npmName: 'peertube-plugin-hello-world' + }) + + await installPlugin({ + url: server.url, + accessToken: server.accessToken, + npmName: 'peertube-theme-background-red' + }) + + joinPeerTubeServer = new MockJoinPeerTubeVersions() + await joinPeerTubeServer.initialize() + }) + + describe('Latest PeerTube version notification', function () { + + it('Should not send a notification to admins if there is not a new version', async function () { + this.timeout(30000) + + joinPeerTubeServer.setLatestVersion('1.4.2') + + await wait(3000) + await checkNewPeerTubeVersion(baseParams, '1.4.2', 'absence') + }) + + it('Should send a notification to admins on new plugin version', async function () { + this.timeout(30000) + + joinPeerTubeServer.setLatestVersion('15.4.2') + + await wait(3000) + await checkNewPeerTubeVersion(baseParams, '15.4.2', 'presence') + }) + + it('Should not send the same notification to admins', async function () { + this.timeout(30000) + + await wait(3000) + expect(adminNotifications.filter(n => n.type === UserNotificationType.NEW_PEERTUBE_VERSION)).to.have.lengthOf(1) + }) + + it('Should not have sent a notification to users', async function () { + this.timeout(30000) + + expect(userNotifications.filter(n => n.type === UserNotificationType.NEW_PEERTUBE_VERSION)).to.have.lengthOf(0) + }) + + it('Should send a new notification after a new release', async function () { + this.timeout(30000) + + joinPeerTubeServer.setLatestVersion('15.4.3') + + await wait(3000) + await checkNewPeerTubeVersion(baseParams, '15.4.3', 'presence') + expect(adminNotifications.filter(n => n.type === UserNotificationType.NEW_PEERTUBE_VERSION)).to.have.lengthOf(2) + }) + }) + + describe('Latest plugin version notification', function () { + + it('Should not send a notification to admins if there is no new plugin version', async function () { + this.timeout(30000) + + await wait(6000) + await checkNewPluginVersion(baseParams, PluginType.PLUGIN, 'hello-world', 'absence') + }) + + it('Should send a notification to admins on new plugin version', async function () { + this.timeout(30000) + + await setPluginVersion(server.internalServerNumber, 'hello-world', '0.0.1') + await setPluginLatestVersion(server.internalServerNumber, 'hello-world', '0.0.1') + await wait(6000) + + await checkNewPluginVersion(baseParams, PluginType.PLUGIN, 'hello-world', 'presence') + }) + + it('Should not send the same notification to admins', async function () { + this.timeout(30000) + + await wait(6000) + + expect(adminNotifications.filter(n => n.type === UserNotificationType.NEW_PLUGIN_VERSION)).to.have.lengthOf(1) + }) + + it('Should not have sent a notification to users', async function () { + expect(userNotifications.filter(n => n.type === UserNotificationType.NEW_PLUGIN_VERSION)).to.have.lengthOf(0) + }) + + it('Should send a new notification after a new plugin release', async function () { + this.timeout(30000) + + await setPluginVersion(server.internalServerNumber, 'hello-world', '0.0.1') + await setPluginLatestVersion(server.internalServerNumber, 'hello-world', '0.0.1') + await wait(6000) + + expect(adminNotifications.filter(n => n.type === UserNotificationType.NEW_PEERTUBE_VERSION)).to.have.lengthOf(2) + }) + }) + + after(async function () { + MockSmtpServer.Instance.kill() + + await cleanupTests([ server ]) + }) +}) -- cgit v1.2.3