nostralink 0.2.4

Linked data library for nostr
Documentation
use super::{test_env, TestEnv};
use crate::prelude::*;
use rstest::*;
use std::time::Duration;

#[rstest]
#[tokio::test]
async fn test_forum(test_env: TestEnv) -> Result<(), RdfStoreError> {
    use nostr::Keys;
    let mut forum = ForumBuilder::default()
        .name("Linux".to_string())
        .title("en", "Test")
        .build()
        .unwrap();

    let keys = Keys::generate();
    let forum_event = forum.event_builder()?.sign(&keys).await?;
    test_env.events_store.insert_event(&forum_event)?;

    let subs = [subl("lang_filter", Literal::from("en"))?];

    let set =
        test_env
            .events_store
            .run_query(&nrq_get("forums")?, subs, None)?;
    assert_eq!(set.count(), 1);

    let no_post_ev = NoteBuilder::default()
        .body(Some("Post".to_string()))
        .build()?
        .event_builder()?
        .sign(&keys)
        .await?;

    let post_ev = NoteBuilder::default()
        .body(Some("Forum post".to_string()))
        .build()?
        .event_builder()?
        .tag_forum(forum_event.id)
        .sign(&keys)
        .await?;

    test_env.events_store.insert_event(&no_post_ev)?;
    test_env.events_store.insert_event(&post_ev)?;

    let (subs, _) = QuerySubsBuilder::default()
        .only_followees(0)
        .since(Duration::from_secs(3600))
        .in_forum(forum_event.id)
        .build()
        .map_err(|_| RdfStoreError::LDBuilderError)?
        .subs_with_ckey()?;

    println!("subs: {subs:?}");

    let rset = test_env.events_store.run_query(
        &nrq_get("content_union")?,
        subs,
        None,
    )?;
    for row in &rset.rows {
        println!("=> {row:?}");
    }
    assert_eq!(rset.count(), 1);
    let row = rset.first().unwrap();
    let revid = row.get(SPVars::EVENT_ID).unwrap();
    assert_eq!(revid.to_string(), post_ev.id.to_hex());

    Ok(())
}