diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-11-05 12:50:03 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-11-05 12:50:03 +0000 |
| commit | 64a86de9fc5ded51a1b5405223fc5dce16839fef (patch) | |
| tree | 9c981e337d3c3908776aa41c1eaff6c3e44cba14 /grasp-audit/src/specs/grasp01_nostr_relay.rs | |
| parent | 94bf5c39af0d8d0a9a15db240d5d46383ec22160 (diff) | |
Refactor: abstract announcement event creation into AuditClient helper
- Add create_repo_announcement() method to AuditClient
- Remove duplicate code from nip01_smoke.rs
- Update grasp01_nostr_relay.rs to use centralized helper
- All tests passing (GRASP-01: 4/18, NIP-01: 6/6)
Diffstat (limited to 'grasp-audit/src/specs/grasp01_nostr_relay.rs')
| -rw-r--r-- | grasp-audit/src/specs/grasp01_nostr_relay.rs | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/grasp-audit/src/specs/grasp01_nostr_relay.rs b/grasp-audit/src/specs/grasp01_nostr_relay.rs index 5a93672..837434b 100644 --- a/grasp-audit/src/specs/grasp01_nostr_relay.rs +++ b/grasp-audit/src/specs/grasp01_nostr_relay.rs | |||
| @@ -64,35 +64,28 @@ impl Grasp01NostrRelayTests { | |||
| 64 | "Accept valid repository announcements with service in clone and relays tags", | 64 | "Accept valid repository announcements with service in clone and relays tags", |
| 65 | ) | 65 | ) |
| 66 | .run(|| async { | 66 | .run(|| async { |
| 67 | // Get relay URL from client | 67 | // Create a NIP-34 repository announcement event |
| 68 | let event = client.create_repo_announcement("accept_valid_repo_announcement").await | ||
| 69 | .map_err(|e| format!("Failed to create repository announcement: {}", e))?; | ||
| 70 | |||
| 71 | // Get relay URL for validation | ||
| 68 | let relay_url = client.client().relays().await | 72 | let relay_url = client.client().relays().await |
| 69 | .keys() | 73 | .keys() |
| 70 | .next() | 74 | .next() |
| 71 | .ok_or("No relay connected")? | 75 | .ok_or("No relay connected")? |
| 72 | .to_string(); | 76 | .to_string(); |
| 73 | 77 | ||
| 74 | // Convert WebSocket URL to HTTP URL for clone tag | 78 | // Convert WebSocket URL to HTTP URL for validation |
| 75 | let http_url = relay_url | 79 | let http_url = relay_url |
| 76 | .replace("ws://", "http://") | 80 | .replace("ws://", "http://") |
| 77 | .replace("wss://", "https://"); | 81 | .replace("wss://", "https://"); |
| 78 | 82 | ||
| 79 | // Create unique repository identifier | 83 | // Extract repo_id from the event's d tag |
| 80 | let timestamp = Timestamp::now().as_u64(); | 84 | let repo_id = event.tags.iter() |
| 81 | let repo_id = format!("test-repo-{}", timestamp); | 85 | .find(|t| t.kind() == TagKind::d()) |
| 82 | 86 | .and_then(|t| t.content()) | |
| 83 | // Get npub for clone URL | 87 | .ok_or("Missing d tag in announcement")? |
| 84 | let npub = client.public_key().to_bech32() | 88 | .to_string(); |
| 85 | .map_err(|e| format!("Failed to convert public key to bech32 npub format: {}", e))?; | ||
| 86 | |||
| 87 | // Build kind 30617 repository announcement | ||
| 88 | let event = client.event_builder(Kind::GitRepoAnnouncement, "") | ||
| 89 | .tag(Tag::identifier(&repo_id)) | ||
| 90 | .tag(Tag::custom(TagKind::Custom("name".into()), vec!["GRASP-01 Test Repository"])) | ||
| 91 | .tag(Tag::custom(TagKind::Custom("description".into()), vec!["Test repository for GRASP-01 compliance testing"])) | ||
| 92 | .tag(Tag::custom(TagKind::Custom("clone".into()), vec![format!("{}/{}/{}.git", http_url, npub, repo_id)])) | ||
| 93 | .tag(Tag::custom(TagKind::Custom("relays".into()), vec![relay_url.clone()])) | ||
| 94 | .build(client.keys()) | ||
| 95 | .map_err(|e| format!("Failed to build repository announcement event (kind 30617): {}", e))?; | ||
| 96 | 89 | ||
| 97 | // Send the event | 90 | // Send the event |
| 98 | let event_id = client.send_event(event.clone()).await | 91 | let event_id = client.send_event(event.clone()).await |