Add desktop HTTPS Git synchronization
This commit is contained in:
@@ -341,6 +341,34 @@ fn injected_smart_http_push_sends_a_complete_pack_and_credentials() -> TestResul
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn controlled_sync_pulls_then_pushes_with_one_progress_and_cancellation_contract() -> TestResult {
|
||||
let temporary = tempfile::tempdir()?;
|
||||
let config = remote_config(&temporary)?;
|
||||
let remote = &config.git_remotes()[0];
|
||||
let store = Repository::open(config.vault())?;
|
||||
let mut git = GitRepository::init(&store, identity())?;
|
||||
git.add_remote("origin", remote.url().as_str())?;
|
||||
let head = git.log(Some(1))?[0].id().to_owned();
|
||||
set_remote_tracking(config.vault(), &head)?;
|
||||
let phases = Arc::new(Mutex::new(Vec::new()));
|
||||
let recorded = Arc::clone(&phases);
|
||||
let control = GitOperationControl::new(move |phase| {
|
||||
recorded.lock().expect("progress").push(phase);
|
||||
});
|
||||
let push = RecordingTransport::default();
|
||||
let (pull, pushed) =
|
||||
git.sync_with_transports_controlled(remote, &Credentials, &NoopFetch, &push, &control)?;
|
||||
assert_eq!(pull, PullOutcome::UpToDate);
|
||||
assert_eq!(pushed.new_id(), head);
|
||||
let phases = phases.lock().expect("progress");
|
||||
assert!(phases.contains(&GitProgressPhase::Receiving));
|
||||
assert!(phases.contains(&GitProgressPhase::Integrating));
|
||||
assert!(phases.contains(&GitProgressPhase::Sending));
|
||||
assert!(!push.request.lock().expect("push request").is_empty());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn push_propagates_authentication_and_rejects_non_fast_forward_before_upload() -> TestResult {
|
||||
let temporary = tempfile::tempdir()?;
|
||||
|
||||
Reference in New Issue
Block a user