137 lines
5.0 KiB
TypeScript
137 lines
5.0 KiB
TypeScript
import { Presence, ChatModification, delay } from '../WAConnection/WAConnection'
|
|
import {promises as fs} from 'fs'
|
|
import * as assert from 'assert'
|
|
import fetch from 'node-fetch'
|
|
import { WAConnectionTest, testJid } from './Common'
|
|
|
|
WAConnectionTest('Misc', (conn) => {
|
|
it('should tell if someone has an account on WhatsApp', async () => {
|
|
const response = await conn.isOnWhatsApp(testJid)
|
|
assert.strictEqual(response, true)
|
|
|
|
const responseFail = await conn.isOnWhatsApp('abcd@s.whatsapp.net')
|
|
assert.strictEqual(responseFail, false)
|
|
})
|
|
it('should return the status', async () => {
|
|
const response = await conn.getStatus(testJid)
|
|
assert.strictEqual(typeof response.status, 'string')
|
|
})
|
|
it('should update status', async () => {
|
|
const newStatus = 'v cool status'
|
|
|
|
const waitForEvent = new Promise (resolve => {
|
|
conn.on ('user-status-update', ({jid, status}) => {
|
|
if (jid === conn.user.jid) {
|
|
assert.equal (status, newStatus)
|
|
conn.removeAllListeners ('user-status-update')
|
|
resolve ()
|
|
}
|
|
})
|
|
})
|
|
|
|
const response = await conn.getStatus()
|
|
assert.strictEqual(typeof response.status, 'string')
|
|
|
|
await delay (1000)
|
|
|
|
await conn.setStatus (newStatus)
|
|
const response2 = await conn.getStatus()
|
|
assert.equal (response2.status, newStatus)
|
|
|
|
await waitForEvent
|
|
|
|
await delay (1000)
|
|
|
|
await conn.setStatus (response.status) // update back
|
|
})
|
|
it('should return the stories', async () => {
|
|
await conn.getStories()
|
|
})
|
|
it('should change the profile picture', async () => {
|
|
await delay (5000)
|
|
|
|
const ppUrl = await conn.getProfilePicture(conn.user.jid)
|
|
const fetched = await fetch(ppUrl, { headers: { Origin: 'https://web.whatsapp.com' } })
|
|
const buff = await fetched.buffer ()
|
|
|
|
const newPP = await fs.readFile ('./Media/cat.jpeg')
|
|
const response = await conn.updateProfilePicture (conn.user.jid, newPP)
|
|
|
|
await delay (10000)
|
|
|
|
await conn.updateProfilePicture (conn.user.jid, buff) // revert back
|
|
})
|
|
it('should return the profile picture', async () => {
|
|
const response = await conn.getProfilePicture(testJid)
|
|
assert.ok(response)
|
|
assert.rejects(conn.getProfilePicture('abcd@s.whatsapp.net'))
|
|
})
|
|
it('should send typing indicator', async () => {
|
|
const response = await conn.updatePresence(testJid, Presence.composing)
|
|
assert.ok(response)
|
|
})
|
|
it('should mark a chat unread', async () => {
|
|
const waitForEvent = new Promise (resolve => {
|
|
conn.on ('chat-update', ({jid, count}) => {
|
|
if (jid === testJid) {
|
|
assert.ok (count < 0)
|
|
conn.removeAllListeners ('chat-update')
|
|
resolve ()
|
|
}
|
|
})
|
|
})
|
|
await conn.sendReadReceipt(testJid, null, -2)
|
|
await waitForEvent
|
|
})
|
|
it('should archive & unarchive', async () => {
|
|
await conn.modifyChat (testJid, ChatModification.archive)
|
|
await delay (2000)
|
|
await conn.modifyChat (testJid, ChatModification.unarchive)
|
|
})
|
|
it('should pin & unpin a chat', async () => {
|
|
await conn.modifyChat (testJid, ChatModification.pin)
|
|
await delay (2000)
|
|
await conn.modifyChat (testJid, ChatModification.unpin)
|
|
})
|
|
it('should mute & unmute a chat', async () => {
|
|
const waitForEvent = new Promise (resolve => {
|
|
conn.on ('chat-update', ({jid, mute}) => {
|
|
if (jid === testJid ) {
|
|
assert.ok (mute)
|
|
conn.removeAllListeners ('chat-update')
|
|
resolve ()
|
|
}
|
|
})
|
|
})
|
|
await conn.modifyChat (testJid, ChatModification.mute, 8*60*60*1000) // 8 hours in the future
|
|
await waitForEvent
|
|
await delay (2000)
|
|
await conn.modifyChat (testJid, ChatModification.unmute)
|
|
})
|
|
it('should return search results', async () => {
|
|
const jids = [null, testJid]
|
|
for (let i in jids) {
|
|
const response = await conn.searchMessages('Hello', jids[i], 25, 1)
|
|
assert.ok (response.messages)
|
|
assert.ok (response.messages.length >= 0)
|
|
}
|
|
})
|
|
it('should load a single message', async () => {
|
|
const {messages} = await conn.loadMessages (testJid, 10)
|
|
for (var message of messages) {
|
|
const loaded = await conn.loadMessage (testJid, message.key.id)
|
|
assert.equal (loaded.key.id, message.key.id)
|
|
await delay (1000)
|
|
}
|
|
})
|
|
|
|
it('should update presence', async () => {
|
|
const presences = Object.values(Presence)
|
|
for (const i in presences) {
|
|
const response = await conn.updatePresence(testJid, presences[i])
|
|
assert.strictEqual(response.status, 200)
|
|
|
|
await delay(1500)
|
|
}
|
|
})
|
|
}) |