chat_platform_wasm/
lib.rs

1pub mod storage;
2pub mod tab_lock;
3
4#[cfg(all(test, target_arch = "wasm32"))]
5mod tests {
6    use wasm_bindgen_test::*;
7    use chat_core::storage::SqliteStorage;
8
9    #[wasm_bindgen_test]
10    async fn wasm_storage_init_schema() {
11        let conn = crate::storage::open_storage("test-node").await.unwrap();
12        let storage = SqliteStorage::new(conn);
13        storage.init_schema().unwrap();
14        let version = storage.get_setting("__schemaVersion").unwrap();
15        assert_eq!(version, Some("1".as_bytes().to_vec()));
16    }
17
18    #[wasm_bindgen_test]
19    async fn wasm_storage_get_set_round_trip() {
20        let conn = crate::storage::open_storage("test2-node").await.unwrap();
21        let storage = SqliteStorage::new(conn);
22        storage.init_schema().unwrap();
23        storage.set_setting("myKey", b"myValue").unwrap();
24        let value = storage.get_setting("myKey").unwrap();
25        assert_eq!(value, Some(b"myValue".to_vec()));
26    }
27
28    #[wasm_bindgen_test]
29    async fn wasm_storage_stable_sender_id() {
30        let conn = crate::storage::open_storage("test3-node").await.unwrap();
31        let storage = SqliteStorage::new(conn);
32        storage.init_schema().unwrap();
33        let id1 = storage.get_stable_sender_id().unwrap();
34        let id2 = storage.get_stable_sender_id().unwrap();
35        assert!(!id1.is_empty());
36        assert_eq!(id1, id2);
37    }
38
39    #[wasm_bindgen_test]
40    async fn wasm_storage_seq_isolation() {
41        let conn = crate::storage::open_storage("test4-node").await.unwrap();
42        let storage = SqliteStorage::new(conn);
43        storage.init_schema().unwrap();
44        storage.set_seq("room-a", 3).unwrap();
45        storage.set_seq("room-b", 7).unwrap();
46        assert_eq!(storage.get_seq("room-a").unwrap(), 3);
47        assert_eq!(storage.get_seq("room-b").unwrap(), 7);
48    }
49
50    #[wasm_bindgen_test]
51    async fn wasm_storage_yjs_update_round_trip() {
52        let conn = crate::storage::open_storage("test6-node").await.unwrap();
53        let storage = SqliteStorage::new(conn);
54        storage.init_schema().unwrap();
55        storage.insert_yjs_update("room-a", b"update1", 1000).unwrap();
56        storage.insert_yjs_update("room-a", b"update2", 2000).unwrap();
57        storage.insert_yjs_update("room-b", b"update3", 1500).unwrap();
58
59        let updates = storage.get_yjs_updates("room-a").unwrap();
60        assert_eq!(updates.len(), 2);
61        assert_eq!(updates[0], b"update1".to_vec());
62        assert_eq!(updates[1], b"update2".to_vec());
63    }
64}