Merge api/client tests into a single entry point

This commit is contained in:
ivk 2022-05-12 16:51:15 +02:00 committed by Ivan Kupalov
parent 86e180b2c8
commit 7ec57e1190
134 changed files with 1121 additions and 1318 deletions

View 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,
)
}
})