upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/repo_ref.rs45
-rw-r--r--test_utils/src/lib.rs9
-rw-r--r--tests/claim.rs16
3 files changed, 38 insertions, 32 deletions
diff --git a/src/repo_ref.rs b/src/repo_ref.rs
index 1ec0ece..87c5b75 100644
--- a/src/repo_ref.rs
+++ b/src/repo_ref.rs
@@ -69,13 +69,19 @@ impl TryFrom<nostr::Event> for RepoRef {
69 r.relays.remove(0); 69 r.relays.remove(0);
70 } 70 }
71 71
72 for tag in event.tags.iter().filter(|t| t.as_vec()[0].eq("p")) { 72 if let Some(t) = event.tags.iter().find(|t| t.as_vec()[0].eq("maintainers")) {
73 let pk = tag.as_vec()[1].clone(); 73 let mut maintainers = t.as_vec().clone();
74 r.maintainers.push( 74 maintainers.remove(0);
75 if !maintainers.contains(&event.pubkey.to_string()) {
76 r.maintainers.push(event.pubkey);
77 }
78 for pk in maintainers {
79 r.maintainers.push(
75 nostr_sdk::prelude::XOnlyPublicKey::from_str(&pk) 80 nostr_sdk::prelude::XOnlyPublicKey::from_str(&pk)
76 .context(format!("cannot convert {pk} into a valid nostr public key")) 81 .context(format!("cannot convert entry from maintainers tag {pk} into a valid nostr public key. it should be in hex format"))
77 .context("invalid repository event")?, 82 .context("invalid repository event")?,
78 ); 83 );
84 }
79 } 85 }
80 86
81 Ok(r) 87 Ok(r)
@@ -121,15 +127,14 @@ impl RepoRef {
121 nostr::TagKind::Custom("relays".to_string()), 127 nostr::TagKind::Custom("relays".to_string()),
122 self.relays.clone(), 128 self.relays.clone(),
123 ), 129 ),
130 Tag::Generic(
131 nostr::TagKind::Custom("maintainers".to_string()),
132 self.maintainers
133 .iter()
134 .map(std::string::ToString::to_string)
135 .collect(),
136 ),
124 ], 137 ],
125 // this appears like a number of relay tags but test suggest is is actually
126 // what we want which is a relays tag with lots of values. no need for the
127 // change?
128 // self.relays.iter().map(|r| Tag::Relay(r.into())).collect(),
129 self.maintainers
130 .iter()
131 .map(|pk| Tag::public_key(*pk))
132 .collect(),
133 // code languages and hashtags 138 // code languages and hashtags
134 ] 139 ]
135 .concat(), 140 .concat(),
@@ -451,25 +456,25 @@ mod tests {
451 #[test] 456 #[test]
452 fn maintainers() { 457 fn maintainers() {
453 let event = create(); 458 let event = create();
454 let p_tags = event 459 let maintainers_tag: &nostr::Tag = event
455 .tags 460 .tags
456 .iter() 461 .iter()
457 .filter(|t| t.as_vec()[0].eq("p")) 462 .find(|t| t.as_vec()[0].eq("maintainers"))
458 .collect::<Vec<&nostr::Tag>>(); 463 .unwrap();
459 assert_eq!(p_tags[0].as_vec().len(), 2); 464 assert_eq!(maintainers_tag.as_vec().len(), 3);
460 assert_eq!( 465 assert_eq!(
461 p_tags[0].as_vec()[1], 466 maintainers_tag.as_vec()[1],
462 TEST_KEY_1_KEYS.public_key().to_string() 467 TEST_KEY_1_KEYS.public_key().to_string()
463 ); 468 );
464 assert_eq!( 469 assert_eq!(
465 p_tags[1].as_vec()[1], 470 maintainers_tag.as_vec()[2],
466 TEST_KEY_2_KEYS.public_key().to_string() 471 TEST_KEY_2_KEYS.public_key().to_string()
467 ); 472 );
468 } 473 }
469 474
470 #[test] 475 #[test]
471 fn no_other_tags() { 476 fn no_other_tags() {
472 assert_eq!(create().tags.len(), 9) 477 assert_eq!(create().tags.len(), 8)
473 } 478 }
474 } 479 }
475 } 480 }
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs
index 9996008..8788211 100644
--- a/test_utils/src/lib.rs
+++ b/test_utils/src/lib.rs
@@ -164,8 +164,13 @@ pub fn generate_repo_ref_event() -> nostr::Event {
164 "ws://localhost:8056".to_string(), 164 "ws://localhost:8056".to_string(),
165 ], 165 ],
166 ), 166 ),
167 Tag::public_key(TEST_KEY_1_KEYS.public_key()), 167 Tag::Generic(
168 Tag::public_key(TEST_KEY_2_KEYS.public_key()), 168 nostr::TagKind::Custom("maintainers".to_string()),
169 vec![
170 TEST_KEY_1_KEYS.public_key().to_string(),
171 TEST_KEY_2_KEYS.public_key().to_string(),
172 ],
173 ),
169 ], 174 ],
170 ) 175 )
171 .to_event(&TEST_KEY_1_KEYS) 176 .to_event(&TEST_KEY_1_KEYS)
diff --git a/tests/claim.rs b/tests/claim.rs
index 9eb4b8a..93feb54 100644
--- a/tests/claim.rs
+++ b/tests/claim.rs
@@ -393,7 +393,7 @@ mod when_repo_not_previously_claimed {
393 393
394 #[test] 394 #[test]
395 #[serial] 395 #[serial]
396 fn current_user_tagged_indicating_maintainer() -> Result<()> { 396 fn current_user_in_maintainers() -> Result<()> {
397 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?; 397 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_claim())?;
398 for relay in [&r53, &r55, &r56] { 398 for relay in [&r53, &r55, &r56] {
399 let event: &nostr::Event = relay 399 let event: &nostr::Event = relay
@@ -401,17 +401,13 @@ mod when_repo_not_previously_claimed {
401 .iter() 401 .iter()
402 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND)) 402 .find(|e| e.kind.as_u64().eq(&REPOSITORY_KIND))
403 .unwrap(); 403 .unwrap();
404 404 let maintainers_tag = event
405 let relay_tags = event
406 .tags 405 .tags
407 .iter() 406 .iter()
408 .filter(|t| t.as_vec()[0].eq("p")) 407 .find(|t| t.as_vec()[0].eq("maintainers"))
409 .collect::<Vec<&nostr::Tag>>(); 408 .unwrap()
410 assert_eq!(relay_tags.len(), 1); 409 .as_vec();
411 assert_eq!( 410 assert_eq!(maintainers_tag[1], TEST_KEY_1_KEYS.public_key().to_string());
412 relay_tags[0].as_vec()[1],
413 TEST_KEY_1_KEYS.public_key().to_string()
414 );
415 } 411 }
416 Ok(()) 412 Ok(())
417 } 413 }