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

@ -15,9 +15,8 @@
"build-packages": "npm run build -ws",
"build-runtime-packages": "npm run build -w @tutao/tutanota-utils && npm run build -w @tutao/tutanota-crypto",
"start": "./start-desktop.sh",
"test": "npm run build-packages; npm run --if-present test -ws && cd test && node --icu-data-dir=../node_modules/full-icu test",
"testapi": "cd test && node --icu-data-dir=../node_modules/full-icu test api",
"testclient": "cd test && node --icu-data-dir=../node_modules/full-icu test client",
"test": "npm run --if-present test -ws && cd test && node test",
"test:app": "cd test && node test",
"fasttest": "cd test && node --icu-data-dir=../node_modules/full-icu fastTest",
"types": "tsc --incremental true --noEmit true",
"prebuild": "node buildSrc/prebuild.js",

View file

@ -30,13 +30,12 @@ export async function runTestBuild({clean}) {
const pjPath = path.join("..", "package.json")
await fs.mkdir(inBuildDir(), {recursive: true})
await fs.copyFile(pjPath, inBuildDir("package.json"))
await createUnitTestHtml("api", localEnv)
await createUnitTestHtml("client", localEnv)
await createUnitTestHtml(localEnv)
})
await runStep("Esbuild", async () => {
await esbuild({
entryPoints: ["api/bootstrapTests-api.ts", "client/bootstrapTests-client.ts"],
entryPoints: ["tests/bootstrapTests.ts"],
outdir: "./build",
// Bundle to include the whole graph
bundle: true,
@ -44,6 +43,7 @@ export async function runTestBuild({clean}) {
splitting: true,
format: "esm",
sourcemap: "linked",
target: "esnext",
define: {
// See Env.ts for explanation
"NO_THREAD_ASSERTIONS": 'true',
@ -87,18 +87,14 @@ export async function runTestBuild({clean}) {
})
}
async function createUnitTestHtml(project, localEnv) {
const imports = [{src: `test-${project}.js`, type: "module"}]
async function createUnitTestHtml(localEnv) {
const imports = [{src: `./bootstrapTests.js`, type: "module"}]
const htmlFilePath = inBuildDir("test.html")
const template = `import('./${project}/bootstrapTests-${project}.js')`
const targetFile = inBuildDir(`test-${project}.html`)
console.log(`Generating browser tests for ${project} at "${targetFile}"`)
const bootstrap = `window.whitelabelCustomizations = null
${template}`
await writeFile(inBuildDir(`test-${project}.js`), bootstrap)
console.log(`Generating browser tests at "${htmlFilePath}"`)
const html = await renderHtml(imports, localEnv)
await writeFile(targetFile, html)
await writeFile(htmlFilePath, html)
}
function inBuildDir(...files) {

View file

@ -1,82 +0,0 @@
import o from "ospec"
import "./worker/facades/LoginFacadeTest.js"
import "./common/LoggerTest.js"
import "./common/BirthdayUtilsTest"
import "./rest/EntityRestClientTest"
import "./crypto/CryptoFacadeTest.js"
import "./crypto/CompatibilityTest"
import "./error/RestErrorTest"
import "./error/TutanotaErrorTest"
import "./rest/RestClientTest"
import "./rest/EntityRestCacheTest"
import "./worker/EventBusClientTest"
import "./worker/search/TokenizerTest"
import "./worker/search/IndexerTest"
import "./worker/search/IndexerCoreTest"
import "./worker/search/ContactIndexerTest"
import "./worker/search/GroupInfoIndexerTest"
import "./worker/search/MailIndexerTest"
import "./worker/search/IndexUtilsTest"
import "./worker/search/SearchFacadeTest"
import "./worker/search/SuggestionFacadeTest"
import "./worker/search/SearchIndexEncodingTest"
import "./common/SwTest"
import "./worker/search/EventQueueTest"
import "./common/IndexerDebugLoggerTest"
import "./worker/facades/MailFacadeTest"
import "./worker/facades/CalendarFacadeTest"
import "./worker/SuspensionHandlerTest"
import "./worker/ConfigurationDbTest"
import "./worker/CompressionTest"
import "../api/common/PlainTextSearchTest"
import "../api/common/EntityUtilsTest"
import "./rest/CborDateEncoderTest.js"
import "./worker/facades/BlobFacadeTest.js"
import "./worker/utils/SleepDetectorTest.js"
import "./worker/rest/ServiceExecutorTest.js"
import "./worker/rest/OfflineStorageTest.js"
import {preTest, reportTest} from "./TestUtils"
import {random} from "@tutao/tutanota-crypto"
import * as td from "testdouble"
import {Mode} from "../../src/api/common/Env.js"
(async function () {
const {WorkerImpl} = await import("../../src/api/worker/WorkerImpl")
globalThis.testWorker = WorkerImpl
if (typeof process != "undefined") {
if (process.argv.includes("-i")) {
console.log("\nRunning with integration tests because was run with -i\n")
await import("./common/WorkerTest")
await import("./common/IntegrationTest")
} else {
console.log("\nRunning without integration tests because run without -i\n")
}
}
o.before(async function () {
preTest()
// testdouble complains about certain mocking related code smells, and also prints a warning whenever you replace a property on an object.
// it's very very noisy, so we turn it off
td.config({
ignoreWarnings: true
})
// setup the Entropy for all testcases
await random.addEntropy([{data: 36, entropy: 256, source: "key"}])
})
o.afterEach(function () {
td.reset()
// Reset env.mode in case any tests have fiddled with it
env.mode = Mode.Test
})
// @ts-ignore
o.run(reportTest)
})()

View file

@ -1,99 +0,0 @@
// @ts-nocheck
// import env from "@tutanota/env"
import * as env from "../../buildSrc/env.js"
import {promises as fs} from "fs"
import path, {dirname} from "path"
import {fileURLToPath} from "url"
const testRoot = dirname(fileURLToPath(import.meta.url))
const projectRoot = path.resolve(path.join(testRoot, ".."))
const pjPath = path.join(projectRoot, "package.json")
const {version} = JSON.parse(await fs.readFile(pjPath, "utf8"))
globalThis.env = env.create({staticUrl: "http://localhost:9000", version, mode: "Test", dist: false})
globalThis.buildOptions = {sqliteNativePath: "./native-cache/node/better-sqlite3-7.5.0-linux.node"}
globalThis.isBrowser = typeof window !== "undefined"
;(async function () {
const noOp = () => {
}
if (isBrowser) {
/**
* runs this test exclusively on browsers (not nodec)
*/
window.browser = (func) => func
/**
* runs this test exclusively on node (not browsers)
*/
window.node = () => noOp
} else {
/**
* runs this test exclusively on browsers (not node)
*/
globalThis.browser = () => noOp
/**
* runs this test exclusively on node (not browsers)
*/
globalThis.node = (func) => func
const browserMock = await import("mithril/test-utils/browserMock")
globalThis.window = browserMock.default()
globalThis.window.getElementsByTagName = function () {
} // for styles.js
globalThis.window.location = {hostname: "https://tutanota.com"}
globalThis.window.document.addEventListener = function () {
}
globalThis.document = globalThis.window.document
globalThis.navigator = globalThis.window.navigator
const local = {}
globalThis.localStorage = {
getItem: key => local[key],
setItem: (key, value) => local[key] = value
}
globalThis.requestAnimationFrame = globalThis.requestAnimationFrame || (callback => setTimeout(callback, 10))
globalThis.btoa = str => Buffer.from(str, 'binary').toString('base64')
globalThis.atob = b64Encoded => Buffer.from(b64Encoded, 'base64').toString('binary')
globalThis.WebSocket = noOp
const nowOffset = Date.now();
globalThis.performance = {
now: function () {
return Date.now() - nowOffset;
}
}
globalThis.performance = {
now: Date.now,
mark: noOp,
measure: noOp,
}
const crypto = await import("crypto")
globalThis.crypto = {
getRandomValues: function (bytes) {
let randomBytes = crypto.randomBytes(bytes.length)
bytes.set(randomBytes)
}
}
window.tutao = {
appState: {
prefixWithoutFile: "./"
}
}
globalThis.XMLHttpRequest = (await import("xhr2")).default
globalThis.express = (await import("express")).default
globalThis.bodyParser = (await import("body-parser")).default
}
const Env = await import("../../src/api/common/Env")
Env.bootFinished()
import('./Suite.js')
})()

View file

@ -1,84 +0,0 @@
// @ts-nocheck
globalThis.isBrowser = typeof window !== "undefined"
;(async function () {
const noOp = () => {}
if (isBrowser) {
/**
* runs this test exclusively on browsers (not nodec)
*/
window.browser = (func) => func
/**
* runs this test exclusively on node (not browsers)
*/
window.node = () => noOp
} else {
/**
* runs this test exclusively on browsers (not node)
*/
globalThis.browser = () => noOp
/**
* runs this test exclusively on node (not browsers)
*/
globalThis.node = (func) => func
const browserMock = await import("mithril/test-utils/browserMock.js")
globalThis.window = browserMock.default()
globalThis.window.getElementsByTagName = function () {
} // for styles.js
globalThis.window.location = {hostname: "https://tutanota.com"}
globalThis.window.document.addEventListener = function () {
}
globalThis.document = globalThis.window.document
globalThis.navigator = globalThis.window.navigator
const local = {}
globalThis.localStorage = {
getItem: key => local[key],
setItem: (key, value) => local[key] = value
}
globalThis.requestAnimationFrame = globalThis.requestAnimationFrame || (callback => setTimeout(callback, 10))
globalThis.btoa = str => Buffer.from(str, 'binary').toString('base64')
globalThis.atob = b64Encoded => Buffer.from(b64Encoded, 'base64').toString('binary')
globalThis.WebSocket = noOp
const nowOffset = Date.now();
globalThis.performance = {
now: function () {
return Date.now() - nowOffset;
}
}
globalThis.performance = {
now: Date.now,
mark: noOp,
measure: noOp,
}
const crypto = await import("crypto")
globalThis.crypto = {
getRandomValues: function (bytes) {
let randomBytes = crypto.randomBytes(bytes.length)
bytes.set(randomBytes)
}
}
window.tutao = {
appState: {
prefixWithoutFile: "./"
}
}
globalThis.XMLHttpRequest = (await import("xhr2")).default
globalThis.express = (await import("express")).default
globalThis.bodyParser = (await import("body-parser")).default
}
const Env = await import("../../src/api/common/Env")
Env.bootFinished()
import('./Suite.js')
})()

View file

@ -1,108 +0,0 @@
import "./contact/VCardExporterTest"
import "./contact/VCardImporterTest"
import "./common/ClientDetectorTest"
import "./common/LanguageViewModelTest"
import "./common/FormatterTest"
import "./common/UrlifierTest"
import "./common/PasswordUtilsTest"
import "./gui/animation/AnimationsTest"
import "./gui/base/ListTest"
import "./gui/ThemeControllerTest"
import "./common/EntropyCollectorTest"
import "./common/HtmlSanitizerTest"
import "./mail/InboxRuleHandlerTest"
import "./mail/MailUtilsTest"
import "./mail/MailUtilsSignatureTest"
import "./mail/MailModelTest"
import "./contact/ContactUtilsTest"
import "./contact/ContactMergeUtilsTest"
import "./calendar/CalendarModelTest"
import "./calendar/CalendarUtilsTest"
import "./calendar/CalendarParserTest"
import "./calendar/CalendarImporterTest"
import "./calendar/AlarmSchedulerTest"
import "./support/FaqModelTest"
import "./gui/base/WizardDialogNTest"
import "./calendar/CalendarEventViewModelTest"
import "./gui/ColorTest"
import "./mail/SendMailModelTest"
import "./common/OutOfOfficeNotificationTest"
import "./subscription/SubscriptionUtilsTest"
import "./subscription/SwitchSubscriptionDialogModelTest"
import "./mail/TemplateSearchFilterTest"
import "./mail/KnowledgeBaseSearchFilterTest"
import "./mail/export/ExporterTest"
import "./mail/export/BundlerTest"
import "./common/utils/FileUtilsTest"
import "./gui/GuiUtilsTest"
import "./misc/ParserTest"
import "./templates/TemplateEditorModelTest"
import "./misc/SchedulerTest"
import "./subscription/PriceUtilsTest"
import "./misc/parsing/MailAddressParserTest"
import "./misc/FormatValidatorTest"
import "./whitelabel/CustomColorEditorTest"
import "./login/LoginViewModelTest"
import "./misc/credentials/CredentialsProviderTest"
import "./misc/DeviceConfigTest"
import "./calendar/EventDragHandlerTest"
import "./calendar/CalendarGuiUtilsTest"
import "./calendar/CalendarViewModelTest"
import "./misc/credentials/NativeCredentialsEncryptionTest"
import "./misc/credentials/CredentialsKeyProviderTest"
import "./misc/credentials/CredentialsMigrationTest"
import "./misc/webauthn/WebauthnClientTest.js"
import "./common/TranslationKeysTest"
import "./misc/UsageTestModelTest.js"
import "./file/FileControllerTest.js"
import o from "ospec"
import {preTest, reportTest} from "../api/TestUtils"
import * as td from "testdouble"
import {random} from "@tutao/tutanota-crypto"
(async () => {
if (typeof process != "undefined") {
// setup the Entropy for all testcases
await random.addEntropy([{data: 36, entropy: 256, source: "key"}])
await import("./desktop/PathUtilsTest.js")
await import("./desktop/config/migrations/DesktopConfigMigratorTest")
await import("./desktop/ElectronUpdaterTest")
await import("./desktop/DesktopNotifierTest")
await import("./desktop/ApplicationWindowTest.js")
await import("./desktop/sse/DesktopSseClientTest.js")
await import("./desktop/sse/DesktopAlarmStorageTest.js")
await import("./desktop/sse/DesktopAlarmSchedulerTest.js")
await import("./desktop/DesktopDownloadManagerTest.js")
await import("./desktop/IPCTest.js")
await import("./desktop/SocketeerTest.js")
await import("./desktop/integration/DesktopIntegratorTest.js")
await import("./desktop/integration/RegistryScriptGeneratorTest.js")
await import("./desktop/DesktopCryptoFacadeTest.js")
await import("./desktop/DesktopContextMenuTest.js")
await import("./desktop/KeyStoreFacadeTest.js")
await import ("./desktop/config/ConfigFileTest.js")
await import("./desktop/db/OfflineDbTest")
await import("./desktop/db/OfflineDbFacadeTest")
await import ("./desktop/credentials/DesktopCredentialsEncryptionTest")
}
o.before(function () {
// testdouble complains about certain mocking related code smells, and also prints a warning whenever you replace a property on an object.
// it's very very noisy, so we turn it off
td.config({
ignoreWarnings: true
})
})
o.afterEach(function () {
td.reset()
})
preTest()
// @ts-ignore
o.run(reportTest)
})()

View file

@ -1,94 +0,0 @@
// @ts-nocheck
globalThis.isBrowser = typeof window !== "undefined"
globalThis.mocks = {}
;(async function () {
const noOp = () => {}
// Until we get rid of random worker imports we have to stub it somehow
globalThis.testWorker = class WorkerImpl {
constructor() {
this._queue = {
_handleMessage: noOp,
}
}
}
if (isBrowser) {
/**
* runs this test exclusively on browsers (not nodec)
*/
window.browser = (func) => func
/**
* runs this test exclusively on node (not browsers)
*/
window.node = () => noOp
} else {
const noOp = () => {}
/**
* runs this test exclusively on browsers (not node)
*/
globalThis.browser = () => noOp
/**
* runs this test exclusively on node (not browsers)
*/
globalThis.node = (func) => func
const browserMock = await import("mithril/test-utils/browserMock.js")
globalThis.window = browserMock.default()
globalThis.window.getElementsByTagName = function () {
} // for styles.js
globalThis.window.location = {hostname: "tutanota.com", search: "", href:"http://tutanota.com"}
globalThis.window.document.addEventListener = function () {
}
globalThis.document = globalThis.window.document
globalThis.navigator = globalThis.window.navigator
const local = {}
globalThis.localStorage = {
getItem: key => local[key],
setItem: (key, value) => local[key] = value
}
globalThis.requestAnimationFrame = globalThis.requestAnimationFrame || (callback => setTimeout(callback, 10))
globalThis.btoa = str => Buffer.from(str, 'binary').toString('base64')
globalThis.atob = b64Encoded => Buffer.from(b64Encoded, 'base64').toString('binary')
globalThis.WebSocket = noOp
const nowOffset = Date.now();
globalThis.performance = {
now: function () {
return Date.now() - nowOffset;
}
}
globalThis.performance = {
now: Date.now,
mark: noOp,
measure: noOp,
}
const crypto = await import("crypto")
globalThis.crypto = {
getRandomValues: function (bytes) {
let randomBytes = crypto.randomBytes(bytes.length)
bytes.set(randomBytes)
}
}
window.crypto = globalThis.crypto
globalThis.XMLHttpRequest = (await import("xhr2")).default
process.on("unhandledRejection", function (e) {
console.log("Uncaught (in promise) " + e.stack)
})
globalThis.electronMock = {
app: {}
}
}
window.tutao = {}
const Env = await import("../../src/api/common/Env.js")
Env.bootFinished()
import('./Suite.js')
})()

View file

@ -1,39 +1,30 @@
import child_process from "child_process"
import {runTestBuild} from "./TestBuilder.js"
import {Argument, Option, program} from "commander"
import {Option, program} from "commander"
await program
.addArgument(new Argument("project")
.choices(["api", "client"])
.argOptional()
)
.addOption(new Option("-i, --integration", "Include integration tests (requires local server)"))
.addOption(new Option("-c, --clean"))
.action(async (project, {clean, integration}) => {
.action(async ({clean, integration}) => {
await runTestBuild({clean})
console.log("build finished!")
const testProjects = project ? [project] : ["api", "client"]
await runTestsAndExit(testProjects, integration)
await runTestsAndExit(integration)
})
.parseAsync(process.argv)
/** Function which runs tests for {@param projects} and exits with the most suitable code afterwards. */
async function runTestsAndExit(projects, integration) {
const codes = []
for (const project of projects) {
codes.push(await runTest(project, integration))
}
const code = codes.find((code) => code !== 0) ?? 0
/** Function which runs tests and exits with the exit code afterwards. */
async function runTestsAndExit(integration) {
const code = await runTest(integration)
process.exit(code)
}
function runTest(project, integration) {
function runTest(integration) {
return new Promise((resolve) => {
console.log("running", project, "tests")
console.log("running tests")
const args = integration ? ["-i"] : []
// We fork because ospec is very weird and doesn't just let you wait for the results unless you do something with report
const testProcess = child_process.fork(`./build/${project}/bootstrapTests-${project}.js`, args)
const testProcess = child_process.fork(`./build/bootstrapTests.js`, args)
testProcess.on('exit', resolve)
})
}

View file

@ -1,16 +1,16 @@
import o from "ospec"
import {GroupType} from "../../../src/api/common/TutanotaConstants"
import {ContactTypeRef, createContact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {MailTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import type {MailFolder} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {MailFolderTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {MailBoxTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {GroupType} from "../../src/api/common/TutanotaConstants.js"
import {ContactTypeRef, createContact} from "../../src/api/entities/tutanota/TypeRefs.js"
import {MailTypeRef} from "../../src/api/entities/tutanota/TypeRefs.js"
import {createContactAddress} from "../../src/api/entities/tutanota/TypeRefs.js"
import type {MailFolder} from "../../src/api/entities/tutanota/TypeRefs.js"
import {MailFolderTypeRef} from "../../src/api/entities/tutanota/TypeRefs.js"
import {MailBoxTypeRef} from "../../src/api/entities/tutanota/TypeRefs.js"
import {neverNull} from "@tutao/tutanota-utils"
import {ContactListTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {initLocator, locator} from "../../../src/api/worker/WorkerLocator"
import {browserDataStub} from "../TestUtils"
import {SessionType} from "../../../src/api/common/SessionType"
import {ContactListTypeRef} from "../../src/api/entities/tutanota/TypeRefs.js"
import {initLocator, locator} from "../../src/api/worker/WorkerLocator.js"
import {browserDataStub} from "./TestUtils.js"
import {SessionType} from "../../src/api/common/SessionType.js"
function loadFolders(folderListId: Id): Promise<MailFolder[]> {
return locator.cachingEntityClient.loadAll(MailFolderTypeRef, folderListId)

188
test/tests/Suite.ts Normal file
View file

@ -0,0 +1,188 @@
import o from "ospec"
import "./api/worker/facades/LoginFacadeTest.js"
import "./api/common/utils/LoggerTest.js"
import "./api/common/utils/BirthdayUtilsTest.js"
import "./api/worker/rest/EntityRestClientTest.js"
import "./api/worker/crypto/CryptoFacadeTest.js"
import "./api/worker/crypto/CompatibilityTest.js"
import "./api/common/error/RestErrorTest.js"
import "./api/common/error/TutanotaErrorTest.js"
import "./api/worker/rest/RestClientTest.js"
import "./api/worker/rest/EntityRestCacheTest.js"
import "./api/worker/EventBusClientTest.js"
import "./api/worker/search/TokenizerTest.js"
import "./api/worker/search/IndexerTest.js"
import "./api/worker/search/IndexerCoreTest.js"
import "./api/worker/search/ContactIndexerTest.js"
import "./api/worker/search/GroupInfoIndexerTest.js"
import "./api/worker/search/MailIndexerTest.js"
import "./api/worker/search/IndexUtilsTest.js"
import "./api/worker/search/SearchFacadeTest.js"
import "./api/worker/search/SuggestionFacadeTest.js"
import "./api/worker/search/SearchIndexEncodingTest.js"
import "./serviceworker/SwTest.js"
import "./api/worker/search/EventQueueTest.js"
import "./api/common/utils/IndexerDebugLoggerTest.js"
import "./api/worker/facades/MailFacadeTest.js"
import "./api/worker/facades/CalendarFacadeTest.js"
import "./api/worker/SuspensionHandlerTest.js"
import "./api/worker/facades/ConfigurationDbTest.js"
import "./api/worker/CompressionTest.js"
import "./api/common/utils/PlainTextSearchTest.js"
import "./api/common/utils/EntityUtilsTest.js"
import "./api/worker/rest/CborDateEncoderTest.js"
import "./api/worker/facades/BlobFacadeTest.js"
import "./api/worker/utils/SleepDetectorTest.js"
import "./api/worker/rest/ServiceExecutorTest.js"
import "./api/worker/rest/OfflineStorageTest.js"
import "./contacts/VCardExporterTest.js"
import "./contacts/VCardImporterTest.js"
import "./misc/ClientDetectorTest.js"
import "./misc/LanguageViewModelTest.js"
import "./misc/FormatterTest.js"
import "./api/worker/UrlifierTest.js"
import "./misc/PasswordUtilsTest.js"
import "./gui/animation/AnimationsTest.js"
import "./gui/base/ListTest.js"
import "./gui/ThemeControllerTest.js"
import "./api/main/EntropyCollectorTest.js"
import "./misc/HtmlSanitizerTest.js"
import "./mail/InboxRuleHandlerTest.js"
import "./mail/MailUtilsTest.js"
import "./mail/MailUtilsSignatureTest.js"
import "./mail/MailModelTest.js"
import "./contacts/ContactUtilsTest.js"
import "./contacts/ContactMergeUtilsTest.js"
import "./calendar/CalendarModelTest.js"
import "./calendar/CalendarUtilsTest.js"
import "./calendar/CalendarParserTest.js"
import "./calendar/CalendarImporterTest.js"
import "./calendar/AlarmSchedulerTest.js"
import "./support/FaqModelTest.js"
import "./gui/base/WizardDialogNTest.js"
import "./calendar/CalendarEventViewModelTest.js"
import "./gui/ColorTest.js"
import "./mail/SendMailModelTest.js"
import "./misc/OutOfOfficeNotificationTest.js"
import "./subscription/SubscriptionUtilsTest.js"
import "./subscription/SwitchSubscriptionDialogModelTest.js"
import "./mail/TemplateSearchFilterTest.js"
import "./mail/KnowledgeBaseSearchFilterTest.js"
import "./mail/export/ExporterTest.js"
import "./mail/export/BundlerTest.js"
import "./api/common/utils/FileUtilsTest.js"
import "./gui/GuiUtilsTest.js"
import "./misc/ParserTest.js"
import "./settings/TemplateEditorModelTest.js"
import "./misc/SchedulerTest.js"
import "./subscription/PriceUtilsTest.js"
import "./misc/parsing/MailAddressParserTest.js"
import "./misc/FormatValidatorTest.js"
import "./settings/whitelabel/CustomColorEditorTest.js"
import "./login/LoginViewModelTest.js"
import "./misc/credentials/CredentialsProviderTest.js"
import "./misc/DeviceConfigTest.js"
import "./calendar/EventDragHandlerTest.js"
import "./calendar/CalendarGuiUtilsTest.js"
import "./calendar/CalendarViewModelTest.js"
import "./misc/credentials/NativeCredentialsEncryptionTest.js"
import "./misc/credentials/CredentialsKeyProviderTest.js"
import "./misc/credentials/CredentialsMigrationTest.js"
import "./misc/webauthn/WebauthnClientTest.js"
import "./translations/TranslationKeysTest.js"
import "./misc/UsageTestModelTest.js"
import "./file/FileControllerTest.js"
import * as td from "testdouble"
import {random} from "@tutao/tutanota-crypto"
import {Mode} from "../../src/api/common/Env.js"
import {assertNotNull, neverNull} from "@tutao/tutanota-utils"
await setupSuite()
preTest()
// @ts-ignore
o.run(reportTest)
async function setupSuite() {
const {WorkerImpl} = await import("../../src/api/worker/WorkerImpl.js")
globalThis.testWorker = WorkerImpl
if (typeof process != "undefined") {
if (process.argv.includes("-i")) {
console.log("\nRunning with integration tests because was run with -i\n")
await import("./api/main/WorkerTest.js")
await import("./IntegrationTest.js")
} else {
console.log("\nRunning without integration tests because run without -i\n")
}
}
if (typeof process != "undefined") {
// setup the Entropy for all testcases
await random.addEntropy([{data: 36, entropy: 256, source: "key"}])
await import("./desktop/PathUtilsTest.js")
await import("./desktop/config/migrations/DesktopConfigMigratorTest.js")
await import("./desktop/ElectronUpdaterTest.js")
await import("./desktop/DesktopNotifierTest.js")
await import("./desktop/ApplicationWindowTest.js")
await import("./desktop/sse/DesktopSseClientTest.js")
await import("./desktop/sse/DesktopAlarmStorageTest.js")
await import("./desktop/sse/DesktopAlarmSchedulerTest.js")
await import("./desktop/DesktopDownloadManagerTest.js")
await import("./desktop/IPCTest.js")
await import("./desktop/SocketeerTest.js")
await import("./desktop/integration/DesktopIntegratorTest.js")
await import("./desktop/integration/RegistryScriptGeneratorTest.js")
await import("./desktop/DesktopCryptoFacadeTest.js")
await import("./desktop/DesktopContextMenuTest.js")
await import("./desktop/KeyStoreFacadeTest.js")
await import ("./desktop/config/ConfigFileTest.js")
await import("./desktop/db/OfflineDbTest.js")
await import("./desktop/db/OfflineDbFacadeTest.js")
await import ("./desktop/credentials/DesktopCredentialsEncryptionTest.js")
}
// testdouble complains about certain mocking related code smells, and also prints a warning whenever you replace a property on an object.
// it's very very noisy, so we turn it off
td.config({
ignoreWarnings: true
})
o.before(async function () {
// setup the Entropy for all testcases
await random.addEntropy([{data: 36, entropy: 256, source: "key"}])
})
o.afterEach(function () {
td.reset()
// Reset env.mode in case any tests have fiddled with it
env.mode = Mode.Test
})
}
export function preTest() {
if (globalThis.isBrowser) {
const p = document.createElement("p")
p.id = "report"
p.style.fontWeight = "bold"
p.style.fontSize = "30px"
p.style.fontFamily = "sans-serif"
p.textContent = "Running tests..."
neverNull(document.body).appendChild(p)
}
}
export function reportTest(results: any, stats: any) {
// @ts-ignore
const errCount = o.report(results, stats)
if (typeof process != "undefined" && errCount !== 0) process.exit(1) // eslint-disable-line no-process-exit
if (globalThis.isBrowser) {
const p = assertNotNull(document.getElementById("report"))
// errCount includes bailCount
p.textContent = errCount === 0 ? "No errors" : `${errCount} error(s) (see console)`
p.style.color = errCount === 0 ? "green" : "red"
}
}

View file

@ -1,10 +1,9 @@
import o from "ospec"
import type {BrowserData} from "../../src/misc/ClientConstants.js"
import type {Db} from "../../src/api/worker/search/SearchTypes.js"
import {IndexerCore} from "../../src/api/worker/search/IndexerCore.js"
import {EventQueue} from "../../src/api/worker/search/EventQueue.js"
import {DbFacade, DbTransaction} from "../../src/api/worker/search/DbFacade.js"
import {assertNotNull, neverNull, Thunk} from "@tutao/tutanota-utils"
import {Thunk} from "@tutao/tutanota-utils"
import type {DesktopKeyStoreFacade} from "../../src/desktop/KeyStoreFacadeImpl.js"
import {mock} from "@tutao/tutanota-test-utils"
import {aes256RandomKey, fixedIv, uint8ArrayToKey} from "@tutao/tutanota-crypto"
@ -40,30 +39,6 @@ export function makeCore(args?: {
return core
}
export function preTest() {
if (globalThis.isBrowser) {
const p = document.createElement("p")
p.id = "report"
p.style.fontWeight = "bold"
p.style.fontSize = "30px"
p.style.fontFamily = "sans-serif"
p.textContent = "Running tests..."
neverNull(document.body).appendChild(p)
}
}
export function reportTest(results: any, stats: any) {
// @ts-ignore
const errCount = o.report(results, stats)
if (typeof process != "undefined" && errCount !== 0) process.exit(1) // eslint-disable-line no-process-exit
if (globalThis.isBrowser) {
const p = assertNotNull(document.getElementById("report"))
// errCount includes bailCount
p.textContent = errCount === 0 ? "No errors" : `${errCount} error(s) (see console)`
p.style.color = errCount === 0 ? "green" : "red"
}
}
export function makeKeyStoreFacade(uint8ArrayKey: Uint8Array): DesktopKeyStoreFacade {
return {
getDeviceKey() {

View file

@ -20,8 +20,8 @@ import {
ConnectionError,
InternalServerError,
handleRestError,
} from "../../../src/api/common/error/RestError"
import {TutanotaError} from "../../../src/api/common/error/TutanotaError"
} from "../../../../../src/api/common/error/RestError.js"
import {TutanotaError} from "../../../../../src/api/common/error/TutanotaError.js"
o.spec("RestErrorTest", function () {
o("handleRestError should create the correct error classes", () => {
o(handleRestError(400) instanceof BadRequestError).equals(true)

View file

@ -1,6 +1,6 @@
import o from "ospec"
import {ProgrammingError} from "../../../src/api/common/error/ProgrammingError"
import {TutanotaError} from "../../../src/api/common/error/TutanotaError"
import {ProgrammingError} from "../../../../../src/api/common/error/ProgrammingError.js"
import {TutanotaError} from "../../../../../src/api/common/error/TutanotaError.js"
o.spec("TutanotaErrorTest", function () {
o("error name should be correct", () => {
o(new ProgrammingError().name).equals("ProgrammingError")

View file

@ -1,8 +1,8 @@
import o from "ospec"
import {createBirthday} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {birthdayToIsoDate, isoDateToBirthday} from "../../../src/api/common/utils/BirthdayUtils"
import {ParsingError} from "../../../src/api/common/error/ParsingError"
import {TutanotaError} from "../../../src/api/common/error/TutanotaError"
import {createBirthday} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {birthdayToIsoDate, isoDateToBirthday} from "../../../../../src/api/common/utils/BirthdayUtils.js"
import {ParsingError} from "../../../../../src/api/common/error/ParsingError.js"
import {TutanotaError} from "../../../../../src/api/common/error/TutanotaError.js"
o.spec("ContactUtilsTest", function () {
o("birthdayToIsoDate", function () {
const bday = createBirthday({

View file

@ -4,7 +4,7 @@ import {
generatedIdToTimestamp,
timestampToGeneratedId,
timestampToHexGeneratedId,
} from "../../../src/api/common/utils/EntityUtils"
} from "../../../../../src/api/common/utils/EntityUtils.js"
o.spec("EntityUtils", function () {
o("TimestampToHexGeneratedId ", function () {
let timestamp = 1370563200000

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {deduplicateFilenames, sanitizeFilename} from "../../../../src/api/common/utils/FileUtils"
import {deduplicateFilenames, sanitizeFilename} from "../../../../../src/api/common/utils/FileUtils.js"
o.spec("FileUtilsTest", function () {
o("sanitizeFilename", function () {

View file

@ -1,9 +1,9 @@
// @ts-nocheck
import o from "ospec"
import {client} from "../../../src/misc/ClientDetector"
import {client} from "../../../../../src/misc/ClientDetector.js"
import {downcast} from "@tutao/tutanota-utils"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
import {addSearchIndexDebugEntry, getSearchIndexDebugLogs} from "../../../src/misc/IndexerDebugLogger"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {addSearchIndexDebugEntry, getSearchIndexDebugLogs} from "../../../../../src/misc/IndexerDebugLogger.js"
node(() => {
o.spec("IndexerDebugLoggerTest", function () {

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {LOG_SIZE, Logger} from "../../../src/api/common/Logger"
import {LOG_SIZE, Logger} from "../../../../../src/api/common/Logger.js"
import {lastThrow} from "@tutao/tutanota-utils"
o.spec("Loger test", function () {
let dateProvider

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {_findMatches, _search, search} from "../../../src/api/common/utils/PlainTextSearch"
import {_findMatches, _search, search} from "../../../../../src/api/common/utils/PlainTextSearch.js"
o.spec("PlainTextSearchTest", function () {
const entryWithNestedArray1 = {
title: "Is my password strong enough?",

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {EntropyCollector} from "../../../src/api/main/EntropyCollector"
import {EntropyCollector} from "../../../../src/api/main/EntropyCollector.js"
import {EntropySource} from "@tutao/tutanota-crypto";
o.spec("EntropyCollector", function () {

View file

@ -1,13 +1,13 @@
import o from "ospec"
import type {WorkerClient} from "../../../src/api/main/WorkerClient"
import {CryptoError} from "../../../src/api/common/error/CryptoError"
import {NotAuthenticatedError} from "../../../src/api/common/error/RestError"
import {Request} from "../../../src/api/common/MessageDispatcher"
import {ProgrammingError} from "../../../src/api/common/error/ProgrammingError"
import {logins} from "../../../src/api/main/LoginController"
import {locator} from "../../../src/api/main/MainLocator"
import type {WorkerClient} from "../../../../src/api/main/WorkerClient.js"
import {CryptoError} from "../../../../src/api/common/error/CryptoError.js"
import {NotAuthenticatedError} from "../../../../src/api/common/error/RestError.js"
import {Request} from "../../../../src/api/common/MessageDispatcher.js"
import {ProgrammingError} from "../../../../src/api/common/error/ProgrammingError.js"
import {logins} from "../../../../src/api/main/LoginController.js"
import {locator} from "../../../../src/api/main/MainLocator.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {SessionType} from "../../../src/api/common/SessionType.js";
import {SessionType} from "../../../../src/api/common/SessionType.js";
o.spec(
"WorkerTest request / response",

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {compress, CompressionError, uncompress} from "../../../src/api/worker/Compression"
import {compress, CompressionError, uncompress} from "../../../../src/api/worker/Compression.js"
import {stringToUtf8Uint8Array} from "@tutao/tutanota-utils"
o.spec("Compression/Decompression", function () {
const lowerBound = 12

View file

@ -1,29 +1,29 @@
import o from "ospec"
import {ConnectMode, EventBusClient} from "../../../src/api/worker/EventBusClient"
import {GroupType, OperationType} from "../../../src/api/common/TutanotaConstants"
import type {EntityUpdate} from "../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../src/api/entities/sys/TypeRefs.js"
import {EntityRestClientMock} from "./EntityRestClientMock"
import {EntityClient} from "../../../src/api/common/EntityClient"
import {ConnectMode, EventBusClient} from "../../../../src/api/worker/EventBusClient.js"
import {GroupType, OperationType} from "../../../../src/api/common/TutanotaConstants.js"
import type {EntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {EntityRestClientMock} from "./rest/EntityRestClientMock.js"
import {EntityClient} from "../../../../src/api/common/EntityClient.js"
import {defer, noOp} from "@tutao/tutanota-utils"
import {WorkerImpl} from "../../../src/api/worker/WorkerImpl"
import {LoginFacadeImpl} from "../../../src/api/worker/facades/LoginFacade"
import {createUser, User} from "../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../src/api/entities/sys/TypeRefs.js"
import {InstanceMapper} from "../../../src/api/worker/crypto/InstanceMapper"
import {EntityRestCache} from "../../../src/api/worker/rest/EntityRestCache"
import {QueuedBatch} from "../../../src/api/worker/search/EventQueue"
import {OutOfSyncError} from "../../../src/api/common/error/OutOfSyncError"
import {WorkerImpl} from "../../../../src/api/worker/WorkerImpl.js"
import {LoginFacadeImpl} from "../../../../src/api/worker/facades/LoginFacade.js"
import {createUser, User} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
import {InstanceMapper} from "../../../../src/api/worker/crypto/InstanceMapper.js"
import {EntityRestCache} from "../../../../src/api/worker/rest/EntityRestCache.js"
import {QueuedBatch} from "../../../../src/api/worker/search/EventQueue.js"
import {OutOfSyncError} from "../../../../src/api/common/error/OutOfSyncError.js"
import {matchers, object, verify, when} from "testdouble"
import {MailFacade} from "../../../src/api/worker/facades/MailFacade"
import {Indexer} from "../../../src/api/worker/search/Indexer"
import {createWebsocketEntityData, WebsocketEntityData} from "../../../src/api/entities/sys/TypeRefs.js"
import {createWebsocketCounterData, WebsocketCounterData} from "../../../src/api/entities/sys/TypeRefs.js"
import {createWebsocketCounterValue} from "../../../src/api/entities/sys/TypeRefs.js"
import {createEntityEventBatch, EntityEventBatchTypeRef} from "../../../src/api/entities/sys/TypeRefs.js"
import {getElementId} from "../../../src/api/common/utils/EntityUtils"
import {SleepDetector} from "../../../src/api/worker/utils/SleepDetector"
import {WsConnectionState} from "../../../src/api/main/WorkerClient"
import {MailFacade} from "../../../../src/api/worker/facades/MailFacade.js"
import {Indexer} from "../../../../src/api/worker/search/Indexer.js"
import {createWebsocketEntityData, WebsocketEntityData} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createWebsocketCounterData, WebsocketCounterData} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createWebsocketCounterValue} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityEventBatch, EntityEventBatchTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {getElementId} from "../../../../src/api/common/utils/EntityUtils.js"
import {SleepDetector} from "../../../../src/api/worker/utils/SleepDetector.js"
import {WsConnectionState} from "../../../../src/api/main/WorkerClient.js"
o.spec("EventBusClient test", function () {
let ebc: EventBusClient

View file

@ -1,8 +1,8 @@
import o from "ospec"
import {SuspensionHandler} from "../../../src/api/worker/SuspensionHandler"
import {SuspensionHandler} from "../../../../src/api/worker/SuspensionHandler.js"
import {deferWithHandler, downcast} from "@tutao/tutanota-utils"
import type {WorkerImpl} from "../../../src/api/worker/WorkerImpl"
import type {SystemTimeout} from "../../../src/api/common/utils/Scheduler.js"
import type {WorkerImpl} from "../../../../src/api/worker/WorkerImpl.js"
import type {SystemTimeout} from "../../../../src/api/common/utils/Scheduler.js"
o.spec("SuspensionHandler test", () => {
let suspensionHandler

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {urlify} from "../../../src/api/worker/Urlifier"
import {urlify} from "../../../../src/api/worker/Urlifier.js"
o.spec("UrlifierTest", function () {
o(" validHtmlLinks", function () {
// html links

View file

@ -28,8 +28,8 @@ import {
uint8ArrayToHex,
utf8Uint8ArrayToString,
} from "@tutao/tutanota-utils"
import {testData} from "./CompatibilityTestData"
import {uncompress} from "../../../src/api/worker/Compression"
import {testData} from "./CompatibilityTestData.js"
import {uncompress} from "../../../../../src/api/worker/Compression.js"
const originalRandom = random.generateRandomData
o.spec("crypto compatibility", function () {
o.afterEach(function () {

View file

@ -9,12 +9,12 @@ import {
uint8ArrayToBase64,
utf8Uint8ArrayToString,
} from "@tutao/tutanota-utils"
import {CryptoFacade, CryptoFacadeImpl} from "../../../src/api/worker/crypto/CryptoFacade"
import {ProgrammingError} from "../../../src/api/common/error/ProgrammingError"
import {Cardinality, ValueType} from "../../../src/api/common/EntityConstants"
import {BucketPermissionType, PermissionType} from "../../../src/api/common/TutanotaConstants"
import type {Mail} from "../../../src/api/entities/tutanota/TypeRefs.js"
import * as Contact from "../../../src/api/entities/tutanota/TypeRefs.js"
import {CryptoFacade, CryptoFacadeImpl} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {ProgrammingError} from "../../../../../src/api/common/error/ProgrammingError.js"
import {Cardinality, ValueType} from "../../../../../src/api/common/EntityConstants.js"
import {BucketPermissionType, PermissionType} from "../../../../../src/api/common/TutanotaConstants.js"
import type {Mail} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import * as Contact from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {
ContactTypeRef,
createBirthday,
@ -22,8 +22,8 @@ import {
createContactAddress,
MailAddressTypeRef,
MailTypeRef
} from "../../../src/api/entities/tutanota/TypeRefs.js"
import * as UserIdReturn from "../../../src/api/entities/sys/TypeRefs.js"
} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import * as UserIdReturn from "../../../../../src/api/entities/sys/TypeRefs.js"
import {
BucketPermissionTypeRef,
createBucket,
@ -39,11 +39,11 @@ import {
PermissionTypeRef,
UpdatePermissionKeyData,
UserIdReturnTypeRef
} from "../../../src/api/entities/sys/TypeRefs.js"
} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {LoginFacadeImpl} from "../../../src/api/worker/facades/LoginFacade"
import {RestClient} from "../../../src/api/worker/rest/RestClient"
import {EntityClient} from "../../../src/api/common/EntityClient"
import {LoginFacadeImpl} from "../../../../../src/api/worker/facades/LoginFacade.js"
import {RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
import {EntityClient} from "../../../../../src/api/common/EntityClient.js"
import {
aes128Decrypt,
aes128Encrypt,
@ -57,15 +57,15 @@ import {
IV_BYTE_LENGTH,
random
} from "@tutao/tutanota-crypto"
import {RsaWeb} from "../../../src/api/worker/crypto/RsaImplementation"
import {decryptValue, encryptValue, InstanceMapper} from "../../../src/api/worker/crypto/InstanceMapper"
import {locator} from "../../../src/api/worker/WorkerLocator"
import type {ModelValue} from "../../../src/api/common/EntityTypes"
import {IServiceExecutor} from "../../../src/api/common/ServiceRequest"
import {RsaWeb} from "../../../../../src/api/worker/crypto/RsaImplementation.js"
import {decryptValue, encryptValue, InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {locator} from "../../../../../src/api/worker/WorkerLocator.js"
import type {ModelValue} from "../../../../../src/api/common/EntityTypes.js"
import {IServiceExecutor} from "../../../../../src/api/common/ServiceRequest.js"
import {matchers, object, verify, when} from "testdouble"
import {UpdatePermissionKeyService} from "../../../src/api/entities/sys/Services.js"
import {getListId, isSameId} from "../../../src/api/common/utils/EntityUtils"
import {resolveTypeReference} from "../../../src/api/common/EntityFunctions"
import {UpdatePermissionKeyService} from "../../../../../src/api/entities/sys/Services.js"
import {getListId, isSameId} from "../../../../../src/api/common/utils/EntityUtils.js"
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
const rsa = new RsaWeb()
const rsaEncrypt = rsa.encrypt

View file

@ -1,27 +1,27 @@
import o from "ospec"
import {BLOB_SERVICE_REST_PATH, BlobFacade} from "../../../../src/api/worker/facades/BlobFacade.js"
import {LoginFacadeImpl} from "../../../../src/api/worker/facades/LoginFacade"
import {RestClient} from "../../../../src/api/worker/rest/RestClient"
import {SuspensionHandler} from "../../../../src/api/worker/SuspensionHandler"
import {NativeFileApp} from "../../../../src/native/common/FileApp"
import {AesApp} from "../../../../src/native/worker/AesApp"
import {InstanceMapper} from "../../../../src/api/worker/crypto/InstanceMapper"
import {ArchiveDataType, MAX_BLOB_SIZE_BYTES} from "../../../../src/api/common/TutanotaConstants"
import {createBlob, createBlobReferenceTokenWrapper} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createFile, createMailBody} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {ServiceExecutor} from "../../../../src/api/worker/rest/ServiceExecutor"
import {BLOB_SERVICE_REST_PATH, BlobFacade} from "../../../../../src/api/worker/facades/BlobFacade.js"
import {LoginFacadeImpl} from "../../../../../src/api/worker/facades/LoginFacade.js"
import {RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
import {SuspensionHandler} from "../../../../../src/api/worker/SuspensionHandler.js"
import {NativeFileApp} from "../../../../../src/native/common/FileApp.js"
import {AesApp} from "../../../../../src/native/worker/AesApp.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {ArchiveDataType, MAX_BLOB_SIZE_BYTES} from "../../../../../src/api/common/TutanotaConstants.js"
import {createBlob, createBlobReferenceTokenWrapper} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createFile, createMailBody} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {ServiceExecutor} from "../../../../../src/api/worker/rest/ServiceExecutor.js"
import {func, instance, matchers, object, verify, when} from "testdouble"
import {HttpMethod} from "../../../../src/api/common/EntityFunctions"
import {BlobAccessTokenService} from "../../../../src/api/entities/storage/Services"
import {getElementId, getEtId, getListId} from "../../../../src/api/common/utils/EntityUtils"
import {HttpMethod} from "../../../../../src/api/common/EntityFunctions.js"
import {BlobAccessTokenService} from "../../../../../src/api/entities/storage/Services.js"
import {getElementId, getEtId, getListId} from "../../../../../src/api/common/utils/EntityUtils.js"
import {aes128Decrypt, aes128Encrypt, aes128RandomKey, generateIV, sha256Hash} from "@tutao/tutanota-crypto"
import {arrayEquals, Mapper, stringToBase64, uint8ArrayToBase64} from "@tutao/tutanota-utils"
import {Mode} from "../../../../src/api/common/Env"
import {CryptoFacade} from "../../../../src/api/worker/crypto/CryptoFacade"
import {FileReference} from "../../../../src/api/common/utils/FileUtils"
import {Mode} from "../../../../../src/api/common/Env.js"
import {CryptoFacade} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {FileReference} from "../../../../../src/api/common/utils/FileUtils.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {ProgrammingError} from "../../../../src/api/common/error/ProgrammingError"
import {ConnectionError} from "../../../../src/api/common/error/RestError"
import {ProgrammingError} from "../../../../../src/api/common/error/ProgrammingError.js"
import {ConnectionError} from "../../../../../src/api/common/error/RestError.js"
import {
createBlobAccessTokenPostIn,
createBlobAccessTokenPostOut,
@ -31,8 +31,8 @@ import {
createBlobServerUrl,
createBlobWriteData,
createInstanceId
} from "../../../../src/api/entities/storage/TypeRefs"
import storageModelInfo from "../../../../src/api/entities/storage/ModelInfo"
} from "../../../../../src/api/entities/storage/TypeRefs.js"
import storageModelInfo from "../../../../../src/api/entities/storage/ModelInfo.js"
const {anything, captor} = matchers

View file

@ -1,32 +1,32 @@
import o from "ospec"
import type {EventWithAlarmInfos} from "../../../../src/api/worker/facades/CalendarFacade"
import {CalendarFacade} from "../../../../src/api/worker/facades/CalendarFacade"
import {EntityRestClientMock} from "../EntityRestClientMock"
import {EntityRestCache} from "../../../../src/api/worker/rest/EntityRestCache"
import type {EventWithAlarmInfos} from "../../../../../src/api/worker/facades/CalendarFacade.js"
import {CalendarFacade} from "../../../../../src/api/worker/facades/CalendarFacade.js"
import {EntityRestClientMock} from "../rest/EntityRestClientMock.js"
import {EntityRestCache} from "../../../../../src/api/worker/rest/EntityRestCache.js"
import {downcast, isSameTypeRef, neverNull, noOp} from "@tutao/tutanota-utils"
import {LoginFacadeImpl} from "../../../../src/api/worker/facades/LoginFacade"
import type {UserAlarmInfo} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfo, UserAlarmInfoTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createCalendarEventRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {getElementId, getLetId, getListId} from "../../../../src/api/common/utils/EntityUtils"
import type {AlarmInfo} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createAlarmInfo} from "../../../../src/api/entities/sys/TypeRefs.js"
import type {CalendarEvent} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {CalendarEventTypeRef, createCalendarEvent} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {User} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createUser} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfoListType} from "../../../../src/api/entities/sys/TypeRefs.js"
import {ProgressMonitor} from "../../../../src/api/common/utils/ProgressMonitor"
import {createPushIdentifierList} from "../../../../src/api/entities/sys/TypeRefs.js"
import {LoginFacadeImpl} from "../../../../../src/api/worker/facades/LoginFacade.js"
import type {UserAlarmInfo} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfo, UserAlarmInfoTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createCalendarEventRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {getElementId, getLetId, getListId} from "../../../../../src/api/common/utils/EntityUtils.js"
import type {AlarmInfo} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createAlarmInfo} from "../../../../../src/api/entities/sys/TypeRefs.js"
import type {CalendarEvent} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {CalendarEventTypeRef, createCalendarEvent} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import type {User} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfoListType} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {ProgressMonitor} from "../../../../../src/api/common/utils/ProgressMonitor.js"
import {createPushIdentifierList} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {assertThrows, mockAttribute, unmockAttribute} from "@tutao/tutanota-test-utils"
import {ImportError} from "../../../../src/api/common/error/ImportError"
import {PushIdentifierTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {SetupMultipleError} from "../../../../src/api/common/error/SetupMultipleError"
import {InstanceMapper} from "../../../../src/api/worker/crypto/InstanceMapper"
import {GroupManagementFacadeImpl} from "../../../../src/api/worker/facades/GroupManagementFacade";
import {ImportError} from "../../../../../src/api/common/error/ImportError.js"
import {PushIdentifierTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {SetupMultipleError} from "../../../../../src/api/common/error/SetupMultipleError.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {GroupManagementFacadeImpl} from "../../../../../src/api/worker/facades/GroupManagementFacade.js";
import {object} from "testdouble"
import {IServiceExecutor} from "../../../../src/api/common/ServiceRequest"
import {CryptoFacade} from "../../../../src/api/worker/crypto/CryptoFacade"
import {IServiceExecutor} from "../../../../../src/api/common/ServiceRequest.js"
import {CryptoFacade} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
o.spec("CalendarFacadeTest", async function () {

View file

@ -1,9 +1,9 @@
import o from "ospec"
import {ConfigurationDatabase, encryptItem} from "../../../src/api/worker/facades/ConfigurationDatabase"
import {ConfigurationDatabase, encryptItem} from "../../../../../src/api/worker/facades/ConfigurationDatabase.js"
import {downcast} from "@tutao/tutanota-utils"
import {DbStub} from "./search/DbStub"
import {ExternalImageRule} from "../../../src/api/common/TutanotaConstants"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
import {DbStub} from "../search/DbStub.js"
import {ExternalImageRule} from "../../../../../src/api/common/TutanotaConstants.js"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {aes256RandomKey, IV_BYTE_LENGTH, random} from "@tutao/tutanota-crypto"
o.spec("ConfigurationDbTest", function () {

View file

@ -1,27 +1,27 @@
import o from "ospec"
import {LoginFacadeImpl} from "../../../../src/api/worker/facades/LoginFacade"
import {RestClient} from "../../../../src/api/worker/rest/RestClient"
import {WorkerImpl} from "../../../../src/api/worker/WorkerImpl"
import {InstanceMapper} from "../../../../src/api/worker/crypto/InstanceMapper"
import {EntityClient} from "../../../../src/api/common/EntityClient"
import {CryptoFacade, encryptString} from "../../../../src/api/worker/crypto/CryptoFacade"
import {LateInitializedCacheStorage} from "../../../../src/api/worker/rest/CacheStorageProxy"
import {LoginFacadeImpl} from "../../../../../src/api/worker/facades/LoginFacade.js"
import {RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
import {WorkerImpl} from "../../../../../src/api/worker/WorkerImpl.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {EntityClient} from "../../../../../src/api/common/EntityClient.js"
import {CryptoFacade, encryptString} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {LateInitializedCacheStorage} from "../../../../../src/api/worker/rest/CacheStorageProxy.js"
import {func, instance, matchers, object, verify, when} from "testdouble"
import {SessionType} from "../../../../src/api/common/SessionType"
import {HttpMethod} from "../../../../src/api/common/EntityFunctions"
import {createCreateSessionReturn} from "../../../../src/api/entities/sys/TypeRefs.js"
import type {SecondFactorAuthHandler} from "../../../../src/misc/2fa/SecondFactorHandler.js"
import {createSaltReturn} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createUser, UserTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {SessionType} from "../../../../../src/api/common/SessionType.js"
import {HttpMethod} from "../../../../../src/api/common/EntityFunctions.js"
import {createCreateSessionReturn} from "../../../../../src/api/entities/sys/TypeRefs.js"
import type {SecondFactorAuthHandler} from "../../../../../src/misc/2fa/SecondFactorHandler.js"
import {createSaltReturn} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createUser, UserTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createAuthVerifier, encryptKey, generateKeyFromPassphrase, KeyLength, keyToBase64, sha256Hash} from "@tutao/tutanota-crypto"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createTutanotaProperties, TutanotaPropertiesTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {Indexer} from "../../../../src/api/worker/search/Indexer"
import {EventBusClient} from "../../../../src/api/worker/EventBusClient"
import {Credentials} from "../../../../src/misc/credentials/Credentials"
import {createGroupMembership} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createTutanotaProperties, TutanotaPropertiesTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {Indexer} from "../../../../../src/api/worker/search/Indexer.js"
import {EventBusClient} from "../../../../../src/api/worker/EventBusClient.js"
import {Credentials} from "../../../../../src/misc/credentials/Credentials.js"
import {uint8ArrayToBase64} from "@tutao/tutanota-utils"
import {IServiceExecutor} from "../../../../src/api/common/ServiceRequest"
import {SaltService, SessionService} from "../../../../src/api/entities/sys/Services.js"
import {IServiceExecutor} from "../../../../../src/api/common/ServiceRequest.js"
import {SaltService, SessionService} from "../../../../../src/api/entities/sys/Services.js"
const {anything} = matchers

View file

@ -1,17 +1,17 @@
import o from "ospec"
import {MailFacade, phishingMarkerValue} from "../../../../src/api/worker/facades/MailFacade"
import {MailFacade, phishingMarkerValue} from "../../../../../src/api/worker/facades/MailFacade.js"
import {downcast} from "@tutao/tutanota-utils"
import {createMail} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailAddress} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {MailAuthenticationStatus, ReportedMailFieldType} from "../../../../src/api/common/TutanotaConstants"
import {createPhishingMarker} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMail} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailAddress} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {MailAuthenticationStatus, ReportedMailFieldType} from "../../../../../src/api/common/TutanotaConstants.js"
import {createPhishingMarker} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {object} from "testdouble"
import {CryptoFacade} from "../../../../src/api/worker/crypto/CryptoFacade"
import {IServiceExecutor} from "../../../../src/api/common/ServiceRequest"
import {LoginFacade, LoginFacadeImpl} from "../../../../src/api/worker/facades/LoginFacade"
import {FileFacade} from "../../../../src/api/worker/facades/FileFacade"
import {EntityClient} from "../../../../src/api/common/EntityClient"
import {BlobFacade} from "../../../../src/api/worker/facades/BlobFacade"
import {CryptoFacade} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {IServiceExecutor} from "../../../../../src/api/common/ServiceRequest.js"
import {LoginFacade, LoginFacadeImpl} from "../../../../../src/api/worker/facades/LoginFacade.js"
import {FileFacade} from "../../../../../src/api/worker/facades/FileFacade.js"
import {EntityClient} from "../../../../../src/api/common/EntityClient.js"
import {BlobFacade} from "../../../../../src/api/worker/facades/BlobFacade.js"
o.spec("MailFacade test", function () {
let facade: MailFacade

View file

@ -1,6 +1,6 @@
import o from "ospec"
import * as cborg from "cborg"
import {customTypeDecoders, customTypeEncoders} from "../../../src/api/worker/rest/OfflineStorage"
import {customTypeDecoders, customTypeEncoders} from "../../../../../src/api/worker/rest/OfflineStorage.js"
o.spec("CborDateEncoder", function () {
o("encode and decode date", function () {

View file

@ -1,9 +1,9 @@
import o from "ospec"
import {CacheStorage, EntityRestCache, expandId, EXTEND_RANGE_MIN_CHUNK_SIZE} from "../../../src/api/worker/rest/EntityRestCache"
import type {Mail, MailBody} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {ContactTypeRef, createContact, createMail, createMailBody, MailBodyTypeRef, MailTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {OperationType} from "../../../src/api/common/TutanotaConstants"
import type {EntityUpdate} from "../../../src/api/entities/sys/TypeRefs.js"
import {CacheStorage, EntityRestCache, expandId, EXTEND_RANGE_MIN_CHUNK_SIZE} from "../../../../../src/api/worker/rest/EntityRestCache.js"
import type {Mail, MailBody} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {ContactTypeRef, createContact, createMail, createMailBody, MailBodyTypeRef, MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {OperationType} from "../../../../../src/api/common/TutanotaConstants.js"
import type {EntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {
createCustomer,
createEntityUpdate,
@ -12,25 +12,25 @@ import {
CustomerTypeRef,
ExternalUserReferenceTypeRef,
PermissionTypeRef
} from "../../../src/api/entities/sys/TypeRefs.js"
} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {arrayOf, assertNotNull, clone, downcast, isSameTypeRef, neverNull, TypeRef} from "@tutao/tutanota-utils"
import {NotAuthorizedError, NotFoundError} from "../../../src/api/common/error/RestError"
import {EntityRestClient, typeRefToPath} from "../../../src/api/worker/rest/EntityRestClient"
import {CUSTOM_MIN_ID, GENERATED_MAX_ID, GENERATED_MIN_ID, getElementId, getListId, stringToCustomId} from "../../../src/api/common/utils/EntityUtils";
import {NotAuthorizedError, NotFoundError} from "../../../../../src/api/common/error/RestError.js"
import {EntityRestClient, typeRefToPath} from "../../../../../src/api/worker/rest/EntityRestClient.js"
import {CUSTOM_MIN_ID, GENERATED_MAX_ID, GENERATED_MIN_ID, getElementId, getListId, stringToCustomId} from "../../../../../src/api/common/utils/EntityUtils.js";
import {assertThrows, mockAttribute, unmockAttribute} from "@tutao/tutanota-test-utils"
import {EphemeralCacheStorage} from "../../../src/api/worker/rest/EphemeralCacheStorage"
import {QueuedBatch} from "../../../src/api/worker/search/EventQueue"
import {EphemeralCacheStorage} from "../../../../../src/api/worker/rest/EphemeralCacheStorage.js"
import {QueuedBatch} from "../../../../../src/api/worker/search/EventQueue.js"
import {matchers, object, when} from "testdouble"
import {OfflineStorage} from "../../../src/api/worker/rest/OfflineStorage"
import {RestClient} from "../../../src/api/worker/rest/RestClient"
import {OfflineStorage} from "../../../../../src/api/worker/rest/OfflineStorage.js"
import {RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
const {anything} = matchers
const offlineDatabaseTestKey = [3957386659, 354339016, 3786337319, 3366334248]
async function getOfflineStorage(userId: Id): Promise<CacheStorage> {
const {OfflineDbFacade} = await import("../../../src/desktop/db/OfflineDbFacade.js")
const {OfflineDb} = await import("../../../src/desktop/db/OfflineDb.js")
const {OfflineDbFacade} = await import("../../../../../src/desktop/db/OfflineDbFacade.js")
const {OfflineDb} = await import("../../../../../src/desktop/db/OfflineDb.js")
const offlineDbFactory = {
async create(userId: string, key) {
assertNotNull(userId)

View file

@ -1,4 +1,4 @@
import {EntityRestClient, getIds} from "../../../src/api/worker/rest/EntityRestClient"
import {EntityRestClient, getIds} from "../../../../../src/api/worker/rest/EntityRestClient.js"
import {
compareNewestFirst,
compareOldestFirst,
@ -8,12 +8,12 @@ import {
getListId,
listIdPart,
timestampToGeneratedId,
} from "../../../src/api/common/utils/EntityUtils"
import {_verifyType, resolveTypeReference} from "../../../src/api/common/EntityFunctions"
import {NotFoundError} from "../../../src/api/common/error/RestError"
} from "../../../../../src/api/common/utils/EntityUtils.js"
import {_verifyType, resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
import {NotFoundError} from "../../../../../src/api/common/error/RestError.js"
import {downcast, TypeRef} from "@tutao/tutanota-utils"
import type {ElementEntity, ListElementEntity, SomeEntity} from "../../../src/api/common/EntityTypes"
import {InstanceMapper} from "../../../src/api/worker/crypto/InstanceMapper"
import type {ElementEntity, ListElementEntity, SomeEntity} from "../../../../../src/api/common/EntityTypes.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
export class EntityRestClientMock extends EntityRestClient {
_entities: Record<Id, ElementEntity | Error> = {}

View file

@ -1,19 +1,19 @@
import o from "ospec"
import {Contact, ContactTypeRef, createContact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {BadRequestError, InternalServerError, PayloadTooLargeError} from "../../../src/api/common/error/RestError"
import {Contact, ContactTypeRef, createContact} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {BadRequestError, InternalServerError, PayloadTooLargeError} from "../../../../../src/api/common/error/RestError.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {SetupMultipleError} from "../../../src/api/common/error/SetupMultipleError"
import {HttpMethod, MediaType, resolveTypeReference} from "../../../src/api/common/EntityFunctions"
import {createCustomer, CustomerTypeRef} from "../../../src/api/entities/sys/TypeRefs.js"
import {EntityRestClient, typeRefToPath} from "../../../src/api/worker/rest/EntityRestClient"
import {RestClient} from "../../../src/api/worker/rest/RestClient"
import type {CryptoFacade} from "../../../src/api/worker/crypto/CryptoFacade"
import {createInternalRecipientKeyData} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {InstanceMapper} from "../../../src/api/worker/crypto/InstanceMapper"
import {CalendarEventTypeRef} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {SetupMultipleError} from "../../../../../src/api/common/error/SetupMultipleError.js"
import {HttpMethod, MediaType, resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
import {createCustomer, CustomerTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {EntityRestClient, typeRefToPath} from "../../../../../src/api/worker/rest/EntityRestClient.js"
import {RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
import type {CryptoFacade} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {createInternalRecipientKeyData} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {CalendarEventTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {matchers, object, verify, when} from "testdouble"
import tutanotaModelInfo from "../../../src/api/entities/tutanota/ModelInfo"
import sysModelInfo from "../../../src/api/entities/sys/ModelInfo"
import tutanotaModelInfo from "../../../../../src/api/entities/tutanota/ModelInfo.js"
import sysModelInfo from "../../../../../src/api/entities/sys/ModelInfo.js"
const {anything} = matchers

View file

@ -1,10 +1,10 @@
import o from "ospec"
import {verify} from "@tutao/tutanota-test-utils"
import {OfflineStorage} from "../../../../src/api/worker/rest/OfflineStorage"
import {OfflineDbFacade} from "../../../../src/desktop/db/OfflineDbFacade"
import {OfflineStorage} from "../../../../../src/api/worker/rest/OfflineStorage.js"
import {OfflineDbFacade} from "../../../../../src/desktop/db/OfflineDbFacade.js"
import {matchers, object, when} from "testdouble"
import * as cborg from "cborg"
import {modelInfos} from "../../../../src/api/common/EntityFunctions"
import {modelInfos} from "../../../../../src/api/common/EntityFunctions.js"
o.spec("OfflineStorage", function () {
o("when initialized and runtime version matches stored one database is not purged", async function () {

View file

@ -1,12 +1,13 @@
import o from "ospec"
import {isSuspensionResponse, RestClient} from "../../../src/api/worker/rest/RestClient"
import {HttpMethod, MediaType} from "../../../src/api/common/EntityFunctions"
import {ResourceError} from "../../../src/api/common/error/RestError"
import {isSuspensionResponse, RestClient} from "../../../../../src/api/worker/rest/RestClient.js"
import {HttpMethod, MediaType} from "../../../../../src/api/common/EntityFunctions.js"
import {ResourceError} from "../../../../../src/api/common/error/RestError.js"
import {downcast} from "@tutao/tutanota-utils"
import http from "http";
const SERVER_TIME_IN_HEADER = "Mon, 12 Jul 2021 13:18:39 GMT"
const SERVER_TIMESTAMP = 1626095919000
o.spec("rest client", function () {
env.staticUrl = "http://localhost:3000"
const suspensionHandlerMock = {

View file

@ -1,16 +1,16 @@
import o from "ospec"
import {ServiceExecutor} from "../../../../src/api/worker/rest/ServiceExecutor.js"
import {RestClient, RestClientOptions} from "../../../../src/api/worker/rest/RestClient"
import {InstanceMapper} from "../../../../src/api/worker/crypto/InstanceMapper"
import {CryptoFacade} from "../../../../src/api/worker/crypto/CryptoFacade"
import {ServiceExecutor} from "../../../../../src/api/worker/rest/ServiceExecutor.js"
import {RestClient, RestClientOptions} from "../../../../../src/api/worker/rest/RestClient.js"
import {InstanceMapper} from "../../../../../src/api/worker/crypto/InstanceMapper.js"
import {CryptoFacade} from "../../../../../src/api/worker/crypto/CryptoFacade.js"
import {matchers, object, when} from "testdouble"
import {DeleteService, GetService, PostService, PutService} from "../../../../src/api/common/ServiceRequest"
import {createSaltData, SaltDataTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {HttpMethod, MediaType, resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {DeleteService, GetService, PostService, PutService} from "../../../../../src/api/common/ServiceRequest.js"
import {createSaltData, SaltDataTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {HttpMethod, MediaType, resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
import {deepEqual} from "@tutao/tutanota-utils"
import {assertThrows, verify} from "@tutao/tutanota-test-utils"
import {createGiftCardCreateData, GiftCardCreateDataTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {ProgrammingError} from "../../../../src/api/common/error/ProgrammingError"
import {createGiftCardCreateData, GiftCardCreateDataTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {ProgrammingError} from "../../../../../src/api/common/error/ProgrammingError.js"
const {anything} = matchers

View file

@ -1,23 +1,23 @@
import o from "ospec"
import {ContactTypeRef, createContact} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {ContactIndexer} from "../../../../src/api/worker/search/ContactIndexer"
import {createContactAddress} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactMailAddress} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactPhoneNumber} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactSocialId} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {NotAuthorizedError, NotFoundError} from "../../../../src/api/common/error/RestError"
import {ContactListTypeRef, createContactList} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {DbTransaction} from "../../../../src/api/worker/search/DbFacade"
import {FULL_INDEXED_TIMESTAMP, NOTHING_INDEXED_TIMESTAMP, OperationType} from "../../../../src/api/common/TutanotaConstants"
import {_createNewIndexUpdate, encryptIndexKeyBase64, typeRefToTypeInfo} from "../../../../src/api/worker/search/IndexUtils"
import type {EntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {makeCore} from "../../TestUtils"
import {ContactTypeRef, createContact} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {ContactIndexer} from "../../../../../src/api/worker/search/ContactIndexer.js"
import {createContactAddress} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactMailAddress} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactPhoneNumber} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactSocialId} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {NotAuthorizedError, NotFoundError} from "../../../../../src/api/common/error/RestError.js"
import {ContactListTypeRef, createContactList} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {DbTransaction} from "../../../../../src/api/worker/search/DbFacade.js"
import {FULL_INDEXED_TIMESTAMP, NOTHING_INDEXED_TIMESTAMP, OperationType} from "../../../../../src/api/common/TutanotaConstants.js"
import {_createNewIndexUpdate, encryptIndexKeyBase64, typeRefToTypeInfo} from "../../../../../src/api/worker/search/IndexUtils.js"
import type {EntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {makeCore} from "../../../TestUtils.js"
import {downcast} from "@tutao/tutanota-utils"
import {isSameId} from "../../../../src/api/common/utils/EntityUtils";
import {GroupDataOS} from "../../../../src/api/worker/search/Indexer"
import {isSameId} from "../../../../../src/api/common/utils/EntityUtils.js";
import {GroupDataOS} from "../../../../../src/api/worker/search/Indexer.js"
import {fixedIv} from "@tutao/tutanota-crypto"
import {resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
const dbMock: any = {iv: fixedIv}

View file

@ -1,7 +1,7 @@
import type {DbKey, ObjectStoreName} from "../../../../src/api/worker/search/DbFacade"
import {DbTransaction, osName} from "../../../../src/api/worker/search/DbFacade"
import type {DbKey, ObjectStoreName} from "../../../../../src/api/worker/search/DbFacade.js"
import {DbTransaction, osName} from "../../../../../src/api/worker/search/DbFacade.js"
import {downcast, neverNull} from "@tutao/tutanota-utils"
import type {IndexName} from "../../../../src/api/worker/search/Indexer";
import type {IndexName} from "../../../../../src/api/worker/search/Indexer.js";
import {
ElementDataOS,
GroupDataOS,
@ -9,7 +9,7 @@ import {
SearchIndexMetaDataOS,
SearchIndexOS,
SearchIndexWordsIndex
} from "../../../../src/api/worker/search/Indexer";
} from "../../../../../src/api/worker/search/Indexer.js";
export type Index = { [indexName: string]: string }

View file

@ -1,12 +1,12 @@
import o from "ospec"
import type {QueuedBatch} from "../../../../src/api/worker/search/EventQueue"
import {EventQueue} from "../../../../src/api/worker/search/EventQueue"
import type {EntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {OperationType} from "../../../../src/api/common/TutanotaConstants"
import type {QueuedBatch} from "../../../../../src/api/worker/search/EventQueue.js"
import {EventQueue} from "../../../../../src/api/worker/search/EventQueue.js"
import type {EntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {OperationType} from "../../../../../src/api/common/TutanotaConstants.js"
import {defer} from "@tutao/tutanota-utils"
import {ConnectionError} from "../../../../src/api/common/error/RestError"
import {MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {ConnectionError} from "../../../../../src/api/common/error/RestError.js"
import {MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {delay} from "@tutao/tutanota-utils"
o.spec("EventQueueTest", function () {

View file

@ -1,22 +1,22 @@
import o from "ospec"
import {createGroupInfo, GroupInfoTypeRef,} from "../../../../src/api/entities/sys/TypeRefs.js"
import {NotFoundError} from "../../../../src/api/common/error/RestError"
import type {Db} from "../../../../src/api/worker/search/SearchTypes"
import {FULL_INDEXED_TIMESTAMP, GroupType, NOTHING_INDEXED_TIMESTAMP, OperationType,} from "../../../../src/api/common/TutanotaConstants"
import {IndexerCore} from "../../../../src/api/worker/search/IndexerCore"
import {_createNewIndexUpdate, encryptIndexKeyBase64, typeRefToTypeInfo,} from "../../../../src/api/worker/search/IndexUtils"
import {GroupInfoIndexer} from "../../../../src/api/worker/search/GroupInfoIndexer"
import {createMailAddressAlias} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createUser} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createCustomer, CustomerTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
import type {EntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {browserDataStub} from "../../TestUtils"
import {isSameId} from "../../../../src/api/common/utils/EntityUtils"
import {GroupDataOS} from "../../../../src/api/worker/search/Indexer"
import {createGroupInfo, GroupInfoTypeRef,} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {NotFoundError} from "../../../../../src/api/common/error/RestError.js"
import type {Db} from "../../../../../src/api/worker/search/SearchTypes.js"
import {FULL_INDEXED_TIMESTAMP, GroupType, NOTHING_INDEXED_TIMESTAMP, OperationType,} from "../../../../../src/api/common/TutanotaConstants.js"
import {IndexerCore} from "../../../../../src/api/worker/search/IndexerCore.js"
import {_createNewIndexUpdate, encryptIndexKeyBase64, typeRefToTypeInfo,} from "../../../../../src/api/worker/search/IndexUtils.js"
import {GroupInfoIndexer} from "../../../../../src/api/worker/search/GroupInfoIndexer.js"
import {createMailAddressAlias} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createCustomer, CustomerTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../../src/api/entities/sys/TypeRefs.js"
import type {EntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {browserDataStub} from "../../../TestUtils.js"
import {isSameId} from "../../../../../src/api/common/utils/EntityUtils.js"
import {GroupDataOS} from "../../../../../src/api/worker/search/Indexer.js"
import {aes256RandomKey, fixedIv} from "@tutao/tutanota-crypto"
import {resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
const dbMock: any = {
iv: fixedIv,

View file

@ -13,21 +13,21 @@ import {
typeRefToTypeInfo,
userIsGlobalAdmin,
userIsLocalOrGlobalAdmin,
} from "../../../../src/api/worker/search/IndexUtils"
} from "../../../../../src/api/worker/search/IndexUtils.js"
import {base64ToUint8Array, utf8Uint8ArrayToString} from "@tutao/tutanota-utils"
import {concat} from "@tutao/tutanota-utils"
import type {SearchIndexEntry, SearchIndexMetaDataRow} from "../../../../src/api/worker/search/SearchTypes"
import {createUser, UserTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {ContactTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
import {GroupType, OperationType} from "../../../../src/api/common/TutanotaConstants"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {containsEventOfType} from "../../../../src/api/common/utils/Utils"
import {MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {SearchIndexEntry, SearchIndexMetaDataRow} from "../../../../../src/api/worker/search/SearchTypes.js"
import {createUser, UserTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {ContactTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createGroupMembership} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {GroupType, OperationType} from "../../../../../src/api/common/TutanotaConstants.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {containsEventOfType} from "../../../../../src/api/common/utils/Utils.js"
import {MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {byteLength} from "@tutao/tutanota-utils"
import {aes256Decrypt, aes256RandomKey, fixedIv} from "@tutao/tutanota-crypto"
import {EntityUpdateData} from "../../../../src/api/main/EventController";
import {resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {EntityUpdateData} from "../../../../../src/api/main/EventController.js";
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
o.spec("Index Utils", () => {
o("encryptIndexKey", function () {
let key = aes256RandomKey()

View file

@ -9,7 +9,7 @@ import type {
IndexUpdate,
SearchIndexEntry,
SearchIndexMetaDataRow,
} from "../../../../src/api/worker/search/SearchTypes"
} from "../../../../../src/api/worker/search/SearchTypes.js"
import {
_createNewIndexUpdate,
decryptIndexKey,
@ -20,23 +20,23 @@ import {
encryptMetaData,
getIdFromEncSearchIndexEntry,
typeRefToTypeInfo,
} from "../../../../src/api/worker/search/IndexUtils"
} from "../../../../../src/api/worker/search/IndexUtils.js"
import {base64ToUint8Array, concat, defer, downcast, neverNull, noOp, PromisableWrapper, uint8ArrayToBase64,} from "@tutao/tutanota-utils"
import {spy} from "@tutao/tutanota-test-utils"
import {MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {DbTransaction} from "../../../../src/api/worker/search/DbFacade"
import {appendBinaryBlocks} from "../../../../src/api/worker/search/SearchIndexEncoding"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {EventQueue} from "../../../../src/api/worker/search/EventQueue"
import {CancelledError} from "../../../../src/api/common/error/CancelledError"
import {createSearchIndexDbStub, DbStub, DbStubTransaction} from "./DbStub"
import {IndexerCore} from "../../../../src/api/worker/search/IndexerCore"
import {ContactTypeRef, createContact} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {elementIdPart, generatedIdToTimestamp, listIdPart, timestampToGeneratedId,} from "../../../../src/api/common/utils/EntityUtils"
import {ElementDataOS, GroupDataOS, SearchIndexMetaDataOS, SearchIndexOS,} from "../../../../src/api/worker/search/Indexer"
import {makeCore} from "../../TestUtils"
import {MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {DbTransaction} from "../../../../../src/api/worker/search/DbFacade.js"
import {appendBinaryBlocks} from "../../../../../src/api/worker/search/SearchIndexEncoding.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {EventQueue} from "../../../../../src/api/worker/search/EventQueue.js"
import {CancelledError} from "../../../../../src/api/common/error/CancelledError.js"
import {createSearchIndexDbStub, DbStub, DbStubTransaction} from "./DbStub.js"
import {IndexerCore} from "../../../../../src/api/worker/search/IndexerCore.js"
import {ContactTypeRef, createContact} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {elementIdPart, generatedIdToTimestamp, listIdPart, timestampToGeneratedId,} from "../../../../../src/api/common/utils/EntityUtils.js"
import {ElementDataOS, GroupDataOS, SearchIndexMetaDataOS, SearchIndexOS,} from "../../../../../src/api/worker/search/Indexer.js"
import {makeCore} from "../../../TestUtils.js"
import {aes256Decrypt, aes256Encrypt, aes256RandomKey, fixedIv, IV_BYTE_LENGTH, random} from "@tutao/tutanota-crypto"
import {resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
const mailTypeInfo = typeRefToTypeInfo(MailTypeRef)
const contactTypeInfo = typeRefToTypeInfo(ContactTypeRef)

View file

@ -1,25 +1,25 @@
import {createUser, UserTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
import {DbTransaction} from "../../../../src/api/worker/search/DbFacade"
import {ENTITY_EVENT_BATCH_TTL_DAYS, GroupType, NOTHING_INDEXED_TIMESTAMP, OperationType,} from "../../../../src/api/common/TutanotaConstants"
import {GroupDataOS, Indexer, Metadata, MetaDataOS} from "../../../../src/api/worker/search/Indexer"
import {createEntityEventBatch, EntityEventBatchTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {NotAuthorizedError} from "../../../../src/api/common/error/RestError"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {GroupInfoTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {ContactTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {OutOfSyncError} from "../../../../src/api/common/error/OutOfSyncError"
import {createUser, UserTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {DbTransaction} from "../../../../../src/api/worker/search/DbFacade.js"
import {ENTITY_EVENT_BATCH_TTL_DAYS, GroupType, NOTHING_INDEXED_TIMESTAMP, OperationType,} from "../../../../../src/api/common/TutanotaConstants.js"
import {GroupDataOS, Indexer, Metadata, MetaDataOS} from "../../../../../src/api/worker/search/Indexer.js"
import {createEntityEventBatch, EntityEventBatchTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {NotAuthorizedError} from "../../../../../src/api/common/error/RestError.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {GroupInfoTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {ContactTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {OutOfSyncError} from "../../../../../src/api/common/error/OutOfSyncError.js"
import {assertThrows, mock, spy} from "@tutao/tutanota-test-utils"
import {browserDataStub} from "../../TestUtils"
import type {QueuedBatch} from "../../../../src/api/worker/search/EventQueue"
import {EntityRestClient} from "../../../../src/api/worker/rest/EntityRestClient"
import {MembershipRemovedError} from "../../../../src/api/common/error/MembershipRemovedError"
import {WhitelabelChildTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {GENERATED_MAX_ID, generatedIdToTimestamp, getElementId, timestampToGeneratedId,} from "../../../../src/api/common/utils/EntityUtils"
import {browserDataStub} from "../../../TestUtils.js"
import type {QueuedBatch} from "../../../../../src/api/worker/search/EventQueue.js"
import {EntityRestClient} from "../../../../../src/api/worker/rest/EntityRestClient.js"
import {MembershipRemovedError} from "../../../../../src/api/common/error/MembershipRemovedError.js"
import {WhitelabelChildTypeRef} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {GENERATED_MAX_ID, generatedIdToTimestamp, getElementId, timestampToGeneratedId,} from "../../../../../src/api/common/utils/EntityUtils.js"
import {daysToMillis, defer, downcast, TypeRef} from "@tutao/tutanota-utils"
import {aes128RandomKey, aes256Encrypt, aes256RandomKey, decrypt256Key, encrypt256Key, fixedIv, IV_BYTE_LENGTH, random,} from "@tutao/tutanota-crypto"
import {EntityRestCache} from "../../../../src/api/worker/rest/EntityRestCache"
import {EntityRestCache} from "../../../../../src/api/worker/rest/EntityRestCache.js"
import o from "ospec"
const SERVER_TIME = new Date("1994-06-08").getTime()

View file

@ -1,56 +1,56 @@
import o from "ospec"
import {NotAuthorizedError} from "../../../../src/api/common/error/RestError"
import type {Db, ElementDataDbRow, IndexUpdate} from "../../../../src/api/worker/search/SearchTypes"
import {NotAuthorizedError} from "../../../../../src/api/common/error/RestError.js"
import type {Db, ElementDataDbRow, IndexUpdate} from "../../../../../src/api/worker/search/SearchTypes.js"
import {
_createNewIndexUpdate,
encryptIndexKeyBase64,
typeRefToTypeInfo,
} from "../../../../src/api/worker/search/IndexUtils"
} from "../../../../../src/api/worker/search/IndexUtils.js"
import {
FULL_INDEXED_TIMESTAMP,
GroupType,
MailState,
NOTHING_INDEXED_TIMESTAMP,
OperationType,
} from "../../../../src/api/common/TutanotaConstants"
import {IndexerCore} from "../../../../src/api/worker/search/IndexerCore"
import {createUser} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../src/api/entities/sys/TypeRefs.js"
} from "../../../../../src/api/common/TutanotaConstants.js"
import {IndexerCore} from "../../../../../src/api/worker/search/IndexerCore.js"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createGroupMembership} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {
_getCurrentIndexTimestamp,
INITIAL_MAIL_INDEX_INTERVAL_DAYS,
MailIndexer,
} from "../../../../src/api/worker/search/MailIndexer"
import type {Mail} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMail, MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {MailBody} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailBody} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {File as TutanotaFile} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createFile} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailAddress} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createEncryptedMailAddress} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {ElementDataOS, GroupDataOS, Metadata as MetaData, MetaDataOS} from "../../../../src/api/worker/search/Indexer"
import type {MailFolder} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailFolder} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {EntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../src/api/entities/sys/TypeRefs.js"
} from "../../../../../src/api/worker/search/MailIndexer.js"
import type {Mail} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMail, MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import type {MailBody} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailBody} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import type {File as TutanotaFile} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createFile} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailAddress} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createEncryptedMailAddress} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {ElementDataOS, GroupDataOS, Metadata as MetaData, MetaDataOS} from "../../../../../src/api/worker/search/Indexer.js"
import type {MailFolder} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailFolder} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import type {EntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {createEntityUpdate} from "../../../../../src/api/entities/sys/TypeRefs.js"
import {mock, spy} from "@tutao/tutanota-test-utils"
import {browserDataStub, makeCore} from "../../TestUtils"
import {browserDataStub, makeCore} from "../../../TestUtils.js"
import {downcast, getDayShifted, getStartOfDay, neverNull} from "@tutao/tutanota-utils"
import {EventQueue} from "../../../../src/api/worker/search/EventQueue"
import {createMailboxGroupRoot} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import type {MailBox} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailBox} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createSearchIndexDbStub} from "./DbStub"
import {WorkerImpl} from "../../../../src/api/worker/WorkerImpl"
import {getElementId, getListId, timestampToGeneratedId} from "../../../../src/api/common/utils/EntityUtils"
import {createMailFolderRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {EntityRestClientMock} from "../EntityRestClientMock"
import type {DateProvider} from "../../../../src/api/worker/DateProvider"
import {LocalTimeDateProvider} from "../../../../src/api/worker/DateProvider"
import {EventQueue} from "../../../../../src/api/worker/search/EventQueue.js"
import {createMailboxGroupRoot} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import type {MailBox} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailBox} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createSearchIndexDbStub} from "./DbStub.js"
import {WorkerImpl} from "../../../../../src/api/worker/WorkerImpl.js"
import {getElementId, getListId, timestampToGeneratedId} from "../../../../../src/api/common/utils/EntityUtils.js"
import {createMailFolderRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {EntityRestClientMock} from "../rest/EntityRestClientMock.js"
import type {DateProvider} from "../../../../../src/api/worker/DateProvider.js"
import {LocalTimeDateProvider} from "../../../../../src/api/worker/DateProvider.js"
import {aes256RandomKey, fixedIv} from "@tutao/tutanota-crypto"
import {EntityRestCache} from "../../../../src/api/worker/rest/EntityRestCache"
import {resolveTypeReference} from "../../../../src/api/common/EntityFunctions"
import {EntityRestCache} from "../../../../../src/api/worker/rest/EntityRestCache.js"
import {resolveTypeReference} from "../../../../../src/api/common/EntityFunctions.js"
class FixedDateProvider implements DateProvider {
now: number

View file

@ -1,22 +1,22 @@
import o from "ospec"
import {SearchFacade} from "../../../../src/api/worker/search/SearchFacade"
import {MailTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {createUser} from "../../../../src/api/entities/sys/TypeRefs.js"
import type {TypeInfo} from "../../../../src/api/worker/search/IndexUtils"
import {SearchFacade} from "../../../../../src/api/worker/search/SearchFacade.js"
import {MailTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {createUser} from "../../../../../src/api/entities/sys/TypeRefs.js"
import type {TypeInfo} from "../../../../../src/api/worker/search/IndexUtils.js"
import {
encryptIndexKeyBase64,
encryptIndexKeyUint8Array,
encryptMetaData,
encryptSearchIndexEntry,
typeRefToTypeInfo,
} from "../../../../src/api/worker/search/IndexUtils"
} from "../../../../../src/api/worker/search/IndexUtils.js"
import type {
ElementDataDbRow,
SearchIndexEntry,
SearchIndexMetaDataRow,
SearchRestriction,
} from "../../../../src/api/worker/search/SearchTypes"
import {ContactTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
} from "../../../../../src/api/worker/search/SearchTypes.js"
import {ContactTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {
compareOldestFirst,
elementIdPart,
@ -24,14 +24,14 @@ import {
generatedIdToTimestamp,
listIdPart,
timestampToGeneratedId,
} from "../../../../src/api/common/utils/EntityUtils"
} from "../../../../../src/api/common/utils/EntityUtils.js"
import {downcast, groupBy, numberRange, splitInChunks} from "@tutao/tutanota-utils"
import {appendBinaryBlocks} from "../../../../src/api/worker/search/SearchIndexEncoding"
import {createSearchIndexDbStub, DbStub, DbStubTransaction} from "./DbStub"
import type {BrowserData} from "../../../../src/misc/ClientConstants"
import {browserDataStub} from "../../TestUtils"
import {ElementDataOS, SearchIndexMetaDataOS, SearchIndexOS} from "../../../../src/api/worker/search/Indexer"
import type {Base64} from "@tutao/tutanota-utils/"
import {appendBinaryBlocks} from "../../../../../src/api/worker/search/SearchIndexEncoding.js"
import {createSearchIndexDbStub, DbStub, DbStubTransaction} from "./DbStub.js"
import type {BrowserData} from "../../../../../src/misc/ClientConstants.js"
import {browserDataStub} from "../../../TestUtils.js"
import {ElementDataOS, SearchIndexMetaDataOS, SearchIndexOS} from "../../../../../src/api/worker/search/Indexer.js"
import type {Base64} from "@tutao/tutanota-utils"
import {aes256RandomKey, fixedIv} from "@tutao/tutanota-crypto"
type SearchIndexEntryWithType = SearchIndexEntry & {
typeInfo: TypeInfo

View file

@ -8,7 +8,7 @@ import {
iterateBinaryBlocks,
numberOfBytes,
removeBinaryBlockRanges,
} from "../../../../src/api/worker/search/SearchIndexEncoding"
} from "../../../../../src/api/worker/search/SearchIndexEncoding.js"
import {spy as makeSpy} from "@tutao/tutanota-test-utils"
import {concat, flat} from "@tutao/tutanota-utils"
o.spec("SearchIndexEncoding test", function () {

View file

@ -2,9 +2,9 @@
* Created by bdeterding on 13.12.17.
*/
import o from "ospec"
import {ContactTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {SuggestionFacade} from "../../../../src/api/worker/search/SuggestionFacade"
import {SearchTermSuggestionsOS} from "../../../../src/api/worker/search/Indexer"
import {ContactTypeRef} from "../../../../../src/api/entities/tutanota/TypeRefs.js"
import {SuggestionFacade} from "../../../../../src/api/worker/search/SuggestionFacade.js"
import {SearchTermSuggestionsOS} from "../../../../../src/api/worker/search/Indexer.js"
import {downcast} from "@tutao/tutanota-utils"
import {aes256RandomKey, fixedIv} from "@tutao/tutanota-crypto"
o.spec("SuggestionFacade test", () => {

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {tokenize} from "../../../../src/api/worker/search/Tokenizer"
import {tokenize} from "../../../../../src/api/worker/search/Tokenizer.js"
o.spec("Tokenizer test", () => {
o("tokenize", () => {
o(tokenize("")).deepEquals([])

View file

@ -1,9 +1,9 @@
import o from "ospec"
import {CHECK_INTERVAL, SLEEP_INTERVAL, SleepDetector} from "../../../../src/api/worker/utils/SleepDetector.js"
import {SchedulerMock} from "../../TestUtils.js"
import {CHECK_INTERVAL, SLEEP_INTERVAL, SleepDetector} from "../../../../../src/api/worker/utils/SleepDetector.js"
import {SchedulerMock} from "../../../TestUtils.js"
import {func, object, verify, when} from "testdouble"
import {assertNotNull} from "@tutao/tutanota-utils"
import {DateProvider} from "../../../../src/api/common/DateProvider.js"
import {DateProvider} from "../../../../../src/api/common/DateProvider.js"
o.spec("SleepDetector", function () {
let scheduler: SchedulerMock

View file

@ -0,0 +1,98 @@
// @ts-nocheck
globalThis.isBrowser = typeof window !== "undefined"
globalThis.mocks = {}
;(async function () {
if (globalThis.isBrowser) {
await setupBrowser()
} else {
await setupNode()
}
window.tutao = {
appState: {
prefixWithoutFile: "./"
}
}
import('../tests/Suite.js')
})()
const noOp = () => {
}
function setupBrowser() {
/**
* runs this test exclusively on browsers (not nodec)
*/
window.browser = (func) => func
/**
* runs this test exclusively on node (not browsers)
*/
window.node = () => noOp
}
async function setupNode() {
/**
* runs this test exclusively on browsers (not node)
*/
globalThis.browser = () => noOp
/**
* runs this test exclusively on node (not browsers)
*/
globalThis.node = (func) => func
const browserMock = await import("mithril/test-utils/browserMock.js")
globalThis.window = browserMock.default()
globalThis.window.getElementsByTagName = function () {
} // for styles.js
globalThis.window.location = {hostname: "tutanota.com", search: "", href: "http://tutanota.com"}
globalThis.window.document.addEventListener = function () {
}
globalThis.document = globalThis.window.document
globalThis.navigator = globalThis.window.navigator
const local = {}
globalThis.localStorage = {
getItem: key => local[key],
setItem: (key, value) => local[key] = value
}
globalThis.requestAnimationFrame = globalThis.requestAnimationFrame || (callback => setTimeout(callback, 10))
globalThis.btoa = str => Buffer.from(str, 'binary').toString('base64')
globalThis.atob = b64Encoded => Buffer.from(b64Encoded, 'base64').toString('binary')
globalThis.WebSocket = noOp
const nowOffset = Date.now();
globalThis.performance = {
now: function () {
return Date.now() - nowOffset;
}
}
globalThis.performance = {
now: Date.now,
mark: noOp,
measure: noOp,
}
const crypto = await import("crypto")
globalThis.crypto = {
getRandomValues: function (bytes) {
let randomBytes = crypto.randomBytes(bytes.length)
bytes.set(randomBytes)
}
}
window.crypto = globalThis.crypto
globalThis.XMLHttpRequest = (await import("xhr2")).default
process.on("unhandledRejection", function (e) {
console.log("Uncaught (in promise) " + e.stack)
})
globalThis.electronMock = {
app: {}
}
globalThis.XMLHttpRequest = (await import("xhr2")).default
globalThis.express = (await import("express")).default
globalThis.bodyParser = (await import("body-parser")).default
}

View file

@ -1,11 +1,11 @@
import {AlarmScheduler, AlarmSchedulerImpl} from "../../../src/calendar/date/AlarmScheduler"
import {AlarmScheduler, AlarmSchedulerImpl} from "../../../src/calendar/date/AlarmScheduler.js"
import o from "ospec"
import {DateTime} from "luxon"
import {createAlarmInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {createRepeatRule} from "../../../src/api/entities/sys/TypeRefs.js"
import {EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants"
import {DateProvider} from "../../../src/api/common/DateProvider"
import {SchedulerMock} from "../../api/TestUtils"
import {EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants.js"
import {DateProvider} from "../../../src/api/common/DateProvider.js"
import {SchedulerMock} from "../TestUtils.js"
o.spec("AlarmScheduler", function () {
let alarmScheduler: AlarmSchedulerImpl

View file

@ -1,13 +1,13 @@
import o from "ospec"
// @ts-ignore[untyped-import]
import en from "../../../src/translations/en"
import type {Guest} from "../../../src/calendar/date/CalendarEventViewModel"
import {CalendarEventViewModel} from "../../../src/calendar/date/CalendarEventViewModel"
import {lang} from "../../../src/misc/LanguageViewModel"
import en from "../../../src/translations/en.js"
import type {Guest} from "../../../src/calendar/date/CalendarEventViewModel.js"
import {CalendarEventViewModel} from "../../../src/calendar/date/CalendarEventViewModel.js"
import {lang} from "../../../src/misc/LanguageViewModel.js"
import {assertThrows, unmockAttribute} from "@tutao/tutanota-test-utils"
import {clone, delay, downcast, neverNull, noOp} from "@tutao/tutanota-utils"
import type {MailboxDetail} from "../../../src/mail/model/MailModel"
import {MailModel} from "../../../src/mail/model/MailModel"
import type {MailboxDetail} from "../../../src/mail/model/MailModel.js"
import {MailModel} from "../../../src/mail/model/MailModel.js"
import type {CalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createCalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {
@ -16,32 +16,32 @@ import {
assertEnumValue,
CalendarAttendeeStatus,
ShareCapability,
} from "../../../src/api/common/TutanotaConstants"
} from "../../../src/api/common/TutanotaConstants.js"
import {createGroupMembership} from "../../../src/api/entities/sys/TypeRefs.js"
import type {User} from "../../../src/api/entities/sys/TypeRefs.js"
import {createCalendarEventAttendee} from "../../../src/api/entities/tutanota/TypeRefs.js"
import type {CalendarUpdateDistributor} from "../../../src/calendar/date/CalendarUpdateDistributor"
import type {IUserController} from "../../../src/api/main/UserController"
import type {CalendarUpdateDistributor} from "../../../src/calendar/date/CalendarUpdateDistributor.js"
import type {IUserController} from "../../../src/api/main/UserController.js"
import {createEncryptedMailAddress, EncryptedMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import type {CalendarInfo} from "../../../src/calendar/model/CalendarModel"
import {CalendarModel} from "../../../src/calendar/model/CalendarModel"
import {getAllDayDateUTCFromZone, getTimeZone} from "../../../src/calendar/date/CalendarUtils"
import type {CalendarInfo} from "../../../src/calendar/model/CalendarModel.js"
import {CalendarModel} from "../../../src/calendar/model/CalendarModel.js"
import {getAllDayDateUTCFromZone, getTimeZone} from "../../../src/calendar/date/CalendarUtils.js"
import {DateTime} from "luxon"
import {RecipientInfoType} from "../../../src/api/common/RecipientInfo"
import {SendMailModel} from "../../../src/mail/editor/SendMailModel"
import type {LoginController} from "../../../src/api/main/LoginController"
import type {ContactModel} from "../../../src/contacts/model/ContactModel"
import {EventController} from "../../../src/api/main/EventController"
import {RecipientInfoType} from "../../../src/api/common/RecipientInfo.js"
import {SendMailModel} from "../../../src/mail/editor/SendMailModel.js"
import type {LoginController} from "../../../src/api/main/LoginController.js"
import type {ContactModel} from "../../../src/contacts/model/ContactModel.js"
import {EventController} from "../../../src/api/main/EventController.js"
import type {Mail} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createMail} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createContact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {EntityClient} from "../../../src/api/common/EntityClient"
import {EntityClient} from "../../../src/api/common/EntityClient.js"
import {createPublicKeyReturn} from "../../../src/api/entities/sys/TypeRefs.js"
import {createContactMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {BusinessFeatureRequiredError} from "../../../src/api/main/BusinessFeatureRequiredError"
import {MailFacade} from "../../../src/api/worker/facades/MailFacade"
import {EntityRestClientMock} from "../../api/worker/EntityRestClientMock"
import {Time} from "../../../src/api/common/utils/Time"
import {BusinessFeatureRequiredError} from "../../../src/api/main/BusinessFeatureRequiredError.js"
import {MailFacade} from "../../../src/api/worker/facades/MailFacade.js"
import {EntityRestClientMock} from "../api/worker/rest/EntityRestClientMock.js"
import {Time} from "../../../src/api/common/utils/Time.js"
import {
accountMailAddress,
calendarGroupId,
@ -52,7 +52,7 @@ import {
makeDistributor,
makeMailboxDetail,
makeUserController,
} from "./CalendarTestUtils"
} from "./CalendarTestUtils.js"
import {createRepeatRule} from "../../../src/api/entities/sys/TypeRefs.js"
const now = new Date(2020, 4, 25, 13, 40)

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {getDateFromMousePos, getTimeFromMousePos} from "../../../src/calendar/view/CalendarGuiUtils"
import {getDateFromMousePos, getTimeFromMousePos} from "../../../src/calendar/view/CalendarGuiUtils.js"
o.spec("CalendarGuiUtils", function () {
o("getDateFromMouseClick", function () {
function input(x, y, targetWidth, targetHeight) {

View file

@ -1,13 +1,13 @@
import o from "ospec"
import {parseCalendarStringData, serializeCalendar, serializeEvent} from "../../../src/calendar/export/CalendarImporter"
import {parseCalendarStringData, serializeCalendar, serializeEvent} from "../../../src/calendar/export/CalendarImporter.js"
import {createCalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {DateTime} from "luxon"
import {createAlarmInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {AlarmInterval, CalendarAttendeeStatus, EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants"
import {AlarmInterval, CalendarAttendeeStatus, EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants.js"
import {createRepeatRule} from "../../../src/api/entities/sys/TypeRefs.js"
import {getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils"
import {getAllDayDateUTCFromZone} from "../../../src/calendar/date/CalendarUtils"
import {getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils.js"
import {getAllDayDateUTCFromZone} from "../../../src/calendar/date/CalendarUtils.js"
import {createCalendarEventAttendee} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createEncryptedMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
const zone = "Europe/Berlin"

View file

@ -10,36 +10,36 @@ import {
getMonth,
getTimeZone,
incrementByRepeatPeriod,
} from "../../../src/calendar/date/CalendarUtils"
} from "../../../src/calendar/date/CalendarUtils.js"
import {clone, downcast, getStartOfDay, neverNull, noOp} from "@tutao/tutanota-utils"
import type {CalendarModel} from "../../../src/calendar/model/CalendarModel"
import {CalendarModelImpl} from "../../../src/calendar/model/CalendarModel"
import {CalendarAttendeeStatus, CalendarMethod, EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants"
import type {CalendarModel} from "../../../src/calendar/model/CalendarModel.js"
import {CalendarModelImpl} from "../../../src/calendar/model/CalendarModel.js"
import {CalendarAttendeeStatus, CalendarMethod, EndType, RepeatPeriod} from "../../../src/api/common/TutanotaConstants.js"
import {DateTime} from "luxon"
import {generateEventElementId, getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils"
import type {EntityUpdateData} from "../../../src/api/main/EventController"
import {EventController} from "../../../src/api/main/EventController"
import {Notifications} from "../../../src/gui/Notifications"
import {generateEventElementId, getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils.js"
import type {EntityUpdateData} from "../../../src/api/main/EventController.js"
import {EventController} from "../../../src/api/main/EventController.js"
import {Notifications} from "../../../src/gui/Notifications.js"
import {createCalendarEventAttendee} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createEncryptedMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createAlarmInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {EntityRestClientMock} from "../../api/worker/EntityRestClientMock"
import type {IUserController} from "../../../src/api/main/UserController"
import {EntityRestClientMock} from "../api/worker/rest/EntityRestClientMock.js"
import type {IUserController} from "../../../src/api/main/UserController.js"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfoListType} from "../../../src/api/entities/sys/TypeRefs.js"
import {createUserAlarmInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import type {CalendarGroupRoot} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createCalendarGroupRoot} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {NotFoundError} from "../../../src/api/common/error/RestError"
import type {LoginController} from "../../../src/api/main/LoginController"
import {ProgressTracker} from "../../../src/api/main/ProgressTracker"
import {EntityClient} from "../../../src/api/common/EntityClient"
import {MailModel} from "../../../src/mail/model/MailModel"
import {AlarmScheduler} from "../../../src/calendar/date/AlarmScheduler"
import {CalendarFacade} from "../../../src/api/worker/facades/CalendarFacade"
import {NotFoundError} from "../../../src/api/common/error/RestError.js"
import type {LoginController} from "../../../src/api/main/LoginController.js"
import {ProgressTracker} from "../../../src/api/main/ProgressTracker.js"
import {EntityClient} from "../../../src/api/common/EntityClient.js"
import {MailModel} from "../../../src/mail/model/MailModel.js"
import {AlarmScheduler} from "../../../src/calendar/date/AlarmScheduler.js"
import {CalendarFacade} from "../../../src/api/worker/facades/CalendarFacade.js"
import {asResult, mapToObject} from "@tutao/tutanota-test-utils"
import type {WorkerClient} from "../../../src/api/main/WorkerClient"
import {FileController} from "../../../src/file/FileController"
import type {WorkerClient} from "../../../src/api/main/WorkerClient.js"
import {FileController} from "../../../src/file/FileController.js"
o.spec("CalendarModel", function () {
o.spec("addDaysForEvent", function () {

View file

@ -7,8 +7,8 @@ import {
parsePropertyKeyValue,
parseTime,
propertySequenceParser,
} from "../../../src/calendar/export/CalendarParser"
import {ParserError, StringIterator} from "../../../src/misc/parsing/ParserCombinator"
} from "../../../src/calendar/export/CalendarParser.js"
import {ParserError, StringIterator} from "../../../src/misc/parsing/ParserCombinator.js"
o.spec("CalendarParser", function () {
o.spec("propertySequenceParser", function () {

View file

@ -1,7 +1,7 @@
import {AccountType, FeatureType, GroupType, TimeFormat} from "../../../src/api/common/TutanotaConstants"
import type {IUserController} from "../../../src/api/main/UserController"
import {AccountType, FeatureType, GroupType, TimeFormat} from "../../../src/api/common/TutanotaConstants.js"
import type {IUserController} from "../../../src/api/main/UserController.js"
import {createBookingsRef} from "../../../src/api/entities/sys/TypeRefs.js"
import {GENERATED_MAX_ID} from "../../../src/api/common/utils/EntityUtils"
import {GENERATED_MAX_ID} from "../../../src/api/common/utils/EntityUtils.js"
import {createFeature, Feature} from "../../../src/api/entities/sys/TypeRefs.js"
import {downcast, LazyLoaded} from "@tutao/tutanota-utils"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
@ -11,18 +11,18 @@ import {createGroupInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {createMailAddressAlias} from "../../../src/api/entities/sys/TypeRefs.js"
import {createCustomer} from "../../../src/api/entities/sys/TypeRefs.js"
import {createCustomerInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import type {MailboxDetail} from "../../../src/mail/model/MailModel"
import {MailModel} from "../../../src/mail/model/MailModel"
import type {MailboxDetail} from "../../../src/mail/model/MailModel.js"
import {MailModel} from "../../../src/mail/model/MailModel.js"
import {createMailBox} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createGroup} from "../../../src/api/entities/sys/TypeRefs.js"
import {createMailboxGroupRoot} from "../../../src/api/entities/tutanota/TypeRefs.js"
import type {CalendarUpdateDistributor} from "../../../src/calendar/date/CalendarUpdateDistributor"
import type {CalendarUpdateDistributor} from "../../../src/calendar/date/CalendarUpdateDistributor.js"
import o from "ospec"
import type {Contact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import type {ContactModel} from "../../../src/contacts/model/ContactModel"
import type {CalendarInfo} from "../../../src/calendar/model/CalendarModel"
import {CalendarModel} from "../../../src/calendar/model/CalendarModel"
import type {IProgressMonitor} from "../../../src/api/common/utils/ProgressMonitor"
import type {ContactModel} from "../../../src/contacts/model/ContactModel.js"
import type {CalendarInfo} from "../../../src/calendar/model/CalendarModel.js"
import {CalendarModel} from "../../../src/calendar/model/CalendarModel.js"
import type {IProgressMonitor} from "../../../src/api/common/utils/ProgressMonitor.js"
import type {CalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createCalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"

View file

@ -1,5 +1,5 @@
import o from "ospec"
import type {AlarmOccurrence, CalendarMonth} from "../../../src/calendar/date/CalendarUtils"
import type {AlarmOccurrence, CalendarMonth} from "../../../src/calendar/date/CalendarUtils.js"
import {
eventEndsBefore,
eventStartsAfter,
@ -12,17 +12,17 @@ import {
getWeekNumber,
isEventBetweenDays,
prepareCalendarDescription,
} from "../../../src/calendar/date/CalendarUtils"
import {lang} from "../../../src/misc/LanguageViewModel"
} from "../../../src/calendar/date/CalendarUtils.js"
import {lang} from "../../../src/misc/LanguageViewModel.js"
import {createGroupMembership} from "../../../src/api/entities/sys/TypeRefs.js"
import {createGroup} from "../../../src/api/entities/sys/TypeRefs.js"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
import {AlarmInterval, EndType, GroupType, RepeatPeriod, ShareCapability,} from "../../../src/api/common/TutanotaConstants"
import {timeStringFromParts} from "../../../src/misc/Formatter"
import {AlarmInterval, EndType, GroupType, RepeatPeriod, ShareCapability,} from "../../../src/api/common/TutanotaConstants.js"
import {timeStringFromParts} from "../../../src/misc/Formatter.js"
import {DateTime} from "luxon"
import {getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils"
import {hasCapabilityOnGroup} from "../../../src/sharing/GroupUtils"
import {parseTime} from "../../../src/misc/parsing/TimeParser"
import {getAllDayDateUTC} from "../../../src/api/common/utils/CommonCalendarUtils.js"
import {hasCapabilityOnGroup} from "../../../src/sharing/GroupUtils.js"
import {parseTime} from "../../../src/misc/parsing/TimeParser.js"
import type {CalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createCalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {neverNull} from "@tutao/tutanota-utils";

View file

@ -1,25 +1,25 @@
import o from "ospec"
import {accountMailAddress, calendarGroupId, makeCalendarModel, makeEvent, makeUserController,} from "./CalendarTestUtils"
import type {LoginController} from "../../../src/api/main/LoginController"
import {accountMailAddress, calendarGroupId, makeCalendarModel, makeEvent, makeUserController,} from "./CalendarTestUtils.js"
import type {LoginController} from "../../../src/api/main/LoginController.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {assertNotNull, downcast, getStartOfDay, LazyLoaded, neverNull} from "@tutao/tutanota-utils"
import type {CalendarEvent} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createCalendarEvent, createEncryptedMailAddress,} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {DateTime} from "luxon"
import {addDaysForEvent, getTimeZone} from "../../../src/calendar/date/CalendarUtils"
import type {CalendarInfo, CalendarModel} from "../../../src/calendar/model/CalendarModel"
import type {CreateCalendarEventViewModelFunction} from "../../../src/calendar/view/CalendarViewModel"
import {CalendarViewModel} from "../../../src/calendar/view/CalendarViewModel"
import {CalendarEventViewModel} from "../../../src/calendar/date/CalendarEventViewModel"
import {EntityClient} from "../../../src/api/common/EntityClient"
import type {EntityUpdateData} from "../../../src/api/main/EventController"
import {EventController} from "../../../src/api/main/EventController"
import {ProgressTracker} from "../../../src/api/main/ProgressTracker"
import {DeviceConfig} from "../../../src/misc/DeviceConfig"
import {OperationType} from "../../../src/api/common/TutanotaConstants"
import {getElementId, getListId} from "../../../src/api/common/utils/EntityUtils"
import {EntityRestClientMock} from "../../api/worker/EntityRestClientMock"
import {ReceivedGroupInvitationsModel} from "../../../src/sharing/model/ReceivedGroupInvitationsModel"
import {addDaysForEvent, getTimeZone} from "../../../src/calendar/date/CalendarUtils.js"
import type {CalendarInfo, CalendarModel} from "../../../src/calendar/model/CalendarModel.js"
import type {CreateCalendarEventViewModelFunction} from "../../../src/calendar/view/CalendarViewModel.js"
import {CalendarViewModel} from "../../../src/calendar/view/CalendarViewModel.js"
import {CalendarEventViewModel} from "../../../src/calendar/date/CalendarEventViewModel.js"
import {EntityClient} from "../../../src/api/common/EntityClient.js"
import type {EntityUpdateData} from "../../../src/api/main/EventController.js"
import {EventController} from "../../../src/api/main/EventController.js"
import {ProgressTracker} from "../../../src/api/main/ProgressTracker.js"
import {DeviceConfig} from "../../../src/misc/DeviceConfig.js"
import {OperationType} from "../../../src/api/common/TutanotaConstants.js"
import {getElementId, getListId} from "../../../src/api/common/utils/EntityUtils.js"
import {EntityRestClientMock} from "../api/worker/rest/EntityRestClientMock.js"
import {ReceivedGroupInvitationsModel} from "../../../src/sharing/model/ReceivedGroupInvitationsModel.js"
let saveAndSendMock
let rescheduleEventMock

View file

@ -1,14 +1,14 @@
import o from "ospec"
import {EventDragHandler} from "../../../src/calendar/view/EventDragHandler"
import {EventDragHandler} from "../../../src/calendar/view/EventDragHandler.js"
import {defer, downcast} from "@tutao/tutanota-utils"
import type {DraggedEvent} from "../../../src/calendar/view/CalendarViewModel"
import {makeEvent} from "./CalendarTestUtils"
import type {DraggedEvent} from "../../../src/calendar/view/CalendarViewModel.js"
import {makeEvent} from "./CalendarTestUtils.js"
import {
getAllDayDateUTCFromZone,
getStartOfDayWithZone,
getStartOfNextDayWithZone,
} from "../../../src/calendar/date/CalendarUtils"
import {isAllDayEvent} from "../../../src/api/common/utils/CommonCalendarUtils"
} from "../../../src/calendar/date/CalendarUtils.js"
import {isAllDayEvent} from "../../../src/api/common/utils/CommonCalendarUtils.js"
import {DateTime} from "luxon"
import {DAY_IN_MILLIS} from "@tutao/tutanota-utils"
const INIT_MOUSE_POS = {

View file

@ -16,7 +16,7 @@ import {
_getMergedSocialIds,
getMergeableContacts,
mergeContacts,
} from "../../../src/contacts/ContactMergeUtils"
} from "../../../src/contacts/ContactMergeUtils.js"
import {createContactMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactPhoneNumber} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {
@ -25,14 +25,14 @@ import {
ContactPhoneNumberType,
ContactSocialType,
IndifferentContactComparisonResult,
} from "../../../src/api/common/TutanotaConstants"
} from "../../../src/api/common/TutanotaConstants.js"
import {createContactAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createContactSocialId} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createFilledContact} from "./VCardExporterTest"
import {createFilledContact} from "./VCardExporterTest.js"
import {downcast, neverNull} from "@tutao/tutanota-utils"
import {_contactToVCard} from "../../../src/contacts/VCardExporter"
import {_contactToVCard} from "../../../src/contacts/VCardExporter.js"
import {createBirthday} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {birthdayToIsoDate} from "../../../src/api/common/utils/BirthdayUtils"
import {birthdayToIsoDate} from "../../../src/api/common/utils/BirthdayUtils.js"
o.spec("ContactMergeUtilsTest", function () {
// tests are made for the validation of the comparison functions to find mergable contacts
// tests all ContactMergeUtils functions

View file

@ -1,10 +1,10 @@
import o from "ospec"
import {createContact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {formatBirthdayNumeric} from "../../../src/contacts/model/ContactUtils"
import {formatBirthdayNumeric} from "../../../src/contacts/model/ContactUtils.js"
import {createContactMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createBirthday} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {lang} from "../../../src/misc/LanguageViewModel"
import {compareContacts} from "../../../src/contacts/view/ContactGuiUtils"
import {lang} from "../../../src/misc/LanguageViewModel.js"
import {compareContacts} from "../../../src/contacts/view/ContactGuiUtils.js"
o.spec("ContactUtilsTest", function () {
let compare = function (

View file

@ -1,3 +1,6 @@
// Attention! Be very careful with this file, there are some trailing whitespaces in multiline strings that can mess things up if your editor does not respect
// them.
import o from "ospec"
import type {Contact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {
@ -9,16 +12,16 @@ import {
createContactPhoneNumber,
createContactSocialId
} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {ContactAddressType, ContactPhoneNumberType, ContactSocialType} from "../../../src/api/common/TutanotaConstants"
import {ContactAddressType, ContactPhoneNumberType, ContactSocialType} from "../../../src/api/common/TutanotaConstants.js"
import {
_addressesToVCardAddresses,
_phoneNumbersToVCardPhoneNumbers,
_socialIdsToVCardSocialUrls,
_vCardFormatArrayToString,
contactsToVCard,
} from "../../../src/contacts/VCardExporter"
} from "../../../src/contacts/VCardExporter.js"
import {neverNull} from "@tutao/tutanota-utils"
import {vCardFileToVCards, vCardListToContacts} from "../../../src/contacts/VCardImporter"
import {vCardFileToVCards, vCardListToContacts} from "../../../src/contacts/VCardImporter.js"
let idCounter = 0
o.spec("VCardExporterTest", function () {
@ -168,10 +171,11 @@ BEGIN:VCARD\nVERSION:3.0\nFN:Phd. Bob Kev\nN:Kev;Bob;;Phd.;\nADR;TYPE=work:House
c1String = `BEGIN:VCARD\nVERSION:3.0\nFN:Ant\nN:;Ant;;;\nBDAY:1111-10-10\nEND:VCARD\n\n`
o(contactsToVCard([contact1])).equals(c1String)
})
o("contactsToVCardsTestMoreThan75CharContentLine", function () {
let contactArray: Contact[] = []
o.spec("contactsToVCards more than 75 char content line", function () {
o("ADR", async function () {
//todo Birthday test
let contact1 = createFilledContact(
const contact = createFilledContact(
"Ant",
"Ste",
"Hello World!",
@ -183,14 +187,12 @@ BEGIN:VCARD\nVERSION:3.0\nFN:Phd. Bob Kev\nN:Kev;Bob;;Phd.;\nADR;TYPE=work:House
["diaspora.de"],
["Housestreet 123\nTown 123\nState 123\nCountry 123 this is so there is a line break in this contact"],
)
contactArray.push(contact1)
let c1String = `BEGIN:VCARD
const exprected = `BEGIN:VCARD
VERSION:3.0
FN:Mr. Ant Ste
N:Ste;Ant;;Mr.;
NICKNAME:Buffalo
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so
there is a line break in this contact
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so \n there is a line break in this contact
EMAIL;TYPE=work:antste@antste.de
EMAIL;TYPE=work:bentste@bentste.de
TEL;TYPE=work:123123123
@ -201,9 +203,11 @@ NOTE:Hello World!
END:VCARD
`
o(contactsToVCard(contactArray)).equals(c1String)
contactArray = []
contact1 = createFilledContact(
o(contactsToVCard([contact])).equals(exprected)
})
o("URL", async function () {
const contact = createFilledContact(
"Ant",
"Ste",
"Hello World!",
@ -215,14 +219,12 @@ END:VCARD
["diaspora.de", "facebook.com/aaaa/bbb/cccccc/DDDDDDD/llllllll/uuuuuuu/ppppp/aaaaaaaaaaaaaaaaaaaaa"],
["Housestreet 123\nTown 123\nState 123\nCountry 123 this is so there is a line break in this contact"],
)
contactArray.push(contact1)
c1String = `BEGIN:VCARD
const expected = `BEGIN:VCARD
VERSION:3.0
FN:Mr. Ant Ste
N:Ste;Ant;;Mr.;
NICKNAME:Buffalo
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so
there is a line break in this contact
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so \n there is a line break in this contact
EMAIL;TYPE=work:antste@antste.de
EMAIL;TYPE=work:bentste@bentste.de
TEL;TYPE=work:123123123
@ -236,8 +238,10 @@ NOTE:Hello World!
END:VCARD
`
o(contactsToVCard(contactArray)).equals(c1String)
o(contactsToVCard([contact])).equals(expected)
})
})
o("contactsToVCardsEscapingTest", function () {
let contactArray: Contact[] = []
//todo Birthday test
@ -428,8 +432,8 @@ END:VCARD
b.birthdayIso = "2016-09-09"
o(JSON.stringify(contactsToVCard(contacts))).equals(JSON.stringify(a))
})
o("testVCardImportToExport", function () {
let cString = `BEGIN:VCARD
o("import export roundtrip", function () {
const cString = `BEGIN:VCARD
VERSION:3.0
FN:Mr. John\\;Quinlan Public
N:Public;John\\;Quinlan;;Mr.;
@ -443,8 +447,7 @@ VERSION:3.0
FN:Mr. Ant Ste
N:Ste;Ant;;Mr.;
NICKNAME:Buffalo
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so
there is a line break in this contact
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123 this is so \n there is a line break in this contact
EMAIL;TYPE=work:antste@antste.de
EMAIL;TYPE=work:bentste@bentste.de
TEL;TYPE=work:123123123
@ -454,7 +457,22 @@ ORG:Tutao
NOTE:Hello World!
END:VCARD
BEGIN:VCARD\nVERSION:3.0\nFN:Mr. Ant Ste\nN:Ste;Ant;;Mr.;\nNICKNAME:Buffalo\nADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123\nEMAIL;TYPE=work:antste@antste.de\nEMAIL;TYPE=work:bentste@bentste.de\nTEL;TYPE=work:123123123\nTEL;TYPE=work:321321321\nURL:diaspora.de\nORG:Tutao\nNOTE:Hello World!\nEND:VCARD\n\n`
BEGIN:VCARD
VERSION:3.0
FN:Mr. Ant Ste
N:Ste;Ant;;Mr.;
NICKNAME:Buffalo
ADR;TYPE=work:Housestreet 123\\nTown 123\\nState 123\\nCountry 123
EMAIL;TYPE=work:antste@antste.de
EMAIL;TYPE=work:bentste@bentste.de
TEL;TYPE=work:123123123
TEL;TYPE=work:321321321
URL:diaspora.de
ORG:Tutao
NOTE:Hello World!
END:VCARD
`
o(contactsToVCard(vCardListToContacts(neverNull(vCardFileToVCards(cString)), ""))).equals(cString)
})
})

View file

@ -1,10 +1,10 @@
import o from "ospec"
import {ContactAddressTypeRef, ContactMailAddressTypeRef, ContactPhoneNumberTypeRef, createContact} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {neverNull} from "@tutao/tutanota-utils"
import {vCardFileToVCards, vCardListToContacts} from "../../../src/contacts/VCardImporter"
import {vCardFileToVCards, vCardListToContacts} from "../../../src/contacts/VCardImporter.js"
// @ts-ignore[untyped-import]
import en from "../../../src/translations/en"
import {lang} from "../../../src/misc/LanguageViewModel"
import en from "../../../src/translations/en.js"
import {lang} from "../../../src/misc/LanguageViewModel.js"
o.spec("VCardImporterTest", function () {
o.before(async function () {

View file

@ -1,15 +1,15 @@
import o from "ospec"
import n from "../nodemocker"
import n from "../nodemocker.js"
import {defer, DeferredObject, delay, downcast} from "@tutao/tutanota-utils"
import {ApplicationWindow} from "../../../src/desktop/ApplicationWindow"
import {ApplicationWindow} from "../../../src/desktop/ApplicationWindow.js"
import type {NativeImage} from "electron"
import {ThemeManager} from "../../../src/desktop/ThemeManager"
import type {Theme, ThemeId} from "../../../src/gui/theme"
import {DesktopConfig} from "../../../src/desktop/config/DesktopConfig"
import {WindowManager} from "../../../src/desktop/DesktopWindowManager";
import {LocalShortcutManager} from "../../../src/desktop/electron-localshortcut/LocalShortcut";
import {ThemeManager} from "../../../src/desktop/ThemeManager.js"
import type {Theme, ThemeId} from "../../../src/gui/theme.js"
import {DesktopConfig} from "../../../src/desktop/config/DesktopConfig.js"
import {WindowManager} from "../../../src/desktop/DesktopWindowManager.js";
import {LocalShortcutManager} from "../../../src/desktop/electron-localshortcut/LocalShortcut.js";
import {object} from "testdouble"
import {OfflineDbFacade} from "../../../src/desktop/db/OfflineDbFacade"
import {OfflineDbFacade} from "../../../src/desktop/db/OfflineDbFacade.js"
import {verify} from "@tutao/tutanota-test-utils"
import Rectangle = Electron.Rectangle

View file

@ -1,8 +1,8 @@
import o from "ospec"
import n from "../nodemocker"
import {DesktopContextMenu} from "../../../src/desktop/DesktopContextMenu"
import n from "../nodemocker.js"
import {DesktopContextMenu} from "../../../src/desktop/DesktopContextMenu.js"
import {downcast} from "@tutao/tutanota-utils"
import {IPC} from "../../../src/desktop/IPC";
import {IPC} from "../../../src/desktop/IPC.js";
import ContextMenuParams = Electron.ContextMenuParams;
o.spec("DesktopContextMenu Test", () => {

View file

@ -1,12 +1,12 @@
import n from "../nodemocker"
import n from "../nodemocker.js"
import o from "ospec"
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade"
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade.js"
import {stringToUtf8Uint8Array, uint8ArrayToBase64} from "@tutao/tutanota-utils"
import {arrayEquals} from "@tutao/tutanota-utils"
import {downcast} from "@tutao/tutanota-utils"
import type {CryptoFunctions} from "../../../src/desktop/CryptoFns"
import type {TypeModel} from "../../../src/api/common/EntityTypes"
import type {Base64} from "@tutao/tutanota-utils/"
import type {CryptoFunctions} from "../../../src/desktop/CryptoFns.js"
import type {TypeModel} from "../../../src/api/common/EntityTypes.js"
import type {Base64} from "@tutao/tutanota-utils"
import {keyToBase64, uint8ArrayToBitArray} from "@tutao/tutanota-crypto"
o.spec("DesktopCryptoFacadeTest", () => {

View file

@ -1,10 +1,10 @@
import o from "ospec"
import n, {Mocked} from "../nodemocker"
import {DesktopDownloadManager} from "../../../src/desktop/DesktopDownloadManager"
import n, {Mocked} from "../nodemocker.js"
import {DesktopDownloadManager} from "../../../src/desktop/DesktopDownloadManager.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {CancelledError} from "../../../src/api/common/error/CancelledError"
import {DesktopNetworkClient} from "../../../src/desktop/DesktopNetworkClient"
import {PreconditionFailedError, TooManyRequestsError} from "../../../src/api/common/error/RestError"
import {CancelledError} from "../../../src/api/common/error/CancelledError.js"
import {DesktopNetworkClient} from "../../../src/desktop/DesktopNetworkClient.js"
import {PreconditionFailedError, TooManyRequestsError} from "../../../src/api/common/error/RestError.js"
import type * as fs from "fs"
import {stringToUtf8Uint8Array, uint8ArrayToBase64} from "@tutao/tutanota-utils"
import {sha256Hash} from "@tutao/tutanota-crypto"

View file

@ -1,8 +1,8 @@
import o from "ospec"
import type {ElectronNotificationFactory} from "../../../src/desktop/NotificatonFactory"
import type {ElectronNotificationFactory} from "../../../src/desktop/NotificatonFactory.js"
import {defer, delay, downcast} from "@tutao/tutanota-utils"
import {DesktopNotifier} from "../../../src/desktop/DesktopNotifier"
import type {DesktopTray} from "../../../src/desktop/tray/DesktopTray"
import {DesktopNotifier} from "../../../src/desktop/DesktopNotifier.js"
import type {DesktopTray} from "../../../src/desktop/tray/DesktopTray.js"
import type {NativeImage} from "electron"
// just a placeholder, symbol to make sure it's the same instance

View file

@ -1,16 +1,16 @@
import o from "ospec"
import type {App} from "electron"
import type {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade"
import type {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade.js"
import {downcast} from "@tutao/tutanota-utils"
import {ElectronUpdater} from "../../../src/desktop/ElectronUpdater"
import type {DesktopTray} from "../../../src/desktop/tray/DesktopTray"
import type {UpdaterWrapper} from "../../../src/desktop/UpdaterWrapper"
import n from "../nodemocker"
import type {DesktopConfig} from "../../../src/desktop/config/DesktopConfig"
import type {DesktopNotifier} from "../../../src/desktop/DesktopNotifier"
import {lang} from "../../../src/misc/LanguageViewModel"
import {ElectronUpdater} from "../../../src/desktop/ElectronUpdater.js"
import type {DesktopTray} from "../../../src/desktop/tray/DesktopTray.js"
import type {UpdaterWrapper} from "../../../src/desktop/UpdaterWrapper.js"
import n from "../nodemocker.js"
import type {DesktopConfig} from "../../../src/desktop/config/DesktopConfig.js"
import type {DesktopNotifier} from "../../../src/desktop/DesktopNotifier.js"
import {lang} from "../../../src/misc/LanguageViewModel.js"
// @ts-ignore[untyped-import]
import en from "../../../src/translations/en"
import en from "../../../src/translations/en.js"
import {delay} from "@tutao/tutanota-utils"
lang.init(en)

View file

@ -1,28 +1,28 @@
import n from "../nodemocker"
import n from "../nodemocker.js"
import o from "ospec"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {defer, delay, noOp} from "@tutao/tutanota-utils"
import {IPC} from "../../../src/desktop/IPC"
import type {Message} from "../../../src/api/common/MessageDispatcher"
import {Request, RequestError, Response} from "../../../src/api/common/MessageDispatcher"
import {DesktopConfig} from "../../../src/desktop/config/DesktopConfig";
import {DesktopNotifier} from "../../../src/desktop/DesktopNotifier";
import {DesktopSseClient} from "../../../src/desktop/sse/DesktopSseClient";
import {WindowManager} from "../../../src/desktop/DesktopWindowManager";
import {Socketeer} from "../../../src/desktop/Socketeer";
import {DesktopAlarmStorage} from "../../../src/desktop/sse/DesktopAlarmStorage";
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade";
import {DesktopDownloadManager} from "../../../src/desktop/DesktopDownloadManager";
import {ElectronUpdater} from "../../../src/desktop/ElectronUpdater";
import {DesktopUtils} from "../../../src/desktop/DesktopUtils";
import {DesktopErrorHandler} from "../../../src/desktop/DesktopErrorHandler";
import {DesktopIntegrator} from "../../../src/desktop/integration/DesktopIntegrator";
import {DesktopAlarmScheduler} from "../../../src/desktop/sse/DesktopAlarmScheduler";
import {ThemeManager} from "../../../src/desktop/ThemeManager";
import {OfflineDbFacade} from "../../../src/desktop/db/OfflineDbFacade"
import {DektopCredentialsEncryption, DesktopCredentialsEncryptionStub} from "../../../src/desktop/credentials/DektopCredentialsEncryption"
import {IPC} from "../../../src/desktop/IPC.js"
import type {Message} from "../../../src/api/common/MessageDispatcher.js"
import {Request, RequestError, Response} from "../../../src/api/common/MessageDispatcher.js"
import {DesktopConfig} from "../../../src/desktop/config/DesktopConfig.js";
import {DesktopNotifier} from "../../../src/desktop/DesktopNotifier.js";
import {DesktopSseClient} from "../../../src/desktop/sse/DesktopSseClient.js";
import {WindowManager} from "../../../src/desktop/DesktopWindowManager.js";
import {Socketeer} from "../../../src/desktop/Socketeer.js";
import {DesktopAlarmStorage} from "../../../src/desktop/sse/DesktopAlarmStorage.js";
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade.js";
import {DesktopDownloadManager} from "../../../src/desktop/DesktopDownloadManager.js";
import {ElectronUpdater} from "../../../src/desktop/ElectronUpdater.js";
import {DesktopUtils} from "../../../src/desktop/DesktopUtils.js";
import {DesktopErrorHandler} from "../../../src/desktop/DesktopErrorHandler.js";
import {DesktopIntegrator} from "../../../src/desktop/integration/DesktopIntegrator.js";
import {DesktopAlarmScheduler} from "../../../src/desktop/sse/DesktopAlarmScheduler.js";
import {ThemeManager} from "../../../src/desktop/ThemeManager.js";
import {OfflineDbFacade} from "../../../src/desktop/db/OfflineDbFacade.js"
import {DektopCredentialsEncryption, DesktopCredentialsEncryptionStub} from "../../../src/desktop/credentials/DektopCredentialsEncryption.js"
import {object} from "testdouble"
import {ExposedNativeInterface} from "../../../src/native/common/NativeInterface"
import {ExposedNativeInterface} from "../../../src/native/common/NativeInterface.js"
o.spec("IPC tests", function () {
const CALLBACK_ID = "to-main"

View file

@ -1,12 +1,12 @@
import o from "ospec"
import {CredentialsKeySpec, DeviceKeySpec, KeyStoreFacadeImpl} from "../../../src/desktop/KeyStoreFacadeImpl"
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade"
import type {SecretStorage} from "../../../src/desktop/sse/SecretStorage"
import {spyify} from "../nodemocker"
import {CredentialsKeySpec, DeviceKeySpec, KeyStoreFacadeImpl} from "../../../src/desktop/KeyStoreFacadeImpl.js"
import {DesktopCryptoFacade} from "../../../src/desktop/DesktopCryptoFacade.js"
import type {SecretStorage} from "../../../src/desktop/sse/SecretStorage.js"
import {spyify} from "../nodemocker.js"
import {keyToBase64, uint8ArrayToKey} from "@tutao/tutanota-crypto"
import {CancelledError} from "../../../src/api/common/error/CancelledError"
import {assertThrows} from "../../../packages/tutanota-test-utils/lib"
import {DeviceStorageUnavailableError} from "../../../src/api/common/error/DeviceStorageUnavailableError"
import {CancelledError} from "../../../src/api/common/error/CancelledError.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import {DeviceStorageUnavailableError} from "../../../src/api/common/error/DeviceStorageUnavailableError.js"
function initKeyStoreFacade(secretStorage: SecretStorage, crypto: DesktopCryptoFacade): KeyStoreFacadeImpl {
return new KeyStoreFacadeImpl(secretStorage, crypto)

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {nonClobberingFilename, swapFilename} from "../../../src/desktop/PathUtils"
import {nonClobberingFilename, swapFilename} from "../../../src/desktop/PathUtils.js"
import path from "path"
o.spec("PathUtils", function () {
o.spec("nonClobberingFileName Test", function () {

View file

@ -1,7 +1,7 @@
import n from "../nodemocker"
import n from "../nodemocker.js"
import o from "ospec"
import {makeTimeoutMock} from "@tutao/tutanota-test-utils"
import {Socketeer} from "../../../src/desktop/Socketeer"
import {Socketeer} from "../../../src/desktop/Socketeer.js"
o.spec("Socketeer Test", function () {
const electron = {
app: {

View file

@ -1,7 +1,7 @@
import o from "ospec"
import n from "../../nodemocker"
import n from "../../nodemocker.js"
import {delay, numberRange} from "@tutao/tutanota-utils"
import {getConfigFile} from "../../../../src/desktop/config/ConfigFile"
import {getConfigFile} from "../../../../src/desktop/config/ConfigFile.js"
const MAX_LATENCY = 20
const rndDelay = () => delay(Math.floor(Math.random() * MAX_LATENCY))

View file

@ -1,9 +1,9 @@
import o from "ospec"
import {DesktopConfigMigrator} from "../../../../../src/desktop/config/migrations/DesktopConfigMigrator"
import {DesktopCryptoFacade} from "../../../../../src/desktop/DesktopCryptoFacade"
import {DesktopConfigMigrator} from "../../../../../src/desktop/config/migrations/DesktopConfigMigrator.js"
import {DesktopCryptoFacade} from "../../../../../src/desktop/DesktopCryptoFacade.js"
import {downcast} from "@tutao/tutanota-utils"
import {makeKeyStoreFacade} from "../../../../api/TestUtils"
import {DesktopKeyStoreFacade} from "../../../../../src/desktop/KeyStoreFacadeImpl";
import {makeKeyStoreFacade} from "../../../TestUtils.js"
import {DesktopKeyStoreFacade} from "../../../../../src/desktop/KeyStoreFacadeImpl.js";
o.spec('DesktopConfigMigrator', function () {
let migrator

View file

@ -1,11 +1,11 @@
import o from "ospec"
import n from "../../nodemocker"
import n from "../../nodemocker.js"
import {DesktopCredentialsEncryptionImpl} from "../../../../src/desktop/credentials/DektopCredentialsEncryption"
import {DesktopKeyStoreFacade} from "../../../../src/desktop/KeyStoreFacadeImpl"
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade"
import {CredentialEncryptionMode} from "../../../../src/misc/credentials/CredentialEncryptionMode"
import {makeKeyStoreFacade} from "../../../api/TestUtils"
import {DesktopCredentialsEncryptionImpl} from "../../../../src/desktop/credentials/DektopCredentialsEncryption.js"
import {DesktopKeyStoreFacade} from "../../../../src/desktop/KeyStoreFacadeImpl.js"
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade.js"
import {CredentialEncryptionMode} from "../../../../src/misc/credentials/CredentialEncryptionMode.js"
import {makeKeyStoreFacade} from "../../TestUtils.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
o.spec("DesktopCredentialsEncryption Test", () => {

View file

@ -1,8 +1,8 @@
import o from "ospec"
import {OfflineDbFacade, OfflineDbFactory} from "../../../../src/desktop/db/OfflineDbFacade"
import {OfflineDbFacade, OfflineDbFactory} from "../../../../src/desktop/db/OfflineDbFacade.js"
import {object, when} from "testdouble"
import {verify} from "@tutao/tutanota-test-utils"
import {OfflineDb} from "../../../../src/desktop/db/OfflineDb"
import {OfflineDb} from "../../../../src/desktop/db/OfflineDb.js"
o.spec("OfflineDbFacade", function () {
let factory: OfflineDbFactory

View file

@ -1,10 +1,10 @@
import o from "ospec"
import {OfflineDb} from "../../../../src/desktop/db/OfflineDb"
import {OfflineDb} from "../../../../src/desktop/db/OfflineDb.js"
import {ContactTypeRef} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {GENERATED_MAX_ID, GENERATED_MIN_ID} from "../../../../src/api/common/utils/EntityUtils"
import {GENERATED_MAX_ID, GENERATED_MIN_ID} from "../../../../src/api/common/utils/EntityUtils.js"
import {UserTypeRef} from "../../../../src/api/entities/sys/TypeRefs.js"
import {concat, stringToUtf8Uint8Array} from "@tutao/tutanota-utils"
import {calendarGroupId} from "../../calendar/CalendarTestUtils"
import {calendarGroupId} from "../../calendar/CalendarTestUtils.js"
import * as fs from "fs"
import * as cborg from "cborg"
import {CryptoError} from "@tutao/tutanota-crypto"

View file

@ -1,13 +1,13 @@
import o from "ospec"
import n from "../../nodemocker"
import {getDesktopIntegratorForPlatform} from "../../../../src/desktop/integration/DesktopIntegrator"
import n from "../../nodemocker.js"
import {getDesktopIntegratorForPlatform} from "../../../../src/desktop/integration/DesktopIntegrator.js"
import {downcast} from "@tutao/tutanota-utils"
import type {WindowManager} from "../../../../src/desktop/DesktopWindowManager"
import {lang} from "../../../../src/misc/LanguageViewModel"
import en from "../../../../src/translations/en"
import {DesktopIntegratorLinux} from "../../../../src/desktop/integration/DesktopIntegratorLinux"
import {DesktopIntegratorDarwin} from "../../../../src/desktop/integration/DesktopIntegratorDarwin"
import {DesktopIntegratorWin32} from "../../../../src/desktop/integration/DesktopIntegratorWin32"
import type {WindowManager} from "../../../../src/desktop/DesktopWindowManager.js"
import {lang} from "../../../../src/misc/LanguageViewModel.js"
import en from "../../../../src/translations/en.js"
import {DesktopIntegratorLinux} from "../../../../src/desktop/integration/DesktopIntegratorLinux.js"
import {DesktopIntegratorDarwin} from "../../../../src/desktop/integration/DesktopIntegratorDarwin.js"
import {DesktopIntegratorWin32} from "../../../../src/desktop/integration/DesktopIntegratorWin32.js"
const desktopEntry = `[Desktop Entry]
Name=Tutanota Desktop

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {applyScriptBuilder, removeScriptBuilder} from "../../../../src/desktop/integration/RegistryScriptGenerator"
import {applyScriptBuilder, removeScriptBuilder} from "../../../../src/desktop/integration/RegistryScriptGenerator.js"
o.spec("RegistryScriptGenerator Test", function () {

View file

@ -1,14 +1,14 @@
import o from "ospec"
import n from '../../nodemocker'
import {EndType, RepeatPeriod} from "../../../../src/api/common/TutanotaConstants"
import {DesktopAlarmScheduler, EncryptedAlarmNotification} from "../../../../src/desktop/sse/DesktopAlarmScheduler"
import type {AlarmScheduler} from "../../../../src/calendar/date/AlarmScheduler"
import {CryptoError} from "../../../../src/api/common/error/CryptoError"
import n from '../../nodemocker.js'
import {EndType, RepeatPeriod} from "../../../../src/api/common/TutanotaConstants.js"
import {DesktopAlarmScheduler, EncryptedAlarmNotification} from "../../../../src/desktop/sse/DesktopAlarmScheduler.js"
import type {AlarmScheduler} from "../../../../src/calendar/date/AlarmScheduler.js"
import {CryptoError} from "../../../../src/api/common/error/CryptoError.js"
import {downcast, lastThrow} from "@tutao/tutanota-utils"
import {WindowManager} from "../../../../src/desktop/DesktopWindowManager";
import {DesktopNotifier, NotificationResult} from "../../../../src/desktop/DesktopNotifier";
import {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage";
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade";
import {WindowManager} from "../../../../src/desktop/DesktopWindowManager.js";
import {DesktopNotifier, NotificationResult} from "../../../../src/desktop/DesktopNotifier.js";
import {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage.js";
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade.js";
import {assertThrows} from "@tutao/tutanota-test-utils";
const START_DATE = new Date(2019, 9, 10, 14).getTime()

View file

@ -1,11 +1,11 @@
import o from "ospec"
import {instance, matchers, verify, when} from "testdouble"
import {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage"
import {DesktopConfig} from "../../../../src/desktop/config/DesktopConfig"
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade"
import type {DesktopKeyStoreFacade} from "../../../../src/desktop/KeyStoreFacadeImpl"
import {makeKeyStoreFacade} from "../../../api/TestUtils"
import {DesktopConfigKey} from "../../../../src/desktop/config/ConfigKeys"
import {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage.js"
import {DesktopConfig} from "../../../../src/desktop/config/DesktopConfig.js"
import {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade.js"
import type {DesktopKeyStoreFacade} from "../../../../src/desktop/KeyStoreFacadeImpl.js"
import {makeKeyStoreFacade} from "../../TestUtils.js"
import {DesktopConfigKey} from "../../../../src/desktop/config/ConfigKeys.js"
o.spec("DesktopAlarmStorageTest", function () {

View file

@ -1,25 +1,25 @@
import o from "ospec"
import n from "../../nodemocker"
import n from "../../nodemocker.js"
import type {DeferredObject} from "@tutao/tutanota-utils"
import type {TimeoutMock} from "@tutao/tutanota-test-utils"
import {makeTimeoutMock} from "@tutao/tutanota-test-utils"
import {defer, delay, downcast, neverNull, noOp, numberRange} from "@tutao/tutanota-utils"
import {AlarmInterval} from "../../../../src/api/common/TutanotaConstants"
import {AlarmInterval} from "../../../../src/api/common/TutanotaConstants.js"
import * as url from "url"
import * as querystring from "querystring"
import {createMissedNotification} from "../../../../src/api/entities/sys/TypeRefs.js"
import {DesktopSseClient} from "../../../../src/desktop/sse/DesktopSseClient"
import {DesktopConfigEncKey, DesktopConfigKey} from "../../../../src/desktop/config/ConfigKeys"
import type {DesktopConfig} from "../../../../src/desktop/config/DesktopConfig"
import type {DesktopNotifier} from "../../../../src/desktop/DesktopNotifier"
import type {WindowManager} from "../../../../src/desktop/DesktopWindowManager"
import type {DesktopAlarmScheduler} from "../../../../src/desktop/sse/DesktopAlarmScheduler"
import type {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade"
import type {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage"
import type {LanguageViewModel} from "../../../../src/misc/LanguageViewModel"
import type {DesktopNetworkClient} from "../../../../src/desktop/DesktopNetworkClient"
import {ServiceUnavailableError, TooManyRequestsError} from "../../../../src/api/common/error/RestError"
import modelInfo from "../../../../src/api/entities/sys/ModelInfo"
import {DesktopSseClient} from "../../../../src/desktop/sse/DesktopSseClient.js"
import {DesktopConfigEncKey, DesktopConfigKey} from "../../../../src/desktop/config/ConfigKeys.js"
import type {DesktopConfig} from "../../../../src/desktop/config/DesktopConfig.js"
import type {DesktopNotifier} from "../../../../src/desktop/DesktopNotifier.js"
import type {WindowManager} from "../../../../src/desktop/DesktopWindowManager.js"
import type {DesktopAlarmScheduler} from "../../../../src/desktop/sse/DesktopAlarmScheduler.js"
import type {DesktopCryptoFacade} from "../../../../src/desktop/DesktopCryptoFacade.js"
import type {DesktopAlarmStorage} from "../../../../src/desktop/sse/DesktopAlarmStorage.js"
import type {LanguageViewModel} from "../../../../src/misc/LanguageViewModel.js"
import type {DesktopNetworkClient} from "../../../../src/desktop/DesktopNetworkClient.js"
import {ServiceUnavailableError, TooManyRequestsError} from "../../../../src/api/common/error/RestError.js"
import modelInfo from "../../../../src/api/entities/sys/ModelInfo.js"
o.spec("DesktopSseClient Test", function () {
const identifier = 'identifier'

View file

@ -1,14 +1,14 @@
import o from "ospec"
import {ArchiveDataType} from "../../../src/api/common/TutanotaConstants"
import {FileController} from "../../../src/file/FileController"
import {BlobFacade} from "../../../src/api/worker/facades/BlobFacade"
import {FileFacade} from "../../../src/api/worker/facades/FileFacade"
import {NativeFileApp} from "../../../src/native/common/FileApp"
import {ArchiveDataType} from "../../../src/api/common/TutanotaConstants.js"
import {FileController} from "../../../src/file/FileController.js"
import {BlobFacade} from "../../../src/api/worker/facades/BlobFacade.js"
import {FileFacade} from "../../../src/api/worker/facades/FileFacade.js"
import {NativeFileApp} from "../../../src/native/common/FileApp.js"
import {matchers, object, verify, when} from "testdouble"
import {FileReference} from "../../../src/api/common/utils/FileUtils"
import {FileReference} from "../../../src/api/common/utils/FileUtils.js"
import {neverNull} from "@tutao/tutanota-utils"
import {DataFile} from "../../../src/api/common/DataFile"
import {createBlob} from "../../../src/api/entities/sys/TypeRefs"
import {DataFile} from "../../../src/api/common/DataFile.js"
import {createBlob} from "../../../src/api/entities/sys/TypeRefs.js"
import {createFile} from "../../../src/api/entities/tutanota/TypeRefs.js"
const {anything, captor} = matchers

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {hexToRgb, isColorLight, rgbToHex} from "../../../src/gui/base/Color"
import {hexToRgb, isColorLight, rgbToHex} from "../../../src/gui/base/Color.js"
o.spec("color", function () {
o("hexToRGB 6digit", function () {
o(hexToRgb("#b73a9a")).deepEquals({

View file

@ -1,6 +1,6 @@
import o from "ospec"
import {Dialog} from "../../../src/gui/base/Dialog"
import {getConfirmation, getPosAndBoundsFromMouseEvent} from "../../../src/gui/base/GuiUtils"
import {Dialog} from "../../../src/gui/base/Dialog.js"
import {getConfirmation, getPosAndBoundsFromMouseEvent} from "../../../src/gui/base/GuiUtils.js"
import {downcast} from "@tutao/tutanota-utils"
o.spec("GuiUtils", function () {
o.spec("getConfirmation ok", function () {

View file

@ -1,9 +1,9 @@
import o from "ospec"
import type {Theme, ThemeId} from "../../../src/gui/theme"
import n from "../nodemocker"
import type {ThemeStorage} from "../../../src/gui/ThemeController"
import {ThemeController} from "../../../src/gui/ThemeController"
import type {ThemeCustomizations} from "../../../src/misc/WhitelabelCustomizations"
import type {Theme, ThemeId} from "../../../src/gui/theme.js"
import n from "../nodemocker.js"
import type {ThemeStorage} from "../../../src/gui/ThemeController.js"
import {ThemeController} from "../../../src/gui/ThemeController.js"
import type {ThemeCustomizations} from "../../../src/misc/WhitelabelCustomizations.js"
import {downcast} from "@tutao/tutanota-utils"
o.spec("Theme Controller", function () {

View file

@ -1,5 +1,5 @@
import o from "ospec"
import type {DomMutation} from "../../../../src/gui/animation/Animations"
import type {DomMutation} from "../../../../src/gui/animation/Animations.js"
import {
alpha,
AlphaEnum,
@ -8,10 +8,10 @@ import {
DefaultAnimationTime,
transform,
TransformEnum
} from "../../../../src/gui/animation/Animations"
import {ease} from "../../../../src/gui/animation/Easing"
import {client} from "../../../../src/misc/ClientDetector"
import {DeviceType} from "../../../../src/misc/ClientConstants"
} from "../../../../src/gui/animation/Animations.js"
import {ease} from "../../../../src/gui/animation/Easing.js"
import {client} from "../../../../src/misc/ClientDetector.js"
import {DeviceType} from "../../../../src/misc/ClientConstants.js"
import {assertNotNull, downcast} from "@tutao/tutanota-utils"
client.device = DeviceType.DESKTOP

View file

@ -1,9 +1,9 @@
import o from "ospec"
import {List, ScrollBuffer} from "../../../../src/gui/base/List"
import {List, ScrollBuffer} from "../../../../src/gui/base/List.js"
import {downcast, noOp} from "@tutao/tutanota-utils"
import {createMail} from "../../../../src/api/entities/tutanota/TypeRefs.js"
import {GENERATED_MAX_ID} from "../../../../src/api/common/utils/EntityUtils";
import type {ListElement} from "../../../../src/api/common/utils/EntityUtils"
import {GENERATED_MAX_ID} from "../../../../src/api/common/utils/EntityUtils.js";
import type {ListElement} from "../../../../src/api/common/utils/EntityUtils.js"
function dummySort() {
return 0

View file

@ -1,12 +1,12 @@
import o from "ospec"
import {createWizardDialog, WizardPageWrapper} from "../../../../src/gui/base/WizardDialogN"
import {Dialog} from "../../../../src/gui/base/Dialog"
import {EnterDomainPageAttrs} from "../../../../src/settings/emaildomain/EnterDomainPage"
import {createWizardDialog, WizardPageWrapper} from "../../../../src/gui/base/WizardDialogN.js"
import {Dialog} from "../../../../src/gui/base/Dialog.js"
import {EnterDomainPageAttrs} from "../../../../src/settings/emaildomain/EnterDomainPage.js"
import stream from "mithril/stream";
import {createCustomerInfo} from "../../../../src/api/entities/sys/TypeRefs.js";
import {createDnsRecord} from "../../../../src/api/entities/sys/TypeRefs.js";
import {DomainDnsStatus} from "../../../../src/settings/DomainDnsStatus";
import {AddDomainData} from "../../../../src/settings/emaildomain/AddDomainWizard";
import {DomainDnsStatus} from "../../../../src/settings/DomainDnsStatus.js";
import {AddDomainData} from "../../../../src/settings/emaildomain/AddDomainWizard.js";
import {createGroupInfo} from "../../../../src/api/entities/sys/TypeRefs.js";
const data: AddDomainData = {

View file

@ -1,19 +1,19 @@
import o from "ospec"
import {DisplayMode, LoginState, LoginViewModel} from "../../../src/login/LoginViewModel"
import type {LoginController} from "../../../src/api/main/LoginController"
import {DisplayMode, LoginState, LoginViewModel} from "../../../src/login/LoginViewModel.js"
import type {LoginController} from "../../../src/api/main/LoginController.js"
import {createUser} from "../../../src/api/entities/sys/TypeRefs.js"
import type {IUserController} from "../../../src/api/main/UserController"
import type {IUserController} from "../../../src/api/main/UserController.js"
import {createGroupInfo} from "../../../src/api/entities/sys/TypeRefs.js"
import {SecondFactorHandler} from "../../../src/misc/2fa/SecondFactorHandler"
import {SecondFactorHandler} from "../../../src/misc/2fa/SecondFactorHandler.js"
import {assertThrows} from "@tutao/tutanota-test-utils"
import type {CredentialsAndDatabaseKey, ICredentialsProvider, PersistentCredentials,} from "../../../src/misc/credentials/CredentialsProvider"
import {KeyPermanentlyInvalidatedError} from "../../../src/api/common/error/KeyPermanentlyInvalidatedError"
import {CredentialAuthenticationError} from "../../../src/api/common/error/CredentialAuthenticationError"
import type {Credentials} from "../../../src/misc/credentials/Credentials"
import type {CredentialsAndDatabaseKey, ICredentialsProvider, PersistentCredentials,} from "../../../src/misc/credentials/CredentialsProvider.js"
import {KeyPermanentlyInvalidatedError} from "../../../src/api/common/error/KeyPermanentlyInvalidatedError.js"
import {CredentialAuthenticationError} from "../../../src/api/common/error/CredentialAuthenticationError.js"
import type {Credentials} from "../../../src/misc/credentials/Credentials.js"
import {SessionType} from "../../../src/api/common/SessionType.js";
import {instance, matchers, object, replace, verify, when} from "testdouble"
import {AccessExpiredError, NotAuthenticatedError} from "../../../src/api/common/error/RestError"
import {DatabaseKeyFactory} from "../../../src/misc/credentials/DatabaseKeyFactory"
import {AccessExpiredError, NotAuthenticatedError} from "../../../src/api/common/error/RestError.js"
import {DatabaseKeyFactory} from "../../../src/misc/credentials/DatabaseKeyFactory.js"
const {anything} = matchers

View file

@ -1,13 +1,13 @@
import o from "ospec"
import {_findMatchingRule, _matchesRegularExpression} from "../../../src/mail/model/InboxRuleHandler"
import {_findMatchingRule, _matchesRegularExpression} from "../../../src/mail/model/InboxRuleHandler.js"
import type {InboxRule} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createInboxRule} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {EntityRestClientMock} from "../../api/worker/EntityRestClientMock"
import {EntityClient} from "../../../src/api/common/EntityClient"
import {EntityRestClientMock} from "../api/worker/rest/EntityRestClientMock.js"
import {EntityClient} from "../../../src/api/common/EntityClient.js"
import type {Mail} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createMail} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createMailAddress} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {InboxRuleType} from "../../../src/api/common/TutanotaConstants"
import {InboxRuleType} from "../../../src/api/common/TutanotaConstants.js"
o.spec("InboxRuleHandlerTest", function () {
o.spec("Test _matchesRegularExpression", function () {
o(" check invalid regular expressions", function () {

View file

@ -1,5 +1,5 @@
import o from "ospec"
import {knowledgeBaseSearch} from "../../../src/knowledgebase/model/KnowledgeBaseSearchFilter"
import {knowledgeBaseSearch} from "../../../src/knowledgebase/model/KnowledgeBaseSearchFilter.js"
import type {KnowledgeBaseEntry} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createKnowledgeBaseEntry} from "../../../src/api/entities/tutanota/TypeRefs.js"
import {createKnowledgeBaseEntryKeyword} from "../../../src/api/entities/tutanota/TypeRefs.js"

Some files were not shown because too many files have changed in this diff Show more