mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2024-12-16 21:12:00 +03:00
e258710502
This type currently acts more or less like a command context that lives for the duration of the request. Regardless of if we wanna keep this pattern or not, separating it out helps us split up core
164 lines
5.2 KiB
Rust
164 lines
5.2 KiB
Rust
use std::path::PathBuf;
|
|
use std::str;
|
|
|
|
use gitbutler_command_context::ProjectRepo;
|
|
use gitbutler_core::{projects, users};
|
|
use gitbutler_repo::credentials::{Credential, Helper, SshCredential};
|
|
|
|
use gitbutler_testsupport::{temp_dir, test_repository};
|
|
|
|
#[derive(Default)]
|
|
struct TestCase<'a> {
|
|
remote_url: &'a str,
|
|
with_github_login: bool,
|
|
preferred_key: projects::AuthKey,
|
|
}
|
|
|
|
impl TestCase<'_> {
|
|
fn run(&self) -> Vec<(String, Vec<Credential>)> {
|
|
let local_app_data = temp_dir();
|
|
|
|
gitbutler_testsupport::secrets::setup_blackhole_store();
|
|
let users = users::Controller::from_path(local_app_data.path());
|
|
let user: users::User = serde_json::from_str(if self.with_github_login {
|
|
include_str!("../tests/fixtures/users/with-github.v1")
|
|
} else {
|
|
include_str!("../tests/fixtures/users/login-only.v1")
|
|
})
|
|
.expect("valid v1 sample user");
|
|
users.set_user(&user).unwrap();
|
|
|
|
let helper = Helper::default();
|
|
|
|
let (repo, _tmp) = test_repository();
|
|
repo.remote("origin", self.remote_url).unwrap();
|
|
let project = projects::Project {
|
|
path: repo.workdir().unwrap().to_path_buf(),
|
|
preferred_key: self.preferred_key.clone(),
|
|
..Default::default()
|
|
};
|
|
let project_repository = ProjectRepo::open(&project).unwrap();
|
|
|
|
let flow = helper.help(&project_repository, "origin").unwrap();
|
|
flow.into_iter()
|
|
.map(|(remote, credentials)| (remote.url().as_ref().unwrap().to_string(), credentials))
|
|
.collect::<Vec<_>>()
|
|
}
|
|
}
|
|
|
|
mod not_github {
|
|
use super::*;
|
|
|
|
mod with_preferred_key {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn https() {
|
|
let test_case = TestCase {
|
|
remote_url: "https://gitlab.com/test-gitbutler/test.git",
|
|
with_github_login: true,
|
|
preferred_key: projects::AuthKey::Local {
|
|
private_key_path: PathBuf::from("/tmp/id_rsa"),
|
|
},
|
|
};
|
|
let flow = test_case.run();
|
|
assert_eq!(flow.len(), 1);
|
|
assert_eq!(
|
|
flow[0].0,
|
|
"git@gitlab.com:test-gitbutler/test.git".to_string(),
|
|
);
|
|
assert_eq!(
|
|
flow[0].1,
|
|
vec![Credential::Ssh(SshCredential::Keyfile {
|
|
key_path: PathBuf::from("/tmp/id_rsa"),
|
|
passphrase: None,
|
|
})]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn ssh() {
|
|
let test_case = TestCase {
|
|
remote_url: "git@gitlab.com:test-gitbutler/test.git",
|
|
with_github_login: true,
|
|
preferred_key: projects::AuthKey::Local {
|
|
private_key_path: PathBuf::from("/tmp/id_rsa"),
|
|
},
|
|
};
|
|
let flow = test_case.run();
|
|
assert_eq!(flow.len(), 1);
|
|
assert_eq!(
|
|
flow[0].0,
|
|
"git@gitlab.com:test-gitbutler/test.git".to_string(),
|
|
);
|
|
assert_eq!(
|
|
flow[0].1,
|
|
vec![Credential::Ssh(SshCredential::Keyfile {
|
|
key_path: PathBuf::from("/tmp/id_rsa"),
|
|
passphrase: None,
|
|
})]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
mod github {
|
|
use super::*;
|
|
|
|
mod without_github_token {
|
|
use super::*;
|
|
|
|
mod with_preferred_key {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn https() {
|
|
let test_case = TestCase {
|
|
remote_url: "https://github.com/gitbutlerapp/gitbutler.git",
|
|
with_github_login: true,
|
|
preferred_key: projects::AuthKey::Local {
|
|
private_key_path: PathBuf::from("/tmp/id_rsa"),
|
|
},
|
|
};
|
|
let flow = test_case.run();
|
|
assert_eq!(flow.len(), 1);
|
|
assert_eq!(
|
|
flow[0].0,
|
|
"git@github.com:gitbutlerapp/gitbutler.git".to_string(),
|
|
);
|
|
assert_eq!(
|
|
flow[0].1,
|
|
vec![Credential::Ssh(SshCredential::Keyfile {
|
|
key_path: PathBuf::from("/tmp/id_rsa"),
|
|
passphrase: None,
|
|
})]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn ssh() {
|
|
let test_case = TestCase {
|
|
remote_url: "git@github.com:gitbutlerapp/gitbutler.git",
|
|
with_github_login: true,
|
|
preferred_key: projects::AuthKey::Local {
|
|
private_key_path: PathBuf::from("/tmp/id_rsa"),
|
|
},
|
|
};
|
|
let flow = test_case.run();
|
|
assert_eq!(flow.len(), 1);
|
|
assert_eq!(
|
|
flow[0].0,
|
|
"git@github.com:gitbutlerapp/gitbutler.git".to_string(),
|
|
);
|
|
assert_eq!(
|
|
flow[0].1,
|
|
vec![Credential::Ssh(SshCredential::Keyfile {
|
|
key_path: PathBuf::from("/tmp/id_rsa"),
|
|
passphrase: None,
|
|
})]
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|