lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit b2bea477b224886e21d71cbf0aa429f5800447c3
parent 26ed56cd4d761dce74d53cdbe7b1ffd86aeffa0b
Author: triesap <tyson@radroots.org>
Date:   Fri,  6 Mar 2026 15:48:41 +0000

replica-sync: expand emit error and integration region paths

Diffstat:
Mcrates/replica-sync/src/emit.rs | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Mcrates/replica-sync/tests/ingest_roundtrip.rs | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 126 insertions(+), 12 deletions(-)

diff --git a/crates/replica-sync/src/emit.rs b/crates/replica-sync/src/emit.rs @@ -1660,22 +1660,62 @@ mod tests { location_country: None, }; - let err_exec = ErrorExecutor; - assert!(collect_farm_tags(&err_exec, "id").is_err()); - assert!(collect_plot_tags(&err_exec, "id").is_err()); - assert!(load_farm_members(&err_exec, "id").is_err()); - assert!(load_plots(&err_exec, "id").is_err()); - assert!(load_farm_location(&err_exec, &farm).is_err()); - assert!(load_plot_location(&err_exec, &plot).is_err()); - assert!(load_profile(&err_exec, "p").is_err()); - assert!(load_member_claims(&err_exec, "p").is_err()); - assert!(load_member_claims_for_member(&err_exec, "p").is_err()); + let tags_fail = QueryFailExecutor { + inner: &exec, + needle: "farm_tag", + err: SqlError::Internal, + }; + assert!(collect_farm_tags(&tags_fail, "id").is_err()); + + let plot_tags_fail = QueryFailExecutor { + inner: &exec, + needle: "plot_tag", + err: SqlError::Internal, + }; + assert!(collect_plot_tags(&plot_tags_fail, "id").is_err()); + + let members_fail = QueryFailExecutor { + inner: &exec, + needle: "farm_member", + err: SqlError::Internal, + }; + assert!(load_farm_members(&members_fail, "id").is_err()); + + let plots_fail = QueryFailExecutor { + inner: &exec, + needle: "from plot", + err: SqlError::Internal, + }; + assert!(load_plots(&plots_fail, "id").is_err()); + + let farm_location_fail = QueryFailExecutor { + inner: &exec, + needle: "farm_gcs_location", + err: SqlError::Internal, + }; + assert!(load_farm_location(&farm_location_fail, &farm).is_err()); + + let plot_location_fail = QueryFailExecutor { + inner: &exec, + needle: "plot_gcs_location", + err: SqlError::Internal, + }; + assert!(load_plot_location(&plot_location_fail, &plot).is_err()); + + let profile_fail = QueryFailExecutor { + inner: &exec, + needle: "nostr_profile", + err: SqlError::Internal, + }; + assert!(load_profile(&profile_fail, "p").is_err()); let claims_fail = QueryFailExecutor { inner: &exec, needle: "farm_member_claim", err: SqlError::Internal, }; + assert!(load_member_claims(&claims_fail, "p").is_err()); + assert!(load_member_claims_for_member(&claims_fail, "p").is_err()); assert!(collect_profile_pubkeys(&claims_fail, &farm).is_err()); } @@ -1714,6 +1754,17 @@ mod tests { ) .expect("resolve by pair"); assert_eq!(resolved_by_pair.id, farm_row.id); + assert!( + resolve_farm( + &pass, + &RadrootsReplicaFarmSelector { + id: Some("00000000-0000-0000-0000-000000000000".to_string()), + d_tag: None, + pubkey: None, + }, + ) + .is_err() + ); let member_pubkeys = collect_member_pubkeys(&pass, &farm_row.id).expect("member pubkeys"); assert!(!member_pubkeys.is_empty()); diff --git a/crates/replica-sync/tests/ingest_roundtrip.rs b/crates/replica-sync/tests/ingest_roundtrip.rs @@ -143,6 +143,30 @@ fn seed_source( gc_country_name: None, }; let gcs_row = unwrap_sql(gcs_location::create(exec, &gcs_fields), "gcs").result; + let gcs_secondary_fields = IGcsLocationFields { + d_tag: "AAAAAAAAAAAAAAAAAAAAAg".to_string(), + lat: 37.71, + lng: -122.41, + geohash: "9q8yz".to_string(), + point: "{".to_string(), + polygon: "{\"type\":\"Polygon\",\"coordinates\":[[]]}".to_string(), + accuracy: None, + altitude: None, + tag_0: None, + label: None, + area: None, + elevation: None, + soil: None, + climate: None, + gc_id: None, + gc_name: None, + gc_admin1_id: None, + gc_admin1_name: None, + gc_country_id: None, + gc_country_name: None, + }; + let gcs_secondary_row = + unwrap_sql(gcs_location::create(exec, &gcs_secondary_fields), "gcs secondary").result; let _ = unwrap_sql( farm_gcs_location::create( @@ -179,12 +203,51 @@ fn seed_source( exec, &IPlotGcsLocationFields { plot_id: plot_row.id.clone(), + gcs_location_id: gcs_secondary_row.id.clone(), + role: "primary".to_string(), + }, + ), + "plot_gcs secondary primary", + ); + let _ = unwrap_sql( + plot_gcs_location::create( + exec, + &IPlotGcsLocationFields { + plot_id: plot_row.id.clone(), gcs_location_id: gcs_row.id.clone(), role: "primary".to_string(), }, ), "plot_gcs", ); + let plot_row_secondary = unwrap_sql( + plot::create( + exec, + &IPlotFields { + d_tag: "AAAAAAAAAAAAAAAAAAAAAg".to_string(), + farm_id: farm_row.id.clone(), + name: "Plot B".to_string(), + about: None, + location_primary: None, + location_city: None, + location_region: None, + location_country: None, + }, + ), + "plot secondary", + ) + .result; + let _ = unwrap_sql( + plot_gcs_location::create( + exec, + &IPlotGcsLocationFields { + plot_id: plot_row_secondary.id.clone(), + gcs_location_id: gcs_row.id.clone(), + role: "primary".to_string(), + }, + ), + "plot_secondary_gcs", + ); let _ = unwrap_sql( farm_tag::create( @@ -286,7 +349,7 @@ fn seed_source( fn ingest_roundtrip_yields_zero_pending_sync() { let source = SqliteExecutor::open_memory().expect("source db"); let (_source_request, farm_d_tag, farm_pubkey, drafts) = seed_source(&source); - assert_eq!(drafts.len(), 9); + assert_eq!(drafts.len(), 10); let target = SqliteExecutor::open_memory().expect("target db"); migrations::run_all_up(&target).expect("target migrations"); @@ -363,7 +426,7 @@ fn sync_all_selector_and_options_paths_are_supported() { }, ) .expect("reduced sync"); - assert_eq!(reduced.events.len(), 2); + assert_eq!(reduced.events.len(), 3); } #[test]