mirror of
https://github.com/tutao/tutanota.git
synced 2025-10-19 07:53:47 +00:00
Merge api/client tests into a single entry point
This commit is contained in:
parent
86e180b2c8
commit
7ec57e1190
134 changed files with 1121 additions and 1318 deletions
93
test/tests/mail/MailModelTest.ts
Normal file
93
test/tests/mail/MailModelTest.ts
Normal file
|
@ -0,0 +1,93 @@
|
|||
import o from "ospec"
|
||||
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 {MailTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
|
||||
import {createMailFolder} 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"
|
||||
import {downcast} from "@tutao/tutanota-utils"
|
||||
import {WorkerClient} from "../../../src/api/main/WorkerClient.js"
|
||||
import {MailFacade} from "../../../src/api/worker/facades/MailFacade.js"
|
||||
|
||||
o.spec("MailModelTest", function () {
|
||||
let notifications: Partial<Notifications>
|
||||
let showSpy: Spy
|
||||
let model: MailModel
|
||||
const inboxFolder = createMailFolder()
|
||||
inboxFolder.mails = "instanceListId"
|
||||
inboxFolder.folderType = MailFolderType.INBOX
|
||||
const anotherFolder = createMailFolder()
|
||||
anotherFolder.mails = "anotherListId"
|
||||
anotherFolder.folderType = MailFolderType.ARCHIVE
|
||||
const mailboxDetails: Partial<MailboxDetail>[] = [
|
||||
{
|
||||
folders: [inboxFolder],
|
||||
},
|
||||
]
|
||||
o.beforeEach(function () {
|
||||
notifications = {}
|
||||
showSpy = notifications.showNotification = spy()
|
||||
const restClient = new EntityRestClientMock()
|
||||
const workerClient = nodemocker.mock<WorkerClient>("worker", {}).set()
|
||||
const mailFacade = nodemocker.mock<MailFacade>("mailFacade", {}).set()
|
||||
model = new MailModel(
|
||||
downcast(notifications),
|
||||
downcast({}),
|
||||
workerClient,
|
||||
mailFacade,
|
||||
new EntityClient(restClient),
|
||||
)
|
||||
// not pretty, but works
|
||||
model.mailboxDetails(mailboxDetails as MailboxDetail[])
|
||||
})
|
||||
// FIXME No way to inject entityRestClient for now
|
||||
// o("sends notification on new email in inbox", function () {
|
||||
// model.entityEventsReceived([
|
||||
// makeUpdate({
|
||||
// instanceListId: inboxFolder.mails,
|
||||
// operation: OperationType.CREATE
|
||||
// })
|
||||
// ])
|
||||
// o(showSpy.invocations.length).equals(1)
|
||||
// })
|
||||
o("doesn't send notification for another folder", async function () {
|
||||
await model.entityEventsReceived([
|
||||
makeUpdate({
|
||||
instanceListId: anotherFolder.mails,
|
||||
operation: OperationType.CREATE,
|
||||
}),
|
||||
])
|
||||
o(showSpy.invocations.length).equals(0)
|
||||
})
|
||||
o("doesn't send notification for move operation", async function () {
|
||||
await model.entityEventsReceived([
|
||||
makeUpdate({
|
||||
instanceListId: anotherFolder.mails,
|
||||
operation: OperationType.DELETE,
|
||||
}),
|
||||
makeUpdate({
|
||||
instanceListId: inboxFolder.mails,
|
||||
operation: OperationType.CREATE,
|
||||
}),
|
||||
])
|
||||
o(showSpy.invocations.length).equals(0)
|
||||
})
|
||||
|
||||
function makeUpdate(arg: { instanceListId: string; operation: OperationType }): EntityUpdateData {
|
||||
return Object.assign(
|
||||
{},
|
||||
{
|
||||
type: MailTypeRef.type,
|
||||
application: MailTypeRef.app,
|
||||
instanceId: "instanceId",
|
||||
},
|
||||
arg,
|
||||
)
|
||||
}
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue