upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/prs_create.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/prs_create.rs')
-rw-r--r--tests/prs_create.rs214
1 files changed, 172 insertions, 42 deletions
diff --git a/tests/prs_create.rs b/tests/prs_create.rs
index 42f83b4..3a28016 100644
--- a/tests/prs_create.rs
+++ b/tests/prs_create.rs
@@ -169,6 +169,8 @@ mod sends_pr_and_2_patches_to_3_relays {
169 [ 169 [
170 "--nsec", 170 "--nsec",
171 TEST_KEY_1_NSEC, 171 TEST_KEY_1_NSEC,
172 "--password",
173 TEST_PASSWORD,
172 "--disable-cli-spinners", 174 "--disable-cli-spinners",
173 "prs", 175 "prs",
174 "create", 176 "create",
@@ -182,29 +184,49 @@ mod sends_pr_and_2_patches_to_3_relays {
182 184
183 fn expect_msgs_first(p: &mut CliTester) -> Result<()> { 185 fn expect_msgs_first(p: &mut CliTester) -> Result<()> {
184 p.expect("creating patch for 2 commits from 'head' that can be merged into 'main'\r\n")?; 186 p.expect("creating patch for 2 commits from 'head' that can be merged into 'main'\r\n")?;
185 p.expect( 187 p.expect("searching for your details...\r\n")?;
186 "logged in as npub175lyhnt6nn00qjw0v3navw9pxgv43txnku0tpxprl4h6mvpr6a5qlphudg\r\n",
187 )?;
188 p.expect("connecting to relays...\r\n")?;
189 p.expect("\r")?; 188 p.expect("\r")?;
189 p.expect("logged in as fred\r\n")?;
190 p.expect("posting 1 pull request with 2 commits...\r\n")?; 190 p.expect("posting 1 pull request with 2 commits...\r\n")?;
191 Ok(()) 191 Ok(())
192 } 192 }
193 193
194 async fn prep_run_create_pr() -> Result<(Relay<'static>, Relay<'static>, Relay<'static>)> { 194 async fn prep_run_create_pr() -> Result<(
195 Relay<'static>,
196 Relay<'static>,
197 Relay<'static>,
198 Relay<'static>,
199 Relay<'static>,
200 )> {
195 let git_repo = prep_git_repo()?; 201 let git_repo = prep_git_repo()?;
196 202 // fallback (51,52) user write (53, 55) repo (55, 56)
197 let (mut r51, mut r52, mut r53) = ( 203 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
198 Relay::new(8051, None, None), 204 Relay::new(
205 8051,
206 None,
207 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
208 relay.respond_events(
209 client_id,
210 &subscription_id,
211 &vec![
212 generate_test_key_1_metadata_event("fred"),
213 generate_test_key_1_relay_list_event(),
214 ],
215 )?;
216 Ok(())
217 }),
218 ),
199 Relay::new(8052, None, None), 219 Relay::new(8052, None, None),
200 Relay::new(8053, None, None), 220 Relay::new(8053, None, None),
221 Relay::new(8055, None, None),
222 Relay::new(8056, None, None),
201 ); 223 );
202 224
203 // // check relay had the right number of events 225 // // check relay had the right number of events
204 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 226 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
205 let mut p = cli_tester_create_pr(&git_repo); 227 let mut p = cli_tester_create_pr(&git_repo);
206 p.expect_end_eventually()?; 228 p.expect_end_eventually()?;
207 for p in [51, 52, 53] { 229 for p in [51, 52, 53, 55, 56] {
208 relay::shutdown_relay(8000 + p)?; 230 relay::shutdown_relay(8000 + p)?;
209 } 231 }
210 Ok(()) 232 Ok(())
@@ -215,16 +237,18 @@ mod sends_pr_and_2_patches_to_3_relays {
215 r51.listen_until_close(), 237 r51.listen_until_close(),
216 r52.listen_until_close(), 238 r52.listen_until_close(),
217 r53.listen_until_close(), 239 r53.listen_until_close(),
240 r55.listen_until_close(),
241 r56.listen_until_close(),
218 ); 242 );
219 cli_tester_handle.join().unwrap()?; 243 cli_tester_handle.join().unwrap()?;
220 Ok((r51, r52, r53)) 244 Ok((r51, r52, r53, r55, r56))
221 } 245 }
222 246
223 #[test] 247 #[test]
224 #[serial] 248 #[serial]
225 fn only_1_pr_kind_event_sent_to_each_relay() -> Result<()> { 249 fn only_1_pr_kind_event_sent_to_each_relay() -> Result<()> {
226 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 250 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
227 for relay in [&r51, &r52, &r53] { 251 for relay in [&r53, &r55, &r56] {
228 assert_eq!( 252 assert_eq!(
229 relay 253 relay
230 .events 254 .events
@@ -239,9 +263,60 @@ mod sends_pr_and_2_patches_to_3_relays {
239 263
240 #[test] 264 #[test]
241 #[serial] 265 #[serial]
266 fn only_1_pr_kind_event_sent_to_user_relays() -> Result<()> {
267 let (_, _, r53, r55, _) = futures::executor::block_on(prep_run_create_pr())?;
268 for relay in [&r53, &r55] {
269 assert_eq!(
270 relay
271 .events
272 .iter()
273 .filter(|e| e.kind.as_u64().eq(&PR_KIND))
274 .count(),
275 1,
276 );
277 }
278 Ok(())
279 }
280
281 #[test]
282 #[serial]
283 fn only_1_pr_kind_event_sent_to_repo_relays() -> Result<()> {
284 let (_, _, _, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
285 for relay in [&r55, &r56] {
286 assert_eq!(
287 relay
288 .events
289 .iter()
290 .filter(|e| e.kind.as_u64().eq(&PR_KIND))
291 .count(),
292 1,
293 );
294 }
295 Ok(())
296 }
297
298 #[test]
299 #[serial]
300 fn pr_not_sent_to_fallback_relay() -> Result<()> {
301 let (r51, r52, _, _, _) = futures::executor::block_on(prep_run_create_pr())?;
302 for relay in [&r51, &r52] {
303 assert_eq!(
304 relay
305 .events
306 .iter()
307 .filter(|e| e.kind.as_u64().eq(&PR_KIND))
308 .count(),
309 0,
310 );
311 }
312 Ok(())
313 }
314
315 #[test]
316 #[serial]
242 fn only_2_patch_kind_events_sent_to_each_relay() -> Result<()> { 317 fn only_2_patch_kind_events_sent_to_each_relay() -> Result<()> {
243 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 318 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
244 for relay in [&r51, &r52, &r53] { 319 for relay in [&r53, &r55, &r56] {
245 assert_eq!( 320 assert_eq!(
246 relay 321 relay
247 .events 322 .events
@@ -257,8 +332,8 @@ mod sends_pr_and_2_patches_to_3_relays {
257 #[test] 332 #[test]
258 #[serial] 333 #[serial]
259 fn patch_content_contains_patch_in_email_format() -> Result<()> { 334 fn patch_content_contains_patch_in_email_format() -> Result<()> {
260 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 335 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
261 for relay in [&r51, &r52, &r53] { 336 for relay in [&r53, &r55, &r56] {
262 let patch_events: Vec<&nostr::Event> = relay 337 let patch_events: Vec<&nostr::Event> = relay
263 .events 338 .events
264 .iter() 339 .iter()
@@ -326,8 +401,8 @@ mod sends_pr_and_2_patches_to_3_relays {
326 #[test] 401 #[test]
327 #[serial] 402 #[serial]
328 fn pr_tags_repo_commit() -> Result<()> { 403 fn pr_tags_repo_commit() -> Result<()> {
329 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 404 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
330 for relay in [&r51, &r52, &r53] { 405 for relay in [&r53, &r55, &r56] {
331 let pr_event: &nostr::Event = relay 406 let pr_event: &nostr::Event = relay
332 .events 407 .events
333 .iter() 408 .iter()
@@ -347,8 +422,8 @@ mod sends_pr_and_2_patches_to_3_relays {
347 #[test] 422 #[test]
348 #[serial] 423 #[serial]
349 fn patch_tags_correctly_formatted() -> Result<()> { 424 fn patch_tags_correctly_formatted() -> Result<()> {
350 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 425 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
351 for relay in [&r51, &r52, &r53] { 426 for relay in [&r53, &r55, &r56] {
352 let patch_events: Vec<&nostr::Event> = relay 427 let patch_events: Vec<&nostr::Event> = relay
353 .events 428 .events
354 .iter() 429 .iter()
@@ -394,8 +469,8 @@ mod sends_pr_and_2_patches_to_3_relays {
394 #[test] 469 #[test]
395 #[serial] 470 #[serial]
396 fn patch_tags_pr_event_as_root() -> Result<()> { 471 fn patch_tags_pr_event_as_root() -> Result<()> {
397 let (r51, r52, r53) = futures::executor::block_on(prep_run_create_pr())?; 472 let (_, _, r53, r55, r56) = futures::executor::block_on(prep_run_create_pr())?;
398 for relay in [&r51, &r52, &r53] { 473 for relay in [&r53, &r55, &r56] {
399 let patch_events: Vec<&nostr::Event> = relay 474 let patch_events: Vec<&nostr::Event> = relay
400 .events 475 .events
401 .iter() 476 .iter()
@@ -428,10 +503,26 @@ mod sends_pr_and_2_patches_to_3_relays {
428 async fn run_test_async() -> Result<()> { 503 async fn run_test_async() -> Result<()> {
429 let git_repo = prep_git_repo()?; 504 let git_repo = prep_git_repo()?;
430 505
431 let (mut r51, mut r52, mut r53) = ( 506 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
432 Relay::new(8051, None, None), 507 Relay::new(
508 8051,
509 None,
510 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
511 relay.respond_events(
512 client_id,
513 &subscription_id,
514 &vec![
515 generate_test_key_1_metadata_event("fred"),
516 generate_test_key_1_relay_list_event(),
517 ],
518 )?;
519 Ok(())
520 }),
521 ),
433 Relay::new(8052, None, None), 522 Relay::new(8052, None, None),
434 Relay::new(8053, None, None), 523 Relay::new(8053, None, None),
524 Relay::new(8055, None, None),
525 Relay::new(8056, None, None),
435 ); 526 );
436 527
437 // // check relay had the right number of events 528 // // check relay had the right number of events
@@ -441,14 +532,14 @@ mod sends_pr_and_2_patches_to_3_relays {
441 relay::expect_send_with_progress( 532 relay::expect_send_with_progress(
442 &mut p, 533 &mut p,
443 vec![ 534 vec![
444 (" [my-relay] [repo-relay] ws://localhost:8051", true, ""), 535 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
445 (" [my-relay] ws://localhost:8052", true, ""), 536 (" [my-relay] ws://localhost:8053", true, ""),
446 (" [repo-relay] ws://localhost:8053", true, ""), 537 (" [repo-relay] ws://localhost:8056", true, ""),
447 ], 538 ],
448 3, 539 3,
449 )?; 540 )?;
450 p.expect_end_with_whitespace()?; 541 p.expect_end_with_whitespace()?;
451 for p in [51, 52, 53] { 542 for p in [51, 52, 53, 55, 56] {
452 relay::shutdown_relay(8000 + p)?; 543 relay::shutdown_relay(8000 + p)?;
453 } 544 }
454 Ok(()) 545 Ok(())
@@ -459,6 +550,8 @@ mod sends_pr_and_2_patches_to_3_relays {
459 r51.listen_until_close(), 550 r51.listen_until_close(),
460 r52.listen_until_close(), 551 r52.listen_until_close(),
461 r53.listen_until_close(), 552 r53.listen_until_close(),
553 r55.listen_until_close(),
554 r56.listen_until_close(),
462 ); 555 );
463 cli_tester_handle.join().unwrap()?; 556 cli_tester_handle.join().unwrap()?;
464 Ok(()) 557 Ok(())
@@ -481,24 +574,40 @@ mod sends_pr_and_2_patches_to_3_relays {
481 async fn run_test_async() -> Result<()> { 574 async fn run_test_async() -> Result<()> {
482 let git_repo = prep_git_repo()?; 575 let git_repo = prep_git_repo()?;
483 576
484 let (mut r51, mut r52, mut r53) = ( 577 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
485 Relay::new(8051, None, None), 578 Relay::new(
579 8051,
580 None,
581 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
582 relay.respond_events(
583 client_id,
584 &subscription_id,
585 &vec![
586 generate_test_key_1_metadata_event("fred"),
587 generate_test_key_1_relay_list_event(),
588 ],
589 )?;
590 Ok(())
591 }),
592 ),
593 Relay::new(8052, None, None),
594 Relay::new(8053, None, None),
595 Relay::new(8055, None, None),
486 Relay::new( 596 Relay::new(
487 8052, 597 8056,
488 Some(&|relay, client_id, event| -> Result<()> { 598 Some(&|relay, client_id, event| -> Result<()> {
489 relay.respond_ok(client_id, event, Some("Payment Required"))?; 599 relay.respond_ok(client_id, event, Some("Payment Required"))?;
490 Ok(()) 600 Ok(())
491 }), 601 }),
492 None, 602 None,
493 ), 603 ),
494 Relay::new(8053, None, None),
495 ); 604 );
496 605
497 // // check relay had the right number of events 606 // // check relay had the right number of events
498 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 607 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
499 let mut p = cli_tester_create_pr(&git_repo); 608 let mut p = cli_tester_create_pr(&git_repo);
500 p.expect_end_eventually()?; 609 p.expect_end_eventually()?;
501 for p in [51, 52, 53] { 610 for p in [51, 52, 53, 55, 56] {
502 relay::shutdown_relay(8000 + p)?; 611 relay::shutdown_relay(8000 + p)?;
503 } 612 }
504 Ok(()) 613 Ok(())
@@ -509,10 +618,12 @@ mod sends_pr_and_2_patches_to_3_relays {
509 r51.listen_until_close(), 618 r51.listen_until_close(),
510 r52.listen_until_close(), 619 r52.listen_until_close(),
511 r53.listen_until_close(), 620 r53.listen_until_close(),
621 r55.listen_until_close(),
622 r56.listen_until_close(),
512 ); 623 );
513 cli_tester_handle.join().unwrap()?; 624 cli_tester_handle.join().unwrap()?;
514 625
515 assert_eq!(r52.events.len(), 1); 626 assert_eq!(r56.events.len(), 1);
516 627
517 Ok(()) 628 Ok(())
518 } 629 }
@@ -531,38 +642,55 @@ mod sends_pr_and_2_patches_to_3_relays {
531 async fn run_test_async() -> Result<(Relay<'static>, Relay<'static>, Relay<'static>)> { 642 async fn run_test_async() -> Result<(Relay<'static>, Relay<'static>, Relay<'static>)> {
532 let git_repo = prep_git_repo()?; 643 let git_repo = prep_git_repo()?;
533 644
534 let (mut r51, mut r52, mut r53) = ( 645 let (mut r51, mut r52, mut r53, mut r55, mut r56) = (
535 Relay::new(8051, None, None),
536 Relay::new( 646 Relay::new(
537 8052, 647 8051,
648 None,
649 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
650 relay.respond_events(
651 client_id,
652 &subscription_id,
653 &vec![
654 generate_test_key_1_metadata_event("fred"),
655 generate_test_key_1_relay_list_event(),
656 ],
657 )?;
658 Ok(())
659 }),
660 ),
661 Relay::new(8052, None, None),
662 Relay::new(8053, None, None),
663 Relay::new(8055, None, None),
664 Relay::new(
665 8056,
538 Some(&|relay, client_id, event| -> Result<()> { 666 Some(&|relay, client_id, event| -> Result<()> {
539 relay.respond_ok(client_id, event, Some("Payment Required"))?; 667 relay.respond_ok(client_id, event, Some("Payment Required"))?;
540 Ok(()) 668 Ok(())
541 }), 669 }),
542 None, 670 None,
543 ), 671 ),
544 Relay::new(8053, None, None),
545 ); 672 );
546 673
547 // // check relay had the right number of events 674 // // check relay had the right number of events
548 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 675 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
549 let mut p = cli_tester_create_pr(&git_repo); 676 let mut p = cli_tester_create_pr(&git_repo);
550 expect_msgs_first(&mut p)?; 677 expect_msgs_first(&mut p)?;
678 // p.expect_end_with("bla")?;
551 relay::expect_send_with_progress( 679 relay::expect_send_with_progress(
552 &mut p, 680 &mut p,
553 vec![ 681 vec![
554 (" [my-relay] [repo-relay] ws://localhost:8051", true, ""), 682 (" [my-relay] [repo-relay] ws://localhost:8055", true, ""),
683 (" [my-relay] ws://localhost:8053", true, ""),
555 ( 684 (
556 " [my-relay] ws://localhost:8052", 685 " [repo-relay] ws://localhost:8056",
557 false, 686 false,
558 "error: Payment Required", 687 "error: Payment Required",
559 ), 688 ),
560 (" [repo-relay] ws://localhost:8053", true, ""),
561 ], 689 ],
562 3, 690 3,
563 )?; 691 )?;
564 p.expect_end_with_whitespace()?; 692 p.expect_end_with_whitespace()?;
565 for p in [51, 52, 53] { 693 for p in [51, 52, 53, 55, 56] {
566 relay::shutdown_relay(8000 + p)?; 694 relay::shutdown_relay(8000 + p)?;
567 } 695 }
568 696
@@ -574,6 +702,8 @@ mod sends_pr_and_2_patches_to_3_relays {
574 r51.listen_until_close(), 702 r51.listen_until_close(),
575 r52.listen_until_close(), 703 r52.listen_until_close(),
576 r53.listen_until_close(), 704 r53.listen_until_close(),
705 r55.listen_until_close(),
706 r56.listen_until_close(),
577 ); 707 );
578 cli_tester_handle.join().unwrap()?; 708 cli_tester_handle.join().unwrap()?;
579 Ok((r51, r52, r53)) 709 Ok((r51, r52, r53))