nostrdb-rs

nostrdb in rust!
git clone git://jb55.com/nostrdb-rs
Log | Files | Refs | Submodules | README | LICENSE

commit 6e8b9a123e5afa3be8066d5bb39d523a81b6d130
parent ce2f5dbc3e289c65860982505b28adff053b49d3
Author: Ken Sedgwick <ken@bonsai.com>
Date:   Mon, 27 Jan 2025 14:29:30 -0800

add (passing) unit test for Mention::Profile relays

Diffstat:
Msrc/block.rs | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+), 0 deletions(-)

diff --git a/src/block.rs b/src/block.rs @@ -379,4 +379,55 @@ mod tests { test_util::cleanup_db(&db); } + + #[test] + fn nprofile_relays_work() { + let db = "target/testdbs/nprofile_relays"; + test_util::cleanup_db(&db); + + { + let ndb = Ndb::new(db, &Config::new()).expect("ndb"); + ndb.process_event("[\"EVENT\",\"s\",{\"kind\":1,\"id\":\"06449981af8f0e00503ea88deb6c2d3e9d65e1e4f032744d9ca4949dce1ce296\",\"pubkey\":\"850605096dbfb50b929e38a6c26c3d56c425325c85e05de29b759bc0e5d6cebc\",\"created_at\":1737747111,\"tags\":[[\"p\",\"3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d\"]],\"content\":\"This sample event has the mention example from NIP-19: nostr:nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p\nPls ignore ...\",\"sig\":\"26a4d8f51af0ca7f6c7140ba2487ed4a99edc03e95692e01e636917417dac78989e735559a3a05e1805f242aa634c545fd4d820b962c19301faa55b05bea5da7\"}]").expect("process ok"); + } + { + let ndb = Ndb::new(db, &Config::new()).expect("ndb"); + let id = + hex::decode("06449981af8f0e00503ea88deb6c2d3e9d65e1e4f032744d9ca4949dce1ce296") + .expect("hex id"); + let pubkey = + hex::decode("3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d") + .expect("fiatjaf pubkey"); + let txn = Transaction::new(&ndb).expect("txn"); + let id_bytes: [u8; 32] = id.try_into().expect("id bytes"); + let pubkey_bytes: [u8; 32] = pubkey.try_into().expect("pubkey bytes"); + + let note = ndb.get_note_by_id(&txn, &id_bytes).unwrap(); + let blocks = ndb + .get_blocks_by_key(&txn, note.key().unwrap()) + .expect("note"); + + let mut nprofile_check = false; + + for (ndx, block) in blocks.iter(&note).enumerate() { + println!("block {}: {:?}: {:?}", ndx, block.blocktype(), &block); + if block.blocktype() == BlockType::MentionBech32 { + // https://github.com/nostr-protocol/nips/blob/master/19.md#examples + assert_eq!( + block.as_str(), "nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p" + ); + + if let Mention::Profile(p) = block.as_mention().unwrap() { + assert_eq!(p.pubkey(), &pubkey_bytes); + assert_eq!(p.relays.num_relays, 2); + assert_eq!(p.relays.relays[0].as_str(), "wss://r.x.com"); + assert_eq!(p.relays.relays[1].as_str(), "wss://djbas.sadkb.com"); + nprofile_check = true; + } + } + } + assert!(nprofile_check, "Expected nprofile block was not found"); + } + + test_util::cleanup_db(&db); + } }