use std::time::Duration;
use futures::Future;
use jazz_rs::{InvitationKind, Jazz, ScopedDocID};
use jmbl::Input;
use litl::Litl;
use log::{debug, info};
use mofo::Mofo;
use tlpt::Remote;
#[test_log::test(tokio::test)]
async fn can_create_team_and_share_document_for_reading() {
let (_, _, background, setup_and_basic_assertions) =
create_team_and_share_document(InvitationKind::Reader);
background.run_until(setup_and_basic_assertions).await;
}
fn create_team_and_share_document(
invitation_kind: InvitationKind,
) -> (Jazz, Jazz, Mofo, impl Future<Output = ScopedDocID>) {
let background = Mofo::new("test");
let jazz1 = Jazz::new("jazz1".to_string(), background.clone());
let jazz2 = Jazz::new("jazz2".to_string(), background.clone());
let setup = {
let jazz1 = jazz1.clone();
let jazz2 = jazz2.clone();
async move {
let team = jazz1.create_team().await;
let (doc_id, managed_doc) = jazz1
.create_document(
team,
Input::CollabMap(vec![(
"test".to_string(),
Litl::string("Hello World").into(),
)]),
)
.await;
assert_eq!(
managed_doc.current_root().if_map().unwrap().to_litl(),
Litl::dict([("test", Litl::string("Hello World"))])
);
let invitation_token = jazz1
.create_invitation(team, invitation_kind)
.await
.unwrap();
let (jazz1_as_remote, jazz2_as_remote) =
Remote::new_connected_test_pair("jazz1", "jazz2");
jazz1.add_remote(jazz2_as_remote).await;
jazz2.add_remote(jazz1_as_remote).await;
let jazz2 = jazz2.clone();
debug!("invitation token: {:?}", invitation_token);
jazz2.join_team(invitation_token).await.unwrap();
let managed_doc2 = jazz2.load_document(doc_id.clone()).await;
tokio::time::sleep(Duration::from_millis(100)).await;
assert_eq!(
managed_doc2.current_root().if_map().unwrap().to_litl(),
Litl::dict([("test", Litl::string("Hello World"))])
);
doc_id
}
};
(jazz1, jazz2, background, setup)
}
#[test_log::test(tokio::test)]
async fn can_create_team_and_share_document_for_writing() {
let (jazz1, jazz2, background, setup_and_basic_assertions) =
create_team_and_share_document(InvitationKind::Writer);
background
.run_until(async {
let doc_id = setup_and_basic_assertions.await;
let managed_doc2 = jazz2.load_document(doc_id.clone()).await;
let write_view = managed_doc2.start_writing();
write_view
.get_root()
.if_map_mut()
.unwrap()
.insert("test2", "Litl World");
managed_doc2.finish_writing(write_view);
assert_eq!(
managed_doc2.current_root().if_map().unwrap().to_litl(),
Litl::dict([
("test", Litl::string("Hello World")),
("test2", Litl::string("Litl World"))
])
);
let managed_doc1 = jazz1.load_document(doc_id).await;
info!("TIMEOUT START");
tokio::time::sleep(Duration::from_millis(1000)).await;
info!("TIMEOUT DONE");
assert_eq!(
managed_doc1.current_root().if_map().unwrap().to_litl(),
Litl::dict([
("test", Litl::string("Hello World")),
("test2", Litl::string("Litl World"))
])
);
})
.await
}