commit 9d8a30d21bcb3f5a017582dc674cef3fbc4003a1
parent 263693592c05df91e12a9ac976a7fbcec51e09ee
Author: triesap <tyson@radroots.org>
Date: Sun, 24 May 2026 05:04:40 +0000
runtime: refresh same-query buyer search
- route repeated buyer search queries through refreshed projection loading
- add regression coverage for same-query shared local-events import
- parameterize signed buyer listing fixtures for deterministic refresh checks
- validate focused app test, cargo check, fmt, and diff checks
Diffstat:
1 file changed, 88 insertions(+), 8 deletions(-)
diff --git a/crates/launchers/desktop/src/runtime.rs b/crates/launchers/desktop/src/runtime.rs
@@ -1492,7 +1492,7 @@ impl DesktopAppRuntimeState {
fn set_personal_search_query(&mut self, search_query: &str) -> Result<bool, AppSqliteError> {
let query = self.state_store.personal_projection().search.query.clone();
if query.search_query == search_query {
- return Ok(false);
+ return self.replace_personal_search_query(query);
}
self.replace_personal_search_query(BuyerSearchScreenQueryState::new(
@@ -5840,6 +5840,71 @@ mod tests {
}
#[test]
+ fn runtime_buyer_search_repeated_query_refreshes_shared_local_events() {
+ let (runtime, paths) =
+ bootstrapped_runtime("buyer_search_same_query_shared_local_events_refresh");
+ assert!(
+ runtime
+ .generate_local_account(Some("Buyer".to_owned()))
+ .expect("account should generate")
+ );
+
+ append_cli_signed_buyer_listing_record_with(
+ &paths,
+ "first-buyer-visible-listing",
+ "DDDDDDDDDDDDDDDDDDDDDD",
+ "Buyer Visible Eggs",
+ 1100,
+ );
+
+ assert!(
+ runtime
+ .set_personal_search_query("eggs")
+ .expect("buyer search query should refresh")
+ );
+ let first_summary = runtime.summary();
+ assert_eq!(
+ first_summary.personal_projection.search.listings.rows.len(),
+ 1
+ );
+
+ append_cli_signed_buyer_listing_record_with(
+ &paths,
+ "second-buyer-visible-listing",
+ "EEEEEEEEEEEEEEEEEEEEEE",
+ "Buyer Visible Eggs Two",
+ 1200,
+ );
+
+ assert!(
+ runtime
+ .set_personal_search_query("eggs")
+ .expect("same buyer search query should refresh")
+ );
+ let refreshed_summary = runtime.summary();
+ let titles = refreshed_summary
+ .personal_projection
+ .search
+ .listings
+ .rows
+ .iter()
+ .map(|row| row.title.as_str())
+ .collect::<BTreeSet<_>>();
+ assert_eq!(
+ titles,
+ BTreeSet::from(["Buyer Visible Eggs", "Buyer Visible Eggs Two"])
+ );
+
+ assert!(
+ !runtime
+ .set_personal_search_query("eggs")
+ .expect("idempotent same buyer search query should refresh")
+ );
+
+ cleanup_bootstrapped_runtime_paths(&paths);
+ }
+
+ #[test]
fn runtime_shared_local_events_refresh_reloads_buyer_browse_idempotently() {
let (runtime, paths) = bootstrapped_runtime("buyer_browse_shared_local_events_refresh");
assert!(
@@ -11032,6 +11097,22 @@ mod tests {
}
fn append_cli_signed_buyer_listing_record(paths: &AppDesktopRuntimePaths) {
+ append_cli_signed_buyer_listing_record_with(
+ paths,
+ "buyer-visible-listing",
+ "DDDDDDDDDDDDDDDDDDDDDD",
+ "Buyer Visible Eggs",
+ 1100,
+ );
+ }
+
+ fn append_cli_signed_buyer_listing_record_with(
+ paths: &AppDesktopRuntimePaths,
+ record_suffix: &str,
+ listing_key: &str,
+ title: &str,
+ created_at_ms: i64,
+ ) {
let database_path =
super::shared_local_events_database_path(paths).expect("shared local events path");
if let Some(parent) = database_path.parent() {
@@ -11042,9 +11123,8 @@ mod tests {
let store = LocalEventsStore::new(executor);
store.migrate_up().expect("migrate shared local events");
let farm_key = "CCCCCCCCCCCCCCCCCCCCCC";
- let listing_key = "DDDDDDDDDDDDDDDDDDDDDD";
let owner_pubkey = "buyer-visible-seller-pubkey";
- let record_id = "cli:signed_event:buyer-visible-listing";
+ let record_id = format!("cli:signed_event:{record_suffix}");
let content = json!({
"d_tag": listing_key,
"status": "active",
@@ -11054,7 +11134,7 @@ mod tests {
},
"product": {
"key": listing_key,
- "title": "Buyer Visible Eggs",
+ "title": title,
"summary": "Published local eggs"
},
"availability": {
@@ -11077,8 +11157,8 @@ mod tests {
family: LocalRecordFamily::SignedEvent,
status: LocalRecordStatus::Published,
source_runtime: SourceRuntime::Cli,
- created_at_ms: 1100,
- inserted_at_ms: 1101,
+ created_at_ms,
+ inserted_at_ms: created_at_ms + 1,
owner_account_id: Some("seller-account".to_owned()),
owner_pubkey: Some(owner_pubkey.to_owned()),
farm_id: Some(farm_key.to_owned()),
@@ -11087,12 +11167,12 @@ mod tests {
event_id: Some(format!("event-{record_id}")),
event_kind: Some(30402),
event_pubkey: Some(owner_pubkey.to_owned()),
- event_created_at: Some(1100),
+ event_created_at: Some(created_at_ms),
event_tags_json: Some(json!([
["d", listing_key],
["a", format!("30340:{owner_pubkey}:{farm_key}")],
["key", listing_key],
- ["title", "Buyer Visible Eggs"],
+ ["title", title],
["summary", "Published local eggs"],
["radroots:bin", "bin-1", "1", "each"],
["radroots:price", "bin-1", "8", "USD", "1", "each"],