From 8eb07b01306429abe5c538ff7aa0a16e44fff26f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 16 Jun 2020 15:52:05 +0200 Subject: Split notification tests --- .../tests/api/notifications/notifications-api.ts | 205 +++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 server/tests/api/notifications/notifications-api.ts (limited to 'server/tests/api/notifications/notifications-api.ts') diff --git a/server/tests/api/notifications/notifications-api.ts b/server/tests/api/notifications/notifications-api.ts new file mode 100644 index 000000000..b81995449 --- /dev/null +++ b/server/tests/api/notifications/notifications-api.ts @@ -0,0 +1,205 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +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/miscs/email' +import { + CheckerBaseParams, + checkNewVideoFromSubscription, + getAllNotificationsSettings, + getUserNotifications, + markAsReadAllNotifications, + markAsReadNotifications, + prepareNotificationsTest, + updateMyNotificationSettings +} from '../../../../shared/extra-utils/users/user-notifications' +import { User, UserNotification, UserNotificationSettingValue } from '../../../../shared/models/users' + +const expect = chai.expect + +describe('Test notifications API', function () { + let server: ServerInfo + let userNotifications: UserNotification[] = [] + let userAccessToken: string + let emails: object[] = [] + + before(async function () { + this.timeout(120000) + + const res = await prepareNotificationsTest(1) + emails = res.emails + userAccessToken = res.userAccessToken + userNotifications = res.userNotifications + server = res.servers[0] + + await addUserSubscription(server.url, userAccessToken, 'root_channel@localhost:' + server.port) + + for (let i = 0; i < 10; i++) { + await uploadRandomVideo(server, false) + } + + await waitJobs([ server ]) + }) + + describe('Mark as read', function () { + + it('Should mark as read some notifications', async function () { + const res = await getUserNotifications(server.url, userAccessToken, 2, 3) + const ids = res.body.data.map(n => n.id) + + await markAsReadNotifications(server.url, userAccessToken, ids) + }) + + it('Should have the notifications marked as read', async function () { + const res = await getUserNotifications(server.url, userAccessToken, 0, 10) + + const notifications = res.body.data as UserNotification[] + expect(notifications[0].read).to.be.false + expect(notifications[1].read).to.be.false + expect(notifications[2].read).to.be.true + expect(notifications[3].read).to.be.true + expect(notifications[4].read).to.be.true + expect(notifications[5].read).to.be.false + }) + + it('Should only list read notifications', async function () { + const res = await getUserNotifications(server.url, userAccessToken, 0, 10, false) + + const notifications = res.body.data as UserNotification[] + for (const notification of notifications) { + expect(notification.read).to.be.true + } + }) + + it('Should only list unread notifications', async function () { + const res = await getUserNotifications(server.url, userAccessToken, 0, 10, true) + + const notifications = res.body.data as UserNotification[] + for (const notification of notifications) { + expect(notification.read).to.be.false + } + }) + + it('Should mark as read all notifications', async function () { + await markAsReadAllNotifications(server.url, userAccessToken) + + const res = await getUserNotifications(server.url, userAccessToken, 0, 10, true) + + expect(res.body.total).to.equal(0) + expect(res.body.data).to.have.lengthOf(0) + }) + }) + + describe('Notification settings', function () { + let baseParams: CheckerBaseParams + + before(() => { + baseParams = { + server: server, + emails, + socketNotifications: userNotifications, + token: userAccessToken + } + }) + + it('Should not have notifications', async function () { + this.timeout(20000) + + await updateMyNotificationSettings(server.url, userAccessToken, immutableAssign(getAllNotificationsSettings(), { + newVideoFromSubscription: UserNotificationSettingValue.NONE + })) + + { + const res = await getMyUserInformation(server.url, userAccessToken) + const info = res.body as User + expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.NONE) + } + + const { name, uuid } = await uploadRandomVideo(server) + + const check = { web: true, mail: true } + await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence') + }) + + it('Should only have web notifications', async function () { + this.timeout(20000) + + await updateMyNotificationSettings(server.url, userAccessToken, immutableAssign(getAllNotificationsSettings(), { + newVideoFromSubscription: UserNotificationSettingValue.WEB + })) + + { + const res = await getMyUserInformation(server.url, userAccessToken) + const info = res.body as User + expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.WEB) + } + + const { name, uuid } = await uploadRandomVideo(server) + + { + const check = { mail: true, web: false } + await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence') + } + + { + const check = { mail: false, web: true } + await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'presence') + } + }) + + it('Should only have mail notifications', async function () { + this.timeout(20000) + + await updateMyNotificationSettings(server.url, userAccessToken, immutableAssign(getAllNotificationsSettings(), { + newVideoFromSubscription: UserNotificationSettingValue.EMAIL + })) + + { + const res = await getMyUserInformation(server.url, userAccessToken) + const info = res.body as User + expect(info.notificationSettings.newVideoFromSubscription).to.equal(UserNotificationSettingValue.EMAIL) + } + + const { name, uuid } = await uploadRandomVideo(server) + + { + const check = { mail: false, web: true } + await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'absence') + } + + { + const check = { mail: true, web: false } + await checkNewVideoFromSubscription(immutableAssign(baseParams, { check }), name, uuid, 'presence') + } + }) + + it('Should have email and web notifications', async function () { + this.timeout(20000) + + await updateMyNotificationSettings(server.url, userAccessToken, immutableAssign(getAllNotificationsSettings(), { + newVideoFromSubscription: UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL + })) + + { + const res = await getMyUserInformation(server.url, userAccessToken) + const info = res.body as User + expect(info.notificationSettings.newVideoFromSubscription).to.equal( + UserNotificationSettingValue.WEB | UserNotificationSettingValue.EMAIL + ) + } + + const { name, uuid } = await uploadRandomVideo(server) + + await checkNewVideoFromSubscription(baseParams, name, uuid, 'presence') + }) + }) + + after(async function () { + MockSmtpServer.Instance.kill() + + await cleanupTests([ server ]) + }) +}) -- cgit v1.2.3