upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/ngit_login.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-07-16 10:59:20 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2025-07-16 10:59:20 +0100
commitac53bca7e315848864ff9e51703720b5b466bc42 (patch)
tree775e425f0af2543eb12e4a4b1d4feb022611368f /tests/ngit_login.rs
parent092b9606ff2b721d858a5c7b2b27a2f9942b4bc4 (diff)
chore: bump nightly rustfmt
to latest available and apply fmt fixes
Diffstat (limited to 'tests/ngit_login.rs')
-rw-r--r--tests/ngit_login.rs350
1 files changed, 209 insertions, 141 deletions
diff --git a/tests/ngit_login.rs b/tests/ngit_login.rs
index 09e40f1..9e708dc 100644
--- a/tests/ngit_login.rs
+++ b/tests/ngit_login.rs
@@ -6,21 +6,27 @@ use test_utils::*;
6static EXPECTED_NSEC_PROMPT: &str = "nsec"; 6static EXPECTED_NSEC_PROMPT: &str = "nsec";
7 7
8fn show_first_time_login_choices(p: &mut CliTester) -> Result<CliTesterChoicePrompt> { 8fn show_first_time_login_choices(p: &mut CliTester) -> Result<CliTesterChoicePrompt> {
9 p.expect_choice("login to nostr", vec![ 9 p.expect_choice(
10 "secret key (nsec / ncryptsec)".to_string(), 10 "login to nostr",
11 "nostr connect (remote signer)".to_string(), 11 vec![
12 "create account".to_string(), 12 "secret key (nsec / ncryptsec)".to_string(),
13 "help".to_string(), 13 "nostr connect (remote signer)".to_string(),
14 ]) 14 "create account".to_string(),
15 "help".to_string(),
16 ],
17 )
15} 18}
16 19
17fn first_time_login_choices_succeeds_with_nsec(p: &mut CliTester, nsec: &str) -> Result<()> { 20fn first_time_login_choices_succeeds_with_nsec(p: &mut CliTester, nsec: &str) -> Result<()> {
18 p.expect_choice("login to nostr", vec![ 21 p.expect_choice(
19 "secret key (nsec / ncryptsec)".to_string(), 22 "login to nostr",
20 "nostr connect (remote signer)".to_string(), 23 vec![
21 "create account".to_string(), 24 "secret key (nsec / ncryptsec)".to_string(),
22 "help".to_string(), 25 "nostr connect (remote signer)".to_string(),
23 ])? 26 "create account".to_string(),
27 "help".to_string(),
28 ],
29 )?
24 .succeeds_with(0, false, Some(0))?; 30 .succeeds_with(0, false, Some(0))?;
25 31
26 p.expect_input(EXPECTED_NSEC_PROMPT)? 32 p.expect_input(EXPECTED_NSEC_PROMPT)?
@@ -129,17 +135,25 @@ mod with_relays {
129 async fn when_latest_metadata_and_relay_list_on_all_relays() -> Result<()> { 135 async fn when_latest_metadata_and_relay_list_on_all_relays() -> Result<()> {
130 run_test_displays_correct_name( 136 run_test_displays_correct_name(
131 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 137 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
132 relay.respond_events(client_id, &subscription_id, &vec![ 138 relay.respond_events(
133 generate_test_key_1_metadata_event("fred"), 139 client_id,
134 generate_test_key_1_relay_list_event_same_as_fallback(), 140 &subscription_id,
135 ])?; 141 &vec![
142 generate_test_key_1_metadata_event("fred"),
143 generate_test_key_1_relay_list_event_same_as_fallback(),
144 ],
145 )?;
136 Ok(()) 146 Ok(())
137 }), 147 }),
138 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 148 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
139 relay.respond_events(client_id, &subscription_id, &vec![ 149 relay.respond_events(
140 generate_test_key_1_metadata_event("fred"), 150 client_id,
141 generate_test_key_1_relay_list_event_same_as_fallback(), 151 &subscription_id,
142 ])?; 152 &vec![
153 generate_test_key_1_metadata_event("fred"),
154 generate_test_key_1_relay_list_event_same_as_fallback(),
155 ],
156 )?;
143 Ok(()) 157 Ok(())
144 }), 158 }),
145 ) 159 )
@@ -154,14 +168,18 @@ mod with_relays {
154 async fn when_metadata_contains_only_display_name() -> Result<()> { 168 async fn when_metadata_contains_only_display_name() -> Result<()> {
155 run_test_displays_correct_name( 169 run_test_displays_correct_name(
156 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 170 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
157 relay.respond_events(client_id, &subscription_id, &vec![ 171 relay.respond_events(
158 nostr::event::EventBuilder::metadata( 172 client_id,
159 &nostr::Metadata::new().display_name("fred"), 173 &subscription_id,
160 ) 174 &vec![
161 .sign_with_keys(&TEST_KEY_1_KEYS) 175 nostr::event::EventBuilder::metadata(
162 .unwrap(), 176 &nostr::Metadata::new().display_name("fred"),
163 generate_test_key_1_relay_list_event_same_as_fallback(), 177 )
164 ])?; 178 .sign_with_keys(&TEST_KEY_1_KEYS)
179 .unwrap(),
180 generate_test_key_1_relay_list_event_same_as_fallback(),
181 ],
182 )?;
165 Ok(()) 183 Ok(())
166 }), 184 }),
167 None, 185 None,
@@ -187,14 +205,19 @@ mod with_relays {
187 205
188 run_test_displays_correct_name( 206 run_test_displays_correct_name(
189 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 207 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
190 relay.respond_events(client_id, &subscription_id, &vec![ 208 relay.respond_events(
191 nostr::event::EventBuilder::metadata( 209 client_id,
192 &nostr::Metadata::new().custom_field("displayName", "fred"), 210 &subscription_id,
193 ) 211 &vec![
194 .sign_with_keys(&TEST_KEY_1_KEYS) 212 nostr::event::EventBuilder::metadata(
195 .unwrap(), 213 &nostr::Metadata::new()
196 generate_test_key_1_relay_list_event_same_as_fallback(), 214 .custom_field("displayName", "fred"),
197 ])?; 215 )
216 .sign_with_keys(&TEST_KEY_1_KEYS)
217 .unwrap(),
218 generate_test_key_1_relay_list_event_same_as_fallback(),
219 ],
220 )?;
198 Ok(()) 221 Ok(())
199 }), 222 }),
200 None, 223 None,
@@ -208,14 +231,18 @@ mod with_relays {
208 -> Result<()> { 231 -> Result<()> {
209 run_test_displays_fallback_to_npub( 232 run_test_displays_fallback_to_npub(
210 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 233 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
211 relay.respond_events(client_id, &subscription_id, &vec![ 234 relay.respond_events(
212 nostr::event::EventBuilder::metadata( 235 client_id,
213 &nostr::Metadata::new().about("other info in metadata"), 236 &subscription_id,
214 ) 237 &vec![
215 .sign_with_keys(&TEST_KEY_1_KEYS) 238 nostr::event::EventBuilder::metadata(
216 .unwrap(), 239 &nostr::Metadata::new().about("other info in metadata"),
217 generate_test_key_1_relay_list_event_same_as_fallback(), 240 )
218 ])?; 241 .sign_with_keys(&TEST_KEY_1_KEYS)
242 .unwrap(),
243 generate_test_key_1_relay_list_event_same_as_fallback(),
244 ],
245 )?;
219 Ok(()) 246 Ok(())
220 }), 247 }),
221 None, 248 None,
@@ -230,10 +257,14 @@ mod with_relays {
230 -> Result<()> { 257 -> Result<()> {
231 run_test_displays_correct_name( 258 run_test_displays_correct_name(
232 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 259 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
233 relay.respond_events(client_id, &subscription_id, &vec![ 260 relay.respond_events(
234 generate_test_key_1_metadata_event("fred"), 261 client_id,
235 generate_test_key_1_relay_list_event_same_as_fallback(), 262 &subscription_id,
236 ])?; 263 &vec![
264 generate_test_key_1_metadata_event("fred"),
265 generate_test_key_1_relay_list_event_same_as_fallback(),
266 ],
267 )?;
237 Ok(()) 268 Ok(())
238 }), 269 }),
239 None, 270 None,
@@ -247,15 +278,19 @@ mod with_relays {
247 { 278 {
248 run_test_displays_correct_name( 279 run_test_displays_correct_name(
249 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 280 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
250 relay.respond_events(client_id, &subscription_id, &vec![ 281 relay.respond_events(
251 generate_test_key_1_metadata_event("fred"), 282 client_id,
252 ])?; 283 &subscription_id,
284 &vec![generate_test_key_1_metadata_event("fred")],
285 )?;
253 Ok(()) 286 Ok(())
254 }), 287 }),
255 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 288 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
256 relay.respond_events(client_id, &subscription_id, &vec![ 289 relay.respond_events(
257 generate_test_key_1_relay_list_event_same_as_fallback(), 290 client_id,
258 ])?; 291 &subscription_id,
292 &vec![generate_test_key_1_relay_list_event_same_as_fallback()],
293 )?;
259 Ok(()) 294 Ok(())
260 }), 295 }),
261 ) 296 )
@@ -267,16 +302,22 @@ mod with_relays {
267 async fn when_some_relays_return_old_metadata_event() -> Result<()> { 302 async fn when_some_relays_return_old_metadata_event() -> Result<()> {
268 run_test_displays_correct_name( 303 run_test_displays_correct_name(
269 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 304 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
270 relay.respond_events(client_id, &subscription_id, &vec![ 305 relay.respond_events(
271 generate_test_key_1_metadata_event("fred"), 306 client_id,
272 generate_test_key_1_relay_list_event_same_as_fallback(), 307 &subscription_id,
273 ])?; 308 &vec![
309 generate_test_key_1_metadata_event("fred"),
310 generate_test_key_1_relay_list_event_same_as_fallback(),
311 ],
312 )?;
274 Ok(()) 313 Ok(())
275 }), 314 }),
276 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 315 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
277 relay.respond_events(client_id, &subscription_id, &vec![ 316 relay.respond_events(
278 generate_test_key_1_metadata_event_old("fred old"), 317 client_id,
279 ])?; 318 &subscription_id,
319 &vec![generate_test_key_1_metadata_event_old("fred old")],
320 )?;
280 Ok(()) 321 Ok(())
281 }), 322 }),
282 ) 323 )
@@ -288,16 +329,22 @@ mod with_relays {
288 async fn when_some_relays_return_other_users_metadata() -> Result<()> { 329 async fn when_some_relays_return_other_users_metadata() -> Result<()> {
289 run_test_displays_correct_name( 330 run_test_displays_correct_name(
290 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 331 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
291 relay.respond_events(client_id, &subscription_id, &vec![ 332 relay.respond_events(
292 generate_test_key_2_metadata_event("carole"), 333 client_id,
293 ])?; 334 &subscription_id,
335 &vec![generate_test_key_2_metadata_event("carole")],
336 )?;
294 Ok(()) 337 Ok(())
295 }), 338 }),
296 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 339 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
297 relay.respond_events(client_id, &subscription_id, &vec![ 340 relay.respond_events(
298 generate_test_key_1_metadata_event_old("fred"), 341 client_id,
299 generate_test_key_1_relay_list_event_same_as_fallback(), 342 &subscription_id,
300 ])?; 343 &vec![
344 generate_test_key_1_metadata_event_old("fred"),
345 generate_test_key_1_relay_list_event_same_as_fallback(),
346 ],
347 )?;
301 Ok(()) 348 Ok(())
302 }), 349 }),
303 ) 350 )
@@ -310,16 +357,22 @@ mod with_relays {
310 run_test_displays_correct_name( 357 run_test_displays_correct_name(
311 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 358 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
312 let event = generate_test_key_1_kind_event(nostr::Kind::TextNote); 359 let event = generate_test_key_1_kind_event(nostr::Kind::TextNote);
313 relay.respond_events(client_id, &subscription_id, &vec![ 360 relay.respond_events(
314 make_event_old_or_change_user(event, &TEST_KEY_1_KEYS, 0), 361 client_id,
315 ])?; 362 &subscription_id,
363 &vec![make_event_old_or_change_user(event, &TEST_KEY_1_KEYS, 0)],
364 )?;
316 Ok(()) 365 Ok(())
317 }), 366 }),
318 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 367 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
319 relay.respond_events(client_id, &subscription_id, &vec![ 368 relay.respond_events(
320 generate_test_key_1_metadata_event_old("fred"), 369 client_id,
321 generate_test_key_1_relay_list_event_same_as_fallback(), 370 &subscription_id,
322 ])?; 371 &vec![
372 generate_test_key_1_metadata_event_old("fred"),
373 generate_test_key_1_relay_list_event_same_as_fallback(),
374 ],
375 )?;
323 Ok(()) 376 Ok(())
324 }), 377 }),
325 ) 378 )
@@ -334,10 +387,14 @@ mod with_relays {
334 async fn displays_correct_name() -> Result<()> { 387 async fn displays_correct_name() -> Result<()> {
335 run_test_when_specifying_command_line_nsec_only_displays_correct_name( 388 run_test_when_specifying_command_line_nsec_only_displays_correct_name(
336 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 389 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
337 relay.respond_events(client_id, &subscription_id, &vec![ 390 relay.respond_events(
338 generate_test_key_1_metadata_event("fred"), 391 client_id,
339 generate_test_key_1_relay_list_event_same_as_fallback(), 392 &subscription_id,
340 ])?; 393 &vec![
394 generate_test_key_1_metadata_event("fred"),
395 generate_test_key_1_relay_list_event_same_as_fallback(),
396 ],
397 )?;
341 Ok(()) 398 Ok(())
342 }), 399 }),
343 None, 400 None,
@@ -355,12 +412,10 @@ mod with_relays {
355 412
356 let cli_tester_handle = std::thread::spawn(move || -> Result<()> { 413 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
357 let test_repo = GitTestRepo::default(); 414 let test_repo = GitTestRepo::default();
358 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 415 let mut p = CliTester::new_from_dir(
359 "account", 416 &test_repo.dir,
360 "login", 417 ["account", "login", "--nsec", TEST_KEY_1_NSEC],
361 "--nsec", 418 );
362 TEST_KEY_1_NSEC,
363 ]);
364 419
365 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; 420 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?;
366 421
@@ -432,9 +487,11 @@ mod with_relays {
432 async fn warm_user_and_displays_name() -> Result<()> { 487 async fn warm_user_and_displays_name() -> Result<()> {
433 run_test_when_no_relay_list_found_warns_user_and_uses_npub( 488 run_test_when_no_relay_list_found_warns_user_and_uses_npub(
434 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 489 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
435 relay.respond_events(client_id, &subscription_id, &vec![ 490 relay.respond_events(
436 generate_test_key_1_metadata_event("fred"), 491 client_id,
437 ])?; 492 &subscription_id,
493 &vec![generate_test_key_1_metadata_event("fred")],
494 )?;
438 Ok(()) 495 Ok(())
439 }), 496 }),
440 None, 497 None,
@@ -525,17 +582,25 @@ mod with_relays {
525 async fn displays_correct_name() -> Result<()> { 582 async fn displays_correct_name() -> Result<()> {
526 run_test_displays_correct_name( 583 run_test_displays_correct_name(
527 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 584 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
528 relay.respond_events(client_id, &subscription_id, &vec![ 585 relay.respond_events(
529 generate_test_key_1_metadata_event_old("Fred"), 586 client_id,
530 generate_test_key_1_relay_list_event(), 587 &subscription_id,
531 ])?; 588 &vec![
589 generate_test_key_1_metadata_event_old("Fred"),
590 generate_test_key_1_relay_list_event(),
591 ],
592 )?;
532 Ok(()) 593 Ok(())
533 }), 594 }),
534 Some(&|relay, client_id, subscription_id, _| -> Result<()> { 595 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
535 relay.respond_events(client_id, &subscription_id, &vec![ 596 relay.respond_events(
536 generate_test_key_1_metadata_event("fred"), 597 client_id,
537 generate_test_key_1_relay_list_event(), 598 &subscription_id,
538 ])?; 599 &vec![
600 generate_test_key_1_metadata_event("fred"),
601 generate_test_key_1_relay_list_event(),
602 ],
603 )?;
539 Ok(()) 604 Ok(())
540 }), 605 }),
541 ) 606 )
@@ -607,10 +672,10 @@ mod with_offline_flag {
607 true, 672 true,
608 )?; 673 )?;
609 674
610 p.expect_choice("login to nostr", vec![ 675 p.expect_choice(
611 "try again with nsec".to_string(), 676 "login to nostr",
612 "back".to_string(), 677 vec!["try again with nsec".to_string(), "back".to_string()],
613 ])? 678 )?
614 .succeeds_with(0, false, Some(0))?; 679 .succeeds_with(0, false, Some(0))?;
615 } 680 }
616 681
@@ -630,13 +695,10 @@ mod with_offline_flag {
630 #[test] 695 #[test]
631 fn valid_nsec_param_succeeds_without_prompts() -> Result<()> { 696 fn valid_nsec_param_succeeds_without_prompts() -> Result<()> {
632 let test_repo = GitTestRepo::default(); 697 let test_repo = GitTestRepo::default();
633 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 698 let mut p = CliTester::new_from_dir(
634 "account", 699 &test_repo.dir,
635 "login", 700 ["account", "login", "--offline", "--nsec", TEST_KEY_1_NSEC],
636 "--offline", 701 );
637 "--nsec",
638 TEST_KEY_1_NSEC,
639 ]);
640 702
641 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; 703 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?;
642 704
@@ -648,13 +710,10 @@ mod with_offline_flag {
648 #[test] 710 #[test]
649 fn invalid_nsec_param_fails_without_prompts() -> Result<()> { 711 fn invalid_nsec_param_fails_without_prompts() -> Result<()> {
650 let test_repo = GitTestRepo::default(); 712 let test_repo = GitTestRepo::default();
651 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 713 let mut p = CliTester::new_from_dir(
652 "account", 714 &test_repo.dir,
653 "login", 715 ["account", "login", "--offline", "--nsec", TEST_INVALID_NSEC],
654 "--offline", 716 );
655 "--nsec",
656 TEST_INVALID_NSEC,
657 ]);
658 717
659 p.expect_end_with( 718 p.expect_end_with(
660 "Error: invalid nsec parameter\r\n\r\nCaused by:\r\n Invalid secret key\r\n", 719 "Error: invalid nsec parameter\r\n\r\nCaused by:\r\n Invalid secret key\r\n",
@@ -668,15 +727,18 @@ mod with_offline_flag {
668 #[test] 727 #[test]
669 fn valid_nsec_param_succeeds_without_prompts() -> Result<()> { 728 fn valid_nsec_param_succeeds_without_prompts() -> Result<()> {
670 let test_repo = GitTestRepo::default(); 729 let test_repo = GitTestRepo::default();
671 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 730 let mut p = CliTester::new_from_dir(
672 "account", 731 &test_repo.dir,
673 "login", 732 [
674 "--offline", 733 "account",
675 "--nsec", 734 "login",
676 TEST_KEY_1_NSEC, 735 "--offline",
677 "--password", 736 "--nsec",
678 TEST_PASSWORD, 737 TEST_KEY_1_NSEC,
679 ]); 738 "--password",
739 TEST_PASSWORD,
740 ],
741 );
680 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; 742 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?;
681 743
682 p.expect_end_with( 744 p.expect_end_with(
@@ -687,15 +749,18 @@ mod with_offline_flag {
687 #[test] 749 #[test]
688 fn parameters_can_be_called_globally() -> Result<()> { 750 fn parameters_can_be_called_globally() -> Result<()> {
689 let test_repo = GitTestRepo::default(); 751 let test_repo = GitTestRepo::default();
690 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 752 let mut p = CliTester::new_from_dir(
691 "--nsec", 753 &test_repo.dir,
692 TEST_KEY_1_NSEC, 754 [
693 "--password", 755 "--nsec",
694 TEST_PASSWORD, 756 TEST_KEY_1_NSEC,
695 "account", 757 "--password",
696 "login", 758 TEST_PASSWORD,
697 "--offline", 759 "account",
698 ]); 760 "login",
761 "--offline",
762 ],
763 );
699 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; 764 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?;
700 765
701 p.expect_end_with( 766 p.expect_end_with(
@@ -710,15 +775,18 @@ mod with_offline_flag {
710 fn valid_nsec_param_succeeds_without_prompts_and_logs_in() -> Result<()> { 775 fn valid_nsec_param_succeeds_without_prompts_and_logs_in() -> Result<()> {
711 standard_first_time_login_with_nsec()?.exit()?; 776 standard_first_time_login_with_nsec()?.exit()?;
712 let test_repo = GitTestRepo::default(); 777 let test_repo = GitTestRepo::default();
713 let mut p = CliTester::new_from_dir(&test_repo.dir, [ 778 let mut p = CliTester::new_from_dir(
714 "account", 779 &test_repo.dir,
715 "login", 780 [
716 "--offline", 781 "account",
717 "--nsec", 782 "login",
718 TEST_KEY_2_NSEC, 783 "--offline",
719 "--password", 784 "--nsec",
720 TEST_PASSWORD, 785 TEST_KEY_2_NSEC,
721 ]); 786 "--password",
787 TEST_PASSWORD,
788 ],
789 );
722 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?; 790 p.expect("saved login details to local git config. you are only logged in to this local repository.\r\n")?;
723 791
724 p.expect_end_with( 792 p.expect_end_with(