mtcute/packages/core/tests/e2e/receiving-updates.spec.ts
2021-06-15 03:12:22 +03:00

173 lines
4.8 KiB
TypeScript

import { describe, it } from 'mocha'
import { expect } from 'chai'
import { BaseTelegramClient, bufferToBigInt, defaultDcs, randomBytes, tl } from '../../src'
import { sleep } from '../../src/utils/misc-utils'
require('dotenv-flow').config()
async function createClientPair(
session1: string,
session2: string
): Promise<[BaseTelegramClient, BaseTelegramClient]> {
const client1 = new BaseTelegramClient({
apiId: process.env.API_ID!,
apiHash: process.env.API_HASH!,
primaryDc: defaultDcs.defaultTestDc,
})
if (session1.indexOf(':') > -1) {
// bot token
await client1.call({
_: 'auth.importBotAuthorization',
apiId: parseInt(process.env.API_ID!),
apiHash: process.env.API_HASH!,
botAuthToken: session1,
flags: 0
})
} else {
client1.importSession(session1)
}
const client2 = new BaseTelegramClient({
apiId: process.env.API_ID!,
apiHash: process.env.API_HASH!,
primaryDc: defaultDcs.defaultTestDc,
})
if (session2.indexOf(':') > -1) {
// bot token
await client2.call({
_: 'auth.importBotAuthorization',
apiId: parseInt(process.env.API_ID!),
apiHash: process.env.API_HASH!,
botAuthToken: session2,
flags: 0
})
} else {
client2.importSession(session2)
}
return [client1, client2]
}
describe('e2e : receiving updates', function () {
if (!process.env.API_ID || !process.env.API_HASH) {
console.warn('Warning: skipping e2e updates test (no API_ID or API_HASH)')
return
}
if (!process.env.BOT_TOKEN || !process.env.USER_SESSION) {
console.warn('Warning: skipping e2e updates test (no API_ID or API_HASH)')
return
}
this.timeout(60000)
it('receiving from user by bot', async () => {
const [actor, observer] = await createClientPair(
process.env.USER_SESSION!,
process.env.BOT_TOKEN!
)
await observer.connect()
await observer.waitUntilUsable()
let updatesCount = 0
observer['_handleUpdate'] = function() {
updatesCount += 1
}
const bot = await actor.call({
_: 'contacts.resolveUsername',
username: process.env.BOT_USERNAME!
}).then((res) => res.users[0])
expect(bot._).eq('user')
const inputPeer: tl.TypeInputPeer = {
_: 'inputPeerUser',
userId: bot.id,
accessHash: (bot as tl.RawUser).accessHash!
}
await actor.call({
_: 'messages.startBot',
bot: {
_: 'inputUser',
userId: bot.id,
accessHash: (bot as tl.RawUser).accessHash!
},
peer: inputPeer,
randomId: bufferToBigInt(randomBytes(8)),
startParam: '123'
})
for (let i = 0; i < 5; i++) {
await actor.call({
_: 'messages.sendMessage',
peer: inputPeer,
randomId: bufferToBigInt(randomBytes(8)),
message: `Test ${i}`
})
await sleep(1000)
}
// to make sure the updates were delivered
await sleep(5000)
// 5 messages + /start = 6
// it is assumed that there were no gaps
expect(updatesCount).gte(6)
await actor.close()
await observer.close()
})
it('receiving from user by user', async () => {
const [actor, observer] = await createClientPair(
process.env.USER_SESSION!,
process.env.USER_OTHER_DC_SESSION!
)
await observer.connect()
await observer.waitUntilUsable()
let updatesCount = 0
observer['_handleUpdate'] = function() {
updatesCount += 1
}
const user = await actor.call({
_: 'contacts.resolveUsername',
username: process.env.USER_OTHER_DC_USERNAME!
}).then((res) => res.users[0])
expect(user._).eq('user')
const inputPeer: tl.TypeInputPeer = {
_: 'inputPeerUser',
userId: user.id,
accessHash: (user as tl.RawUser).accessHash!
}
for (let i = 0; i < 5; i++) {
await sleep(1000)
await actor.call({
_: 'messages.sendMessage',
peer: inputPeer,
randomId: bufferToBigInt(randomBytes(8)),
message: `Test ${i}`
})
}
// to make sure the updates were delivered
await sleep(5000)
// 5 messages
// it is assumed that there were no gaps
expect(updatesCount).gte(5)
await actor.close()
await observer.close()
})
})