mirror of
https://github.com/tutao/tutanota.git
synced 2025-10-19 16:03:43 +00:00
Merge api/client tests into a single entry point
This commit is contained in:
parent
86e180b2c8
commit
7ec57e1190
134 changed files with 1121 additions and 1318 deletions
|
@ -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",
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
})()
|
|
@ -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')
|
||||
})()
|
||||
|
|
@ -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')
|
||||
})()
|
||||
|
|
@ -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)
|
||||
})()
|
||||
|
||||
|
||||
|
||||
|
|
@ -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')
|
||||
})()
|
||||
|
||||
|
27
test/test.js
27
test/test.js
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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
188
test/tests/Suite.ts
Normal 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"
|
||||
}
|
||||
}
|
|
@ -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() {
|
|
@ -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)
|
|
@ -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")
|
|
@ -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({
|
|
@ -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
|
|
@ -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 () {
|
|
@ -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 () {
|
|
@ -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
|
|
@ -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?",
|
|
@ -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 () {
|
|
@ -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",
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 () {
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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 () {
|
|
@ -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 () {
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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 () {
|
|
@ -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)
|
|
@ -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> = {}
|
|
@ -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
|
||||
|
|
@ -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 () {
|
|
@ -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 = {
|
|
@ -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
|
||||
|
|
@ -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}
|
|
@ -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 }
|
||||
|
|
@ -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 () {
|
|
@ -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,
|
|
@ -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()
|
|
@ -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)
|
|
@ -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()
|
|
@ -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
|
|
@ -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
|
|
@ -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 () {
|
|
@ -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", () => {
|
|
@ -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([])
|
|
@ -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
|
98
test/tests/bootstrapTests.ts
Normal file
98
test/tests/bootstrapTests.ts
Normal 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
|
||||
}
|
|
@ -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
|
|
@ -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)
|
|
@ -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) {
|
|
@ -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"
|
|
@ -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 () {
|
|
@ -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 () {
|
|
@ -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"
|
||||
|
|
@ -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";
|
|
@ -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
|
|
@ -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 = {
|
|
@ -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
|
|
@ -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 (
|
|
@ -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)
|
||||
})
|
||||
})
|
|
@ -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 () {
|
|
@ -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
|
||||
|
|
@ -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", () => {
|
|
@ -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", () => {
|
|
@ -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"
|
|
@ -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
|
|
@ -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)
|
|
@ -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"
|
|
@ -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)
|
|
@ -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 () {
|
|
@ -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: {
|
|
@ -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))
|
|
@ -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
|
|
@ -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", () => {
|
|
@ -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
|
|
@ -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"
|
|
@ -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
|
|
@ -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 () {
|
||||
|
|
@ -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()
|
|
@ -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 () {
|
||||
|
|
@ -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'
|
|
@ -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
|
|
@ -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({
|
|
@ -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 () {
|
|
@ -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 () {
|
|
@ -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
|
|
@ -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
|
|
@ -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 = {
|
|
@ -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
|
||||
|
|
@ -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 () {
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue