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:
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]