From 14549020aacf45ac2eaae0723bb265c7ba517eab Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Mon, 4 Mar 2024 01:39:18 +0300 Subject: [PATCH] test(e2e): added worker tests --- e2e/cjs/tests/base-client.js | 2 +- e2e/config.js | 2 + e2e/esm/tests/base-client.js | 2 +- e2e/package.json | 1 + e2e/runner.js | 4 + e2e/ts/tests/01.auth.ts | 4 +- e2e/ts/tests/05.worker.ts | 85 +++++++++++++++++++ e2e/ts/tests/_worker.ts | 18 ++++ e2e/ts/tests/packaging/base-client.ts | 2 +- .../core/src/highlevel/worker/protocol.ts | 3 +- 10 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 e2e/ts/tests/05.worker.ts create mode 100644 e2e/ts/tests/_worker.ts diff --git a/e2e/cjs/tests/base-client.js b/e2e/cjs/tests/base-client.js index c1bd3b92..1921d311 100644 --- a/e2e/cjs/tests/base-client.js +++ b/e2e/cjs/tests/base-client.js @@ -1,4 +1,4 @@ -const { BaseTelegramClient } = require('@mtcute/core') +const { BaseTelegramClient } = require('@mtcute/core/client.js') const { describe, it } = require('mocha') const { expect } = require('chai') diff --git a/e2e/config.js b/e2e/config.js index 7aabe1c9..af1d6e14 100644 --- a/e2e/config.js +++ b/e2e/config.js @@ -11,6 +11,8 @@ module.exports = { getFiles: () => 'tests/**/*.ts', beforeAll: () => ['tsc', 'node build-esm.cjs'], runFile: (file) => { + if (require('path').basename(file)[0] === '_') return null + if (file.startsWith('tests/packaging/')) { // packaging tests - we need to make sure everything imports and works return [ diff --git a/e2e/esm/tests/base-client.js b/e2e/esm/tests/base-client.js index 645ccb9b..818b5c97 100644 --- a/e2e/esm/tests/base-client.js +++ b/e2e/esm/tests/base-client.js @@ -1,7 +1,7 @@ import { expect } from 'chai' import { describe, it } from 'mocha' -import { BaseTelegramClient } from '@mtcute/core' +import { BaseTelegramClient } from '@mtcute/core/client.js' import { getApiParams } from '../utils.js' diff --git a/e2e/package.json b/e2e/package.json index 7a986e88..db322429 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -18,6 +18,7 @@ "@mtcute/tl-runtime": "*", "@mtcute/tl-utils": "*", "@mtcute/wasm": "*", + "@mtcute/web": "*", "@types/chai": "^4.3.8", "@types/mocha": "^10.0.2", "chai": "^4.3.10", diff --git a/e2e/runner.js b/e2e/runner.js index 412c821d..dd591f8f 100644 --- a/e2e/runner.js +++ b/e2e/runner.js @@ -21,6 +21,10 @@ function runForFile(dir, file, single = true) { let cmds = runFile(file) + if (!cmds) { + return + } + const options = { env: { ...env, diff --git a/e2e/ts/tests/01.auth.ts b/e2e/ts/tests/01.auth.ts index 9fb3c0b0..25813073 100644 --- a/e2e/ts/tests/01.auth.ts +++ b/e2e/ts/tests/01.auth.ts @@ -1,8 +1,8 @@ import { expect } from 'chai' import { describe, it } from 'mocha' -import { BaseTelegramClient, MtUnsupportedError } from '@mtcute/core' -import { TelegramClient } from '@mtcute/core/client.js' +import { MtUnsupportedError } from '@mtcute/core' +import { BaseTelegramClient, TelegramClient } from '@mtcute/core/client.js' import { getApiParams } from '../utils.js' diff --git a/e2e/ts/tests/05.worker.ts b/e2e/ts/tests/05.worker.ts new file mode 100644 index 00000000..d59dffca --- /dev/null +++ b/e2e/ts/tests/05.worker.ts @@ -0,0 +1,85 @@ +/* eslint-disable no-restricted-imports */ +import { expect } from 'chai' +import { describe, it } from 'mocha' +import path from 'path' +import { Worker } from 'worker_threads' + +import { TelegramClient } from '@mtcute/core/client.js' +import { Message, TelegramWorkerPort, tl } from '@mtcute/node' + +import { getApiParams, waitFor } from '../utils.js' +import type { CustomMethods } from './_worker.js' + +describe('5. worker', async function () { + this.timeout(300_000) + + const worker = new Worker(path.resolve(__dirname, '_worker.js')) + + const port = new TelegramWorkerPort({ + worker, + }) + const portClient = new TelegramClient({ client: port }) + + it('should make api calls', async function () { + const res = await port.call({ _: 'help.getConfig' }) + + expect(res._).to.equal('config') + }) + + it('should call custom methods', async function () { + const hello = await port.invokeCustom('hello') + expect(hello).to.equal('world') + + const sum = await port.invokeCustom('sum', 2, 3) + expect(sum).to.equal(5) + }) + + it('should throw errors', async function () { + try { + await port.call({ _: 'test.useError' }) + throw new Error('should have thrown') + } catch (e) { + expect(e).to.be.an.instanceOf(tl.RpcError) + } + }) + + it('should receive updates', async function () { + const client2 = new TelegramClient(getApiParams('dc2.session')) + + try { + await client2.connect() + await port.startUpdatesLoop() + + const me = await portClient.getMe() + let username = me.username + + if (!username) { + username = `mtcute_e2e_${Math.random().toString(36).slice(2, 8)}` + await portClient.setMyUsername(username) + } + + const msgs: Message[] = [] + portClient.on('new_message', (msg) => { + msgs.push(msg) + }) + + const testText = `test ${Math.random()}` + await client2.sendText(username, testText) + + await waitFor(() => { + expect(msgs.length).to.be.greaterThan(0) + expect(msgs[0].text).to.equal(testText) + }) + } catch (e) { + await client2.close() + throw e + } + + await client2.close() + }) + + this.afterAll(async () => { + await port.close() + worker.terminate() + }) +}) diff --git a/e2e/ts/tests/_worker.ts b/e2e/ts/tests/_worker.ts new file mode 100644 index 00000000..7b0f43f1 --- /dev/null +++ b/e2e/ts/tests/_worker.ts @@ -0,0 +1,18 @@ +import { WorkerCustomMethods } from '@mtcute/core/worker.js' +import { BaseTelegramClient, TelegramWorker } from '@mtcute/node' + +import { getApiParams } from '../utils.js' + +const customMethods = { + hello: async () => 'world', + sum: async (a: number, b: number) => a + b, +} as const satisfies WorkerCustomMethods +export type CustomMethods = typeof customMethods + +const client = new BaseTelegramClient(getApiParams('dc1.session')) + +// eslint-disable-next-line no-new +new TelegramWorker({ + client, + customMethods, +}) diff --git a/e2e/ts/tests/packaging/base-client.ts b/e2e/ts/tests/packaging/base-client.ts index 7d1aa693..665cbcef 100644 --- a/e2e/ts/tests/packaging/base-client.ts +++ b/e2e/ts/tests/packaging/base-client.ts @@ -1,7 +1,7 @@ import { expect } from 'chai' import { describe, it } from 'mocha' -import { BaseTelegramClient } from '@mtcute/core' +import { BaseTelegramClient } from '@mtcute/core/client.js' // @fix-import import { getApiParams } from '../../utils' diff --git a/packages/core/src/highlevel/worker/protocol.ts b/packages/core/src/highlevel/worker/protocol.ts index 859aeb26..0fbb293f 100644 --- a/packages/core/src/highlevel/worker/protocol.ts +++ b/packages/core/src/highlevel/worker/protocol.ts @@ -46,4 +46,5 @@ export type ClientMessageHandler = (message: WorkerOutboundMessage) => void export type RespondFn = (message: WorkerOutboundMessage) => void export type WorkerMessageHandler = (message: WorkerInboundMessage, respond: RespondFn) => void -export type WorkerCustomMethods = Record Promise> +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type WorkerCustomMethods = Record Promise>