A local-first private AI assistant for everyday use. Runs on-device models with encrypted P2P sync, and supports sharing chats publicly on ATProto.
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

test: added network module tests

madclaws e26a9854 2cb58ad5

+91 -2
+1 -1
Cargo.lock
··· 6550 6550 6551 6551 [[package]] 6552 6552 name = "tiles" 6553 - version = "0.4.5" 6553 + version = "0.4.6" 6554 6554 dependencies = [ 6555 6555 "anyhow", 6556 6556 "async-std",
+1 -1
tiles/Cargo.toml
··· 1 1 [package] 2 2 name = "tiles" 3 - version = "0.4.5" 3 + version = "0.4.6" 4 4 edition = "2024" 5 5 6 6 [dependencies]
+89
tiles/src/core/network/mod.rs
··· 789 789 } 790 790 Ok(()) 791 791 } 792 + 793 + #[cfg(test)] 794 + mod tests { 795 + 796 + use iroh::{Endpoint, endpoint::presets, endpoint_info::UserData}; 797 + use tokio::sync::mpsc; 798 + 799 + use crate::core::{ 800 + accounts::create_dummy_user, 801 + chats::SyncOp, 802 + network::{ 803 + create_topic_id, fetch_last_row_counter, parse_link_ticket, 804 + ticket::{EndpointUserData, LinkTicket}, 805 + }, 806 + }; 807 + 808 + #[tokio::test] 809 + async fn test_valid_parse_link_ticket_online() { 810 + let topic_id = create_topic_id("test"); 811 + let user = create_dummy_user(); 812 + let usr_data = EndpointUserData::new(&user.user_id, &user.username); 813 + let endpoint = Endpoint::builder(presets::N0) 814 + .user_data_for_address_lookup(UserData::try_from(usr_data.to_string()).unwrap()) 815 + .bind() 816 + .await 817 + .unwrap(); 818 + 819 + let ticket = LinkTicket::new( 820 + topic_id, 821 + endpoint.addr(), 822 + user.user_id.clone(), 823 + user.username.clone(), 824 + ); 825 + 826 + assert!(parse_link_ticket(&ticket.to_string()).is_ok()) 827 + } 828 + 829 + #[tokio::test] 830 + async fn test_invalid_parse_link_ticket_online() { 831 + let topic_id = create_topic_id("test"); 832 + let user = create_dummy_user(); 833 + let usr_data = EndpointUserData::new(&user.user_id, &user.username); 834 + let endpoint = Endpoint::builder(presets::N0) 835 + .user_data_for_address_lookup(UserData::try_from(usr_data.to_string()).unwrap()) 836 + .bind() 837 + .await 838 + .unwrap(); 839 + 840 + let ticket = LinkTicket::new( 841 + topic_id, 842 + endpoint.addr(), 843 + user.user_id.clone(), 844 + user.username.clone(), 845 + ); 846 + 847 + let invalid_ticket = format!("{}xx", ticket); 848 + assert!(parse_link_ticket(&invalid_ticket).is_err()) 849 + } 850 + 851 + #[test] 852 + fn test_invalid_parse_link_ticket_offline() { 853 + let ticket = "kjadkjada"; 854 + 855 + assert!(parse_link_ticket(ticket).is_err()) 856 + } 857 + 858 + #[test] 859 + fn test_valid_parse_link_ticket_offline() { 860 + let ticket = "kjadkja2"; 861 + 862 + assert!(parse_link_ticket(ticket).is_ok()) 863 + } 864 + 865 + #[tokio::test] 866 + async fn test_fetch_last_row_counter() { 867 + { 868 + let (tx, mut rx) = mpsc::channel::<SyncOp>(32); 869 + 870 + let _handler = tokio::spawn(async move { 871 + while let Some(msg) = rx.recv().await { 872 + if let SyncOp::GetLastRowCounter { user_id: _, resp } = msg { 873 + resp.send(Ok(1)).unwrap(); 874 + } 875 + } 876 + }); 877 + assert_eq!(fetch_last_row_counter("did:key:xx", &tx).await.unwrap(), 1); 878 + } 879 + } 880 + }