mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-03-31 20:36:19 +00:00
* nodejs: addon
* rename
* changes
* change lib name
* package
* lib path
* simplex-chat-nodejs: fix library paths
* simplex-chat-nodejs: change addon name
* simplex-chat-nodejs: install libs, adjust package and installation
* simplex-chat-nodejs: add npmignore
* gitignore: add additional nodejs path
* simplex-chat-nodejs: fix shim name
* gitignore: ignore nodejs package lock
* simplex-chat-nodejs: rename shim to underscore
* simplex-chat-nodejs: fix library loading on Mac
* simplex-chat-nodejs: expose low-level functions, move tests
* simplex-chat-nodejs: expose shim fucntions
* simplex-chat-nodejs: fixed libs version
* simplex-chat-nodejs: switch to official repository
* simpelx-chat-nodejs: adjust release tag
* async addon, tests
* refactor, fixes
* high level chat api
* simplify cpp add-on - move logic to JS, fix API
* api for events, api test
* update @simplex-chat/types
* Revert "update @simplex-chat/types"
This reverts commit da3f89866f.
* change @simplex-chat/types version
* receiver for any events, wait with timeout
* low-level bot example
* typedoc
* network connection events
* declarative bot api
* readme, docs
* update docs
* update readme
* add liveMessage support
* allow passing welcome message as string
* @simplex-chat/webrtc-client 6.5.0-beta.3
* bot test
* concurrent connection in tests
* nodejs/download-libs: cleanup on version mismatch
* nodejs/download-libs: bump libs version
* do not handle signals in Haskell
* update bot examples
* flatten docs and use local links to code
* update readme
* 6.5.0-beta.4
* include more files in npm package, 6.5.0-beta.4.2
* .gitignore
---------
Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
Co-authored-by: shum <github.shum@liber.li>
61 lines
2.6 KiB
TypeScript
61 lines
2.6 KiB
TypeScript
import * as path from "path"
|
|
import * as fs from "fs"
|
|
import * as assert from "assert"
|
|
import {CEvt, T} from "@simplex-chat/types"
|
|
import {api, bot, util} from ".."
|
|
|
|
const CT = T.ChatType
|
|
|
|
describe("Bot tests (use preset servers)", () => {
|
|
const tmpDir = "./tests/tmp"
|
|
const botPath = path.join(tmpDir, "bot")
|
|
const alicePath = path.join(tmpDir, "alice")
|
|
|
|
beforeEach(() => fs.mkdirSync(tmpDir, {recursive: true}))
|
|
afterEach(() => fs.rmSync(tmpDir, {recursive: true, force: true}))
|
|
|
|
it("should reply to messages", async () => {
|
|
// run bot
|
|
const [chat, botUser, botAddress] = await bot.run({
|
|
profile: {displayName: "Squaring bot", fullName: ""},
|
|
dbOpts: {dbFilePrefix: botPath, dbKey: ""},
|
|
options: {
|
|
addressSettings: {welcomeMessage: "If you send me a number, I will calculate its square."},
|
|
},
|
|
onMessage: async (ci, content) => {
|
|
const n = +content.text
|
|
const reply = typeof n === "number" && !isNaN(n) ? `${n} * ${n} = ${n * n}` : `this is not a number`
|
|
await chat.apiSendTextReply(ci, reply)
|
|
}
|
|
})
|
|
assert(typeof botAddress === "object")
|
|
// create user
|
|
const alice = await api.ChatApi.init(alicePath)
|
|
const aliceUser = await alice.apiCreateActiveUser({displayName: "alice", fullName: ""})
|
|
await alice.startChat()
|
|
// connect to bot
|
|
const [plan, link] = await alice.apiConnectPlan(aliceUser.userId, util.contactAddressStr(botAddress.connLinkContact))
|
|
assert(plan.type === "contactAddress")
|
|
await expect(alice.apiConnect(aliceUser.userId, false, link)).resolves.toBe(api.ConnReqType.Contact)
|
|
const [botContact, aliceContact] = await Promise.all([
|
|
(await alice.wait("contactConnected")).contact,
|
|
(await chat.wait("contactConnected")).contact
|
|
])
|
|
expect(botContact.profile.displayName).toBe("Squaring bot")
|
|
// send message to bot
|
|
const isMessage = ({contactId}: T.Contact, msg: string) => (evt: CEvt.NewChatItems) =>
|
|
evt.chatItems.some(ci => ci.chatInfo.type === CT.Direct && ci.chatInfo.contact.contactId === contactId && ci.chatItem.meta.itemText === msg)
|
|
await alice.apiSendTextMessage([CT.Direct, botContact.contactId], "2")
|
|
console.log("after sending message")
|
|
await alice.wait("newChatItems", isMessage(botContact, "2 * 2 = 4"), 5000)
|
|
// cleanup
|
|
await alice.apiDeleteChat(CT.Direct, botContact.contactId)
|
|
await chat.wait("contactDeletedByContact", ({contact}) => contact.contactId === aliceContact.contactId)
|
|
await chat.apiDeleteUserAddress(botUser.userId)
|
|
await chat.stopChat()
|
|
await chat.close()
|
|
await alice.stopChat()
|
|
await alice.close()
|
|
}, 30000)
|
|
})
|