pzp-db/test/on-record-added.test.js

63 lines
1.6 KiB
JavaScript

const test = require('node:test')
const assert = require('node:assert')
const path = require('node:path')
const os = require('node:os')
const p = require('node:util').promisify
const rimraf = require('rimraf')
const Keypair = require('pzp-keypair')
const { createPeer } = require('./util')
const DIR = path.join(os.tmpdir(), 'pzp-db-on-msg-added')
rimraf.sync(DIR)
test('onRecordAdded', async (t) => {
const peer = createPeer({
keypair: Keypair.generate('ed25519', 'alice'),
path: DIR,
})
await peer.db.loaded()
const account = await p(peer.db.account.create)({
subdomain: 'person',
_nonce: 'alice',
})
let publishedRec1 = false
const listenedRecs = []
var remove = peer.db.onRecordAdded((rec) => {
listenedRecs.push(rec)
if (rec.msg.data?.text === 'I am hungry') {
assert.equal(publishedRec1, true, 'onRecordAdded triggered after publish')
}
})
const rec1 = await new Promise((resolve, reject) => {
peer.db.feed.publish(
{
account,
domain: 'post',
data: { text: 'I am hungry' },
},
(err, rec) => {
publishedRec1 = true
if (err) reject(err)
else resolve(rec)
}
)
})
assert.equal(rec1.msg.data.text, 'I am hungry', 'msg1 text correct')
await p(setTimeout)(500)
assert.equal(listenedRecs.length, 3)
assert.equal(listenedRecs[0].msg.metadata.account, 'self', 'account root')
assert.equal(listenedRecs[1].msg.data, null, 'root')
assert.equal(listenedRecs[1].msg.metadata.dataSize, 0, 'root')
assert.deepEqual(listenedRecs[2], rec1, 'actual record')
remove()
await p(peer.close)(true)
})