use credo::Credo;
use jazz::{InvitationKind, JazzNode, JoinTeamError};
use jmbl::Input;
use litl::Litl;
use jazz_telepathy::{RemoteNode, SyncMode, TelepathyNode};
#[test]
fn can_create_team_and_share_document() {
let mut jazz1 = JazzNode::new(
TelepathyNode::new_rc(),
Credo::new_rc(TelepathyNode::new_rc()),
);
let team = jazz1.create_team();
let (doc_id, managed_doc_ref) = jazz1.create_document(
team,
"main".to_string(),
Input::CollabMap(vec![(
Litl::string("test").into(),
Litl::string("Hello World").into(),
)]),
);
let managed_doc = managed_doc_ref.borrow();
assert_eq!(
managed_doc.jmbl.get_root().if_map().unwrap().to_litl(),
Litl::dict([(Litl::string("test"), Litl::string("Hello World"))])
);
let mut invitation_token = jazz1
.create_invitation(team, InvitationKind::Reader)
.unwrap();
let (content_sender1, content_receiver1) = futures::channel::mpsc::channel(100);
let (content_sender2, content_receiver2) = futures::channel::mpsc::channel(100);
let (credo_sender1, credo_receiver1) = futures::channel::mpsc::channel(100);
let (credo_sender2, credo_receiver2) = futures::channel::mpsc::channel(100);
let mut jazz2 = JazzNode::new(
TelepathyNode::new_rc(),
Credo::new_rc(TelepathyNode::new_rc()),
);
let (mut content_remotes1, mut credo_remotes1) = jazz1.content_and_credo_remotes();
content_remotes1
.try_add_sync(RemoteNode::new(
content_receiver1,
content_sender2,
SyncMode::SyncAll,
))
.unwrap();
credo_remotes1
.try_add_sync(RemoteNode::new(
credo_receiver1,
credo_sender2,
SyncMode::SyncAll,
))
.unwrap();
let (mut content_remotes2, mut credo_remotes2) = jazz2.content_and_credo_remotes();
content_remotes2
.try_add_sync(RemoteNode::new(
content_receiver2,
content_sender1,
SyncMode::SyncAll,
))
.unwrap();
credo_remotes2
.try_add_sync(RemoteNode::new(
credo_receiver2,
credo_sender1,
SyncMode::SyncAll,
))
.unwrap();
loop {
invitation_token = match jazz2.join_team(invitation_token) {
Ok(_) => break,
err @ Err(_) => {
println!("Got err {:?}", &err);
match err {
Ok(_) => unreachable!(),
Err(JoinTeamError::ExpectedEncryptedInvitationInTeamState(returned_token))
| Err(JoinTeamError::ExpectedInitialTeamStateExisting(returned_token))
| Err(JoinTeamError::ExpectedInitialTeamStateReceived(returned_token)) => {
returned_token
}
Err(_) => panic!("Unexpected error {:?}", err),
}
}
};
println!("Sync 2");
jazz2.sync_with_remotes();
println!("Sync 1");
jazz1.sync_with_remotes();
}
let managed_doc_ref2 = jazz2.load_document(doc_id);
let mut managed_doc2 = managed_doc_ref2.borrow_mut();
managed_doc2.receive_updates();
assert_eq!(
managed_doc2.jmbl.get_root().if_map().unwrap().to_litl(),
Litl::dict([(Litl::string("test"), Litl::string("Hello World"))])
);
}