123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- //! Tests for synchronization of user presence.
- use anyhow::Result;
- use common::*;
- use rustpad_server::{server, ServerConfig};
- use serde_json::json;
- pub mod common;
- #[tokio::test]
- async fn test_two_users() -> Result<()> {
- pretty_env_logger::try_init().ok();
- let filter = server(ServerConfig::default());
- let mut client = connect(&filter, "foobar").await?;
- assert_eq!(client.recv().await?, json!({ "Identity": 0 }));
- let alice = json!({
- "name": "Alice",
- "hue": 42
- });
- client.send(&json!({ "ClientInfo": alice })).await;
- let alice_info = json!({
- "UserInfo": {
- "id": 0,
- "info": alice
- }
- });
- assert_eq!(client.recv().await?, alice_info);
- let mut client2 = connect(&filter, "foobar").await?;
- assert_eq!(client2.recv().await?, json!({ "Identity": 1 }));
- assert_eq!(client2.recv().await?, alice_info);
- let bob = json!({
- "name": "Bob",
- "hue": 96
- });
- client2.send(&json!({ "ClientInfo": bob })).await;
- let bob_info = json!({
- "UserInfo": {
- "id": 1,
- "info": bob
- }
- });
- assert_eq!(client2.recv().await?, bob_info);
- assert_eq!(client.recv().await?, bob_info);
- Ok(())
- }
- #[tokio::test]
- async fn test_invalid_user() -> Result<()> {
- pretty_env_logger::try_init().ok();
- let filter = server(ServerConfig::default());
- let mut client = connect(&filter, "foobar").await?;
- assert_eq!(client.recv().await?, json!({ "Identity": 0 }));
- let alice = json!({ "name": "Alice" }); // no hue
- client.send(&json!({ "ClientInfo": alice })).await;
- client.recv_closed().await?;
- Ok(())
- }
- #[tokio::test]
- async fn test_leave_rejoin() -> Result<()> {
- pretty_env_logger::try_init().ok();
- let filter = server(ServerConfig::default());
- let mut client = connect(&filter, "foobar").await?;
- assert_eq!(client.recv().await?, json!({ "Identity": 0 }));
- let alice = json!({
- "name": "Alice",
- "hue": 42
- });
- client.send(&json!({ "ClientInfo": alice })).await;
- let alice_info = json!({
- "UserInfo": {
- "id": 0,
- "info": alice
- }
- });
- assert_eq!(client.recv().await?, alice_info);
- client.send(&json!({ "Invalid": "please close" })).await;
- client.recv_closed().await?;
- let mut client2 = connect(&filter, "foobar").await?;
- assert_eq!(client2.recv().await?, json!({ "Identity": 1 }));
- let bob = json!({
- "name": "Bob",
- "hue": 96
- });
- client2.send(&json!({ "ClientInfo": bob })).await;
- let bob_info = json!({
- "UserInfo": {
- "id": 1,
- "info": bob
- }
- });
- assert_eq!(client2.recv().await?, bob_info);
- Ok(())
- }
- #[tokio::test]
- async fn test_cursors() -> Result<()> {
- pretty_env_logger::try_init().ok();
- let filter = server(ServerConfig::default());
- let mut client = connect(&filter, "foobar").await?;
- assert_eq!(client.recv().await?, json!({ "Identity": 0 }));
- let cursors = json!({
- "cursors": [4, 6, 7],
- "selections": [[5, 10], [3, 4]]
- });
- client.send(&json!({ "CursorData": cursors })).await;
- let cursors_resp = json!({
- "UserCursor": {
- "id": 0,
- "data": cursors
- }
- });
- assert_eq!(client.recv().await?, cursors_resp);
- let mut client2 = connect(&filter, "foobar").await?;
- assert_eq!(client2.recv().await?, json!({ "Identity": 1 }));
- assert_eq!(client2.recv().await?, cursors_resp);
- let cursors2 = json!({
- "cursors": [10],
- "selections": []
- });
- client2.send(&json!({ "CursorData": cursors2 })).await;
- let cursors2_resp = json!({
- "UserCursor": {
- "id": 1,
- "data": cursors2
- }
- });
- assert_eq!(client2.recv().await?, cursors2_resp);
- assert_eq!(client.recv().await?, cursors2_resp);
- client.send(&json!({ "Invalid": "please close" })).await;
- client.recv_closed().await?;
- let msg = json!({
- "Edit": {
- "revision": 0,
- "operation": ["a"]
- }
- });
- client2.send(&msg).await;
- let mut client3 = connect(&filter, "foobar").await?;
- assert_eq!(client3.recv().await?, json!({ "Identity": 2 }));
- client3.recv().await?;
- let transformed_cursors2_resp = json!({
- "UserCursor": {
- "id": 1,
- "data": {
- "cursors": [11],
- "selections": []
- }
- }
- });
- assert_eq!(client3.recv().await?, transformed_cursors2_resp);
- Ok(())
- }
|