tutanota/test/tests/mail/MailModelTest.ts

83 lines
3.1 KiB
TypeScript
Raw Normal View History

2019-09-13 13:49:11 +02:00
import o from "ospec"
2022-12-27 15:37:40 +01:00
import { Notifications } from "../../../src/gui/Notifications.js"
import type { Spy } from "@tutao/tutanota-test-utils"
import { spy } from "@tutao/tutanota-test-utils"
import type { MailboxDetail } from "../../../src/mail/model/MailModel.js"
import { MailModel } from "../../../src/mail/model/MailModel.js"
import { MailFolderType, OperationType } from "../../../src/api/common/TutanotaConstants.js"
import { createMailFolder, MailTypeRef } from "../../../src/api/entities/tutanota/TypeRefs.js"
import type { EntityUpdateData } from "../../../src/api/main/EventController.js"
import { EntityClient } from "../../../src/api/common/EntityClient.js"
import { EntityRestClientMock } from "../api/worker/rest/EntityRestClientMock.js"
import nodemocker from "../nodemocker.js"
2022-12-27 15:37:40 +01:00
import { downcast } from "@tutao/tutanota-utils"
import { MailFacade } from "../../../src/api/worker/facades/lazy/MailFacade.js"
2022-12-27 15:37:40 +01:00
import { LoginController } from "../../../src/api/main/LoginController.js"
import { object } from "testdouble"
import { FolderSystem } from "../../../src/api/common/mail/FolderSystem.js"
2022-12-28 15:28:28 +01:00
import { WebsocketConnectivityModel } from "../../../src/misc/WebsocketConnectivityModel.js"
2018-10-22 12:02:13 +02:00
o.spec("MailModelTest", function () {
2021-12-23 14:03:23 +01:00
let notifications: Partial<Notifications>
2018-10-22 12:02:13 +02:00
let showSpy: Spy
let model: MailModel
2022-12-27 15:37:40 +01:00
const inboxFolder = createMailFolder({ _id: ["folderListId", "inboxId"] })
2018-10-22 12:02:13 +02:00
inboxFolder.mails = "instanceListId"
inboxFolder.folderType = MailFolderType.INBOX
2022-12-27 15:37:40 +01:00
const anotherFolder = createMailFolder({ _id: ["folderListId", "archiveId"] })
2018-10-22 12:02:13 +02:00
anotherFolder.mails = "anotherListId"
anotherFolder.folderType = MailFolderType.ARCHIVE
2022-12-19 16:38:14 +01:00
let mailboxDetails: Partial<MailboxDetail>[]
let logins: LoginController
2018-10-22 12:02:13 +02:00
o.beforeEach(function () {
2022-12-19 16:38:14 +01:00
mailboxDetails = [
{
folders: new FolderSystem([inboxFolder]),
},
]
2018-10-22 12:02:13 +02:00
notifications = {}
showSpy = notifications.showNotification = spy()
const restClient = new EntityRestClientMock()
2022-12-28 15:28:28 +01:00
const connectivityModel = object<WebsocketConnectivityModel>()
const mailFacade = nodemocker.mock<MailFacade>("mailFacade", {}).set()
logins = object()
2022-12-28 15:28:28 +01:00
model = new MailModel(downcast(notifications), downcast({}), connectivityModel, mailFacade, new EntityClient(restClient), logins)
2018-10-22 12:02:13 +02:00
// not pretty, but works
model.mailboxDetails(mailboxDetails as MailboxDetail[])
2018-10-22 12:02:13 +02:00
})
o("doesn't send notification for another folder", async function () {
await model.entityEventsReceived([
2018-10-22 12:02:13 +02:00
makeUpdate({
instanceListId: anotherFolder.mails,
operation: OperationType.CREATE,
}),
2018-10-22 12:02:13 +02:00
])
o(showSpy.invocations.length).equals(0)
})
o("doesn't send notification for move operation", async function () {
await model.entityEventsReceived([
2018-10-22 12:02:13 +02:00
makeUpdate({
instanceListId: anotherFolder.mails,
operation: OperationType.DELETE,
2018-10-22 12:02:13 +02:00
}),
makeUpdate({
instanceListId: inboxFolder.mails,
operation: OperationType.CREATE,
}),
2018-10-22 12:02:13 +02:00
])
o(showSpy.invocations.length).equals(0)
})
2022-12-27 15:37:40 +01:00
function makeUpdate(arg: { instanceListId: string; operation: OperationType }): EntityUpdateData {
return Object.assign(
{},
{
type: MailTypeRef.type,
application: MailTypeRef.app,
instanceId: "instanceId",
},
arg,
)
2018-10-22 12:02:13 +02:00
}
2022-12-27 15:37:40 +01:00
})