upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/git_remote_helper.rs99
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/git_remote_helper.rs b/tests/git_remote_helper.rs
index a575b58..ea76445 100644
--- a/tests/git_remote_helper.rs
+++ b/tests/git_remote_helper.rs
@@ -9,6 +9,7 @@ use serial_test::serial;
9use test_utils::{git::GitTestRepo, *}; 9use test_utils::{git::GitTestRepo, *};
10 10
11static NOSTR_REMOTE_NAME: &str = "nostr"; 11static NOSTR_REMOTE_NAME: &str = "nostr";
12static STATE_KIND: nostr::Kind = Kind::Custom(30618);
12 13
13fn get_nostr_remote_url() -> Result<String> { 14fn get_nostr_remote_url() -> Result<String> {
14 let repo_event = generate_repo_ref_event(); 15 let repo_event = generate_repo_ref_event();
@@ -429,6 +430,104 @@ mod push {
429 async_run_test().await 430 async_run_test().await
430 } 431 }
431 } 432 }
433 mod no_existing_state_event {
434 use super::*;
435
436 mod state_on_git_server_published_in_nostr_state_event {
437
438 use super::*;
439
440 async fn async_run_test() -> Result<()> {
441 let git_repo = prep_git_repo()?;
442 let source_git_repo = GitTestRepo::recreate_as_bare(&git_repo)?;
443
444 std::fs::write(git_repo.dir.join("commit.md"), "some content")?;
445 let main_commit_id = git_repo.stage_and_commit("commit.md")?;
446
447 git_repo.create_branch("vnext")?;
448 git_repo.checkout("vnext")?;
449 std::fs::write(git_repo.dir.join("vnext.md"), "some content")?;
450 let vnext_commit_id = git_repo.stage_and_commit("vnext.md")?;
451
452 let events = vec![
453 generate_test_key_1_metadata_event("fred"),
454 generate_test_key_1_relay_list_event(),
455 generate_repo_ref_event_with_git_server(
456 source_git_repo.dir.to_str().unwrap(),
457 ),
458 ];
459 // fallback (51,52) user write (53, 55) repo (55, 56) blaster (57)
460 let (mut r51, mut r52, mut r53, mut r55, mut r56, mut r57) = (
461 Relay::new(8051, None, None),
462 Relay::new(8052, None, None),
463 Relay::new(8053, None, None),
464 Relay::new(8055, None, None),
465 Relay::new(8056, None, None),
466 Relay::new(8057, None, None),
467 );
468 r51.events = events.clone();
469 r55.events = events;
470
471 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
472 let mut p = cli_tester_after_fetch(&git_repo)?;
473 p.send_line("push refs/heads/main:refs/heads/main")?;
474 p.send_line("push refs/heads/vnext:refs/heads/vnext")?;
475 p.send_line("")?;
476 p.expect("ok refs/heads/main\r\n")?;
477 p.expect("ok refs/heads/vnext\r\n")?;
478 p.expect("\r\n")?;
479
480 p.exit()?;
481 for p in [51, 52, 53, 55, 56, 57] {
482 relay::shutdown_relay(8000 + p)?;
483 }
484 Ok(())
485 });
486 // launch relays
487 let _ = join!(
488 r51.listen_until_close(),
489 r52.listen_until_close(),
490 r53.listen_until_close(),
491 r55.listen_until_close(),
492 r56.listen_until_close(),
493 r57.listen_until_close(),
494 );
495 cli_tester_handle.join().unwrap()?;
496
497 let state_event = r56
498 .events
499 .iter()
500 .find(|e| e.kind().eq(&STATE_KIND))
501 .context("state event not created")?;
502
503 assert_eq!(
504 state_event.identifier(),
505 generate_repo_ref_event().identifier(),
506 );
507 // println!("{:#?}", state_event);
508 assert_eq!(
509 state_event
510 .tags
511 .iter()
512 .filter(|t| t.kind().to_string().as_str().ne("d"))
513 .map(|t| t.as_vec().to_vec())
514 .collect::<HashSet<Vec<String>>>(),
515 HashSet::from([
516 vec!["HEAD".to_string(), "ref: refs/heads/main".to_string()],
517 vec!["refs/heads/main".to_string(), main_commit_id.to_string()],
518 vec!["refs/heads/vnext".to_string(), vnext_commit_id.to_string()],
519 ]),
520 );
521 Ok(())
522 }
523
524 #[tokio::test]
525 #[serial]
526 async fn sate_event_reflects_git_server_state() -> Result<()> {
527 async_run_test().await
528 }
529 }
530 }
432 } 531 }
433 mod delete_one_branch { 532 mod delete_one_branch {
434 533