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(())
}