tutanota/test/tests/mail/MailModelTest.ts

118 lines
4.6 KiB
TypeScript
Raw Normal View History

2023-06-29 18:26:45 +02:00
import o from "@tutao/otest"
import { Notifications } from "../../../src/common/gui/Notifications.js"
import { Spy, spy, verify } from "@tutao/tutanota-test-utils"
import { MailSetKind, OperationType } from "../../../src/common/api/common/TutanotaConstants.js"
import { MailFolderTypeRef, MailSetEntryTypeRef, MailTypeRef } from "../../../src/common/api/entities/tutanota/TypeRefs.js"
import { EntityClient } from "../../../src/common/api/common/EntityClient.js"
2022-12-27 15:37:40 +01:00
import { EntityRestClientMock } from "../api/worker/rest/EntityRestClientMock.js"
import { downcast } from "@tutao/tutanota-utils"
import { LoginController } from "../../../src/common/api/main/LoginController.js"
import { instance, matchers, object, when } from "testdouble"
import { UserController } from "../../../src/common/api/main/UserController.js"
import { createTestEntity } from "../TestUtils.js"
import { EntityUpdateData } from "../../../src/common/api/common/utils/EntityUpdateUtils.js"
import { MailboxDetail, MailboxModel } from "../../../src/common/mailFunctionality/MailboxModel.js"
import { InboxRuleHandler } from "../../../src/mail-app/mail/model/InboxRuleHandler.js"
import { getElementId, getListId } from "../../../src/common/api/common/utils/EntityUtils.js"
import { MailModel } from "../../../src/mail-app/mail/model/MailModel.js"
import { EventController } from "../../../src/common/api/main/EventController.js"
import { MailFacade } from "../../../src/common/api/worker/facades/lazy/MailFacade.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
const inboxFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "inboxId"] })
inboxFolder.folderType = MailSetKind.INBOX
const anotherFolder = createTestEntity(MailFolderTypeRef, { _id: ["folderListId", "archiveId"] })
anotherFolder.folderType = MailSetKind.ARCHIVE
2022-12-19 16:38:14 +01:00
let mailboxDetails: Partial<MailboxDetail>[]
let logins: LoginController
let inboxRuleHandler: InboxRuleHandler
let mailFacade: MailFacade
const restClient: EntityRestClientMock = new EntityRestClientMock()
2018-10-22 12:02:13 +02:00
o.beforeEach(function () {
notifications = {}
const mailboxModel = instance(MailboxModel)
const eventController = instance(EventController)
mailFacade = instance(MailFacade)
2018-10-22 12:02:13 +02:00
showSpy = notifications.showNotification = spy()
logins = object()
2023-08-31 16:31:00 +02:00
let userController = object<UserController>()
when(userController.isUpdateForLoggedInUserInstance(matchers.anything(), matchers.anything())).thenReturn(false)
when(logins.getUserController()).thenReturn(userController)
inboxRuleHandler = object()
model = new MailModel(downcast({}), mailboxModel, eventController, new EntityClient(restClient), logins, mailFacade, null, null)
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 () {
const mailSetEntry = createTestEntity(MailSetEntryTypeRef, { _id: [anotherFolder.entries, "mailSetEntryId"] })
restClient.addListInstances(mailSetEntry)
await model.entityEventsReceived([
makeUpdate({
instanceListId: getListId(mailSetEntry),
instanceId: getElementId(mailSetEntry),
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 () {
const mailSetEntry = createTestEntity(MailSetEntryTypeRef, { _id: [inboxFolder.entries, "mailSetEntryId"] })
restClient.addListInstances(mailSetEntry)
await model.entityEventsReceived([
makeUpdate({
instanceListId: getListId(mailSetEntry),
instanceId: getElementId(mailSetEntry),
operation: OperationType.DELETE,
}),
makeUpdate({
instanceListId: getListId(mailSetEntry),
instanceId: getElementId(mailSetEntry),
operation: OperationType.CREATE,
}),
])
2018-10-22 12:02:13 +02:00
o(showSpy.invocations.length).equals(0)
})
o("markMails", async function () {
const mails = [
createTestEntity(MailTypeRef, {
_id: ["mailbag id1", "mail id1"],
}),
createTestEntity(MailTypeRef, {
_id: ["mailbag id2", "mail id2"],
}),
createTestEntity(MailTypeRef, {
_id: ["mailbag id3", "mail id3"],
}),
]
await model.markMails(mails, true)
verify(
mailFacade.markMails(
[
["mailbag id1", "mail id1"],
["mailbag id2", "mail id2"],
["mailbag id3", "mail id3"],
],
true,
),
)
})
function makeUpdate(arg: { instanceListId: string; instanceId: Id; 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
})