forked from kemitix/git-next
refactor: split git::repository::open::tests module
This commit is contained in:
parent
6a8d1bf817
commit
2e374d317a
9 changed files with 398 additions and 454 deletions
|
@ -1,454 +0,0 @@
|
|||
//
|
||||
use crate as git;
|
||||
use crate::repository::RepositoryLike as _;
|
||||
use git::tests::given;
|
||||
use git_next_config as config;
|
||||
|
||||
use assert2::let_assert;
|
||||
type TestResult = Result<(), Box<dyn std::error::Error>>;
|
||||
|
||||
mod server_repo_config {
|
||||
use super::*;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use assert2::let_assert;
|
||||
|
||||
use crate::tests::given;
|
||||
|
||||
#[test]
|
||||
fn should_not_return_repo_config_when_no_branches() {
|
||||
let main = None;
|
||||
let next = None;
|
||||
let dev = None;
|
||||
let src =
|
||||
config::ServerRepoConfig::new(given::a_name(), given::a_name(), None, main, next, dev);
|
||||
|
||||
let_assert!(None = src.repo_config());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo_config_when_branches() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
given::a_name(),
|
||||
None,
|
||||
Some(main.clone()),
|
||||
Some(next.clone()),
|
||||
Some(dev.clone()),
|
||||
);
|
||||
|
||||
let_assert!(Some(rc) = src.repo_config());
|
||||
assert_eq!(
|
||||
rc,
|
||||
config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Server
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo() {
|
||||
let repo_path = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
repo_path.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(src.repo(), config::RepoPath::new(repo_path));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_branch() {
|
||||
let branch = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
branch.clone(),
|
||||
None,
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(src.branch(), config::BranchName::new(branch));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_gitdir() {
|
||||
let gitdir = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
given::a_name(),
|
||||
Some(gitdir.clone().into()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
src.gitdir(),
|
||||
Some(config::GitDir::new(PathBuf::default().join(gitdir)))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
mod repo_config {
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn should_parse_toml() -> TestResult {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let toml = format!(
|
||||
r#"
|
||||
[branches]
|
||||
main = "{main}"
|
||||
next = "{next}"
|
||||
dev = "{dev}"
|
||||
"#
|
||||
);
|
||||
|
||||
let rc = config::RepoConfig::parse(toml.as_str())?;
|
||||
|
||||
assert_eq!(
|
||||
rc,
|
||||
config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Repo // reading from repo is the default
|
||||
)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
#[test]
|
||||
fn should_return_branches() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let branches = config::RepoBranches::new(main, next, dev);
|
||||
let repo_config = config::RepoConfig::new(branches.clone(), config::RepoConfigSource::Repo);
|
||||
|
||||
assert_eq!(repo_config.branches(), &branches);
|
||||
}
|
||||
#[test]
|
||||
fn should_return_source() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let repo_config = config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Repo,
|
||||
);
|
||||
|
||||
assert_eq!(repo_config.source(), config::RepoConfigSource::Repo);
|
||||
}
|
||||
}
|
||||
|
||||
mod forge_config {
|
||||
use super::*;
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use secrecy::ExposeSecret;
|
||||
|
||||
use crate::tests::given;
|
||||
|
||||
#[test]
|
||||
fn should_return_repos() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
// alphabetical order by key
|
||||
let red_name = format!("a-{}", given::a_name());
|
||||
let blue_name = format!("b-{}", given::a_name());
|
||||
let red = config::ServerRepoConfig::new(
|
||||
red_name.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let blue = config::ServerRepoConfig::new(
|
||||
blue_name.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let mut repos = BTreeMap::new();
|
||||
repos.insert(red_name.clone(), red.clone());
|
||||
repos.insert(blue_name.clone(), blue.clone());
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
let returned_repos = fc.repos().collect::<Vec<_>>();
|
||||
|
||||
assert_eq!(
|
||||
returned_repos,
|
||||
vec![
|
||||
// alphabetical order by key
|
||||
(config::RepoAlias::new(red_name.as_str()), &red),
|
||||
(config::RepoAlias::new(blue_name.as_str()), &blue),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_forge_type() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
assert_eq!(fc.forge_type(), config::ForgeType::MockForge);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_hostname() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname.clone(), user, token, repos);
|
||||
|
||||
assert_eq!(fc.hostname(), config::Hostname::new(hostname));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_user() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user.clone(), token, repos);
|
||||
|
||||
assert_eq!(fc.user(), config::User::new(user));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_token() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token.clone(), repos);
|
||||
|
||||
assert_eq!(fc.token().expose_secret(), token.as_str());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let red_name = given::a_name();
|
||||
let blue_name = given::a_name();
|
||||
let red = config::ServerRepoConfig::new(
|
||||
red_name.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let blue = config::ServerRepoConfig::new(
|
||||
blue_name.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
let mut repos = BTreeMap::new();
|
||||
repos.insert(red_name.clone(), red.clone());
|
||||
repos.insert(blue_name, blue);
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
let returned_repo = fc.get_repo(red_name.as_str());
|
||||
|
||||
assert_eq!(returned_repo, Some(&red),);
|
||||
}
|
||||
}
|
||||
|
||||
mod find_default_remote {
|
||||
use super::*;
|
||||
|
||||
use assert2::let_assert;
|
||||
|
||||
#[test]
|
||||
fn should_find_default_push_remote() {
|
||||
// uses the current repo
|
||||
let_assert!(Ok(cwd) = std::env::current_dir());
|
||||
let gitdir = config::GitDir::from(cwd.join("../..")); // from ./crate/git directory to the project rook
|
||||
let_assert!(Ok(repo) = crate::repository::real().open(&gitdir));
|
||||
let_assert!(Some(remote) = repo.find_default_remote(crate::repository::Direction::Push));
|
||||
assert_eq!(
|
||||
remote,
|
||||
git::GitRemote::new(
|
||||
config::Hostname::new("git.kemitix.net"),
|
||||
config::RepoPath::new("kemitix/git-next".to_string())
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
mod fetch {
|
||||
use assert2::let_assert;
|
||||
use git_next_config::GitDir;
|
||||
|
||||
#[test]
|
||||
#[ignore] // requires authentication to the server - which the CI doesn't have
|
||||
fn should_fetch_from_repo() {
|
||||
// uses the current repo and fetches from the remote server
|
||||
let_assert!(Ok(cwd) = std::env::current_dir());
|
||||
let gitdir = GitDir::from(cwd.join("../.."));
|
||||
let_assert!(Ok(repo) = crate::repository::real().open(&gitdir));
|
||||
let_assert!(Ok(_) = repo.fetch());
|
||||
}
|
||||
}
|
||||
|
||||
mod commit_log {
|
||||
use git::tests::given;
|
||||
|
||||
use crate::tests::then;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_single_item_in_commit_log_when_not_searching() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
let repo_config = &given::a_repo_config();
|
||||
let branches = repo_config.branches();
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.main())?;
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.main())?;
|
||||
let_assert!(Ok(result) = open_repository.commit_log(&branches.main(), &[]));
|
||||
assert_eq!(result.len(), 1);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_capacity_50_in_commit_log_when_searching_for_garbage() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let branch_name = given::a_branch_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
for _ in [0; 60] {
|
||||
// create 60 commits
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branch_name)?;
|
||||
}
|
||||
let_assert!(Ok(result) = open_repository.commit_log(&branch_name, &[given::a_commit()]));
|
||||
assert_eq!(result.len(), 50);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_5_in_commit_log_when_searching_for_5th_item() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp(), "create temp directory");
|
||||
let branch_name = given::a_branch_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(
|
||||
Ok(open_repository) = test_repository.open(&gitdir),
|
||||
"open repository"
|
||||
);
|
||||
for _ in [0; 10] {
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branch_name)?;
|
||||
}
|
||||
// search to garbage to get all 10 items
|
||||
let_assert!(
|
||||
Ok(long_list) = open_repository.commit_log(&branch_name, &[given::a_commit()]),
|
||||
"get commit_log"
|
||||
);
|
||||
// pick the 5th item
|
||||
let search = &long_list[4]; // zero-based
|
||||
// search for the 25th item
|
||||
let_assert!(
|
||||
Ok(result) = open_repository.commit_log(&branch_name, &[search.clone()]),
|
||||
"get commit log"
|
||||
);
|
||||
// returns
|
||||
assert_eq!(result.len(), 5);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
mod read_file {
|
||||
|
||||
use git::tests::given;
|
||||
use git::tests::then;
|
||||
|
||||
type TestResult = Result<(), Box<dyn std::error::Error>>;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_file() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let repo_config = given::a_repo_config();
|
||||
let file_name = given::a_pathbuf();
|
||||
let contents = given::a_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
then::commit_named_file_to_branch(
|
||||
&file_name,
|
||||
&contents,
|
||||
&fs,
|
||||
&gitdir,
|
||||
&repo_config.branches().main(),
|
||||
)?;
|
||||
// then::create_a_commit_on_branch(&fs, &gitdir, &repo_config.branches().main())?;
|
||||
let_assert!(
|
||||
Ok(result) = open_repository.read_file(&repo_config.branches().main(), &file_name),
|
||||
"read file"
|
||||
);
|
||||
assert_eq!(result, contents);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_error_on_missing_file() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
let repo_config = &given::a_repo_config();
|
||||
let branches = repo_config.branches();
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.dev())?;
|
||||
let_assert!(
|
||||
Err(err) = open_repository.read_file(&branches.dev(), &given::a_pathbuf()),
|
||||
"read file"
|
||||
);
|
||||
eprintln!("err: {err:#?}");
|
||||
assert!(matches!(err, git::file::Error::FileNotFound));
|
||||
Ok(())
|
||||
}
|
||||
}
|
66
crates/git/src/repository/open/tests/commit_log.rs
Normal file
66
crates/git/src/repository/open/tests/commit_log.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_single_item_in_commit_log_when_not_searching() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
let repo_config = &given::a_repo_config();
|
||||
let branches = repo_config.branches();
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.main())?;
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.main())?;
|
||||
let_assert!(Ok(result) = open_repository.commit_log(&branches.main(), &[]));
|
||||
assert_eq!(result.len(), 1);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_capacity_50_in_commit_log_when_searching_for_garbage() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let branch_name = given::a_branch_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
for _ in [0; 60] {
|
||||
// create 60 commits
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branch_name)?;
|
||||
}
|
||||
let_assert!(Ok(result) = open_repository.commit_log(&branch_name, &[given::a_commit()]));
|
||||
assert_eq!(result.len(), 50);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_5_in_commit_log_when_searching_for_5th_item() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp(), "create temp directory");
|
||||
let branch_name = given::a_branch_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(
|
||||
Ok(open_repository) = test_repository.open(&gitdir),
|
||||
"open repository"
|
||||
);
|
||||
for _ in [0; 10] {
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branch_name)?;
|
||||
}
|
||||
// search to garbage to get all 10 items
|
||||
let_assert!(
|
||||
Ok(long_list) = open_repository.commit_log(&branch_name, &[given::a_commit()]),
|
||||
"get commit_log"
|
||||
);
|
||||
// pick the 5th item
|
||||
let search = &long_list[4]; // zero-based
|
||||
// search for the 25th item
|
||||
let_assert!(
|
||||
Ok(result) = open_repository.commit_log(&branch_name, &[search.clone()]),
|
||||
"get commit log"
|
||||
);
|
||||
// returns
|
||||
assert_eq!(result.len(), 5);
|
||||
|
||||
Ok(())
|
||||
}
|
11
crates/git/src/repository/open/tests/fetch.rs
Normal file
11
crates/git/src/repository/open/tests/fetch.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
#[ignore] // requires authentication to the server - which the CI doesn't have
|
||||
fn should_fetch_from_repo() {
|
||||
// uses the current repo and fetches from the remote server
|
||||
let_assert!(Ok(cwd) = std::env::current_dir());
|
||||
let gitdir = GitDir::from(cwd.join("../.."));
|
||||
let_assert!(Ok(repo) = crate::repository::real().open(&gitdir));
|
||||
let_assert!(Ok(_) = repo.fetch());
|
||||
}
|
17
crates/git/src/repository/open/tests/find_default_remote.rs
Normal file
17
crates/git/src/repository/open/tests/find_default_remote.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn should_find_default_push_remote() {
|
||||
// uses the current repo
|
||||
let_assert!(Ok(cwd) = std::env::current_dir());
|
||||
let gitdir = config::GitDir::from(cwd.join("../..")); // from ./crate/git directory to the project rook
|
||||
let_assert!(Ok(repo) = crate::repository::real().open(&gitdir));
|
||||
let_assert!(Some(remote) = repo.find_default_remote(crate::repository::Direction::Push));
|
||||
assert_eq!(
|
||||
remote,
|
||||
git::GitRemote::new(
|
||||
config::Hostname::new("git.kemitix.net"),
|
||||
config::RepoPath::new("kemitix/git-next".to_string())
|
||||
)
|
||||
)
|
||||
}
|
102
crates/git/src/repository/open/tests/forge_config.rs
Normal file
102
crates/git/src/repository/open/tests/forge_config.rs
Normal file
|
@ -0,0 +1,102 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn should_return_repos() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
// alphabetical order by key
|
||||
let red_name = format!("a-{}", given::a_name());
|
||||
let blue_name = format!("b-{}", given::a_name());
|
||||
let red =
|
||||
config::ServerRepoConfig::new(red_name.clone(), given::a_name(), None, None, None, None);
|
||||
let blue =
|
||||
config::ServerRepoConfig::new(blue_name.clone(), given::a_name(), None, None, None, None);
|
||||
let mut repos = BTreeMap::new();
|
||||
repos.insert(red_name.clone(), red.clone());
|
||||
repos.insert(blue_name.clone(), blue.clone());
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
let returned_repos = fc.repos().collect::<Vec<_>>();
|
||||
|
||||
assert_eq!(
|
||||
returned_repos,
|
||||
vec![
|
||||
// alphabetical order by key
|
||||
(config::RepoAlias::new(red_name.as_str()), &red),
|
||||
(config::RepoAlias::new(blue_name.as_str()), &blue),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_forge_type() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
assert_eq!(fc.forge_type(), config::ForgeType::MockForge);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_hostname() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname.clone(), user, token, repos);
|
||||
|
||||
assert_eq!(fc.hostname(), config::Hostname::new(hostname));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_user() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user.clone(), token, repos);
|
||||
|
||||
assert_eq!(fc.user(), config::User::new(user));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_token() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let repos = BTreeMap::new();
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token.clone(), repos);
|
||||
|
||||
assert_eq!(fc.token().expose_secret(), token.as_str());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo() {
|
||||
let forge_type = config::ForgeType::MockForge;
|
||||
let hostname = given::a_name();
|
||||
let user = given::a_name();
|
||||
let token = given::a_name();
|
||||
let red_name = given::a_name();
|
||||
let blue_name = given::a_name();
|
||||
let red =
|
||||
config::ServerRepoConfig::new(red_name.clone(), given::a_name(), None, None, None, None);
|
||||
let blue =
|
||||
config::ServerRepoConfig::new(blue_name.clone(), given::a_name(), None, None, None, None);
|
||||
|
||||
let mut repos = BTreeMap::new();
|
||||
repos.insert(red_name.clone(), red.clone());
|
||||
repos.insert(blue_name, blue);
|
||||
let fc = config::ForgeConfig::new(forge_type, hostname, user, token, repos);
|
||||
|
||||
let returned_repo = fc.get_repo(red_name.as_str());
|
||||
|
||||
assert_eq!(returned_repo, Some(&red),);
|
||||
}
|
21
crates/git/src/repository/open/tests/mod.rs
Normal file
21
crates/git/src/repository/open/tests/mod.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
//
|
||||
use crate as git;
|
||||
use assert2::let_assert;
|
||||
use config::GitDir;
|
||||
use git::repository::RepositoryLike as _;
|
||||
use git::tests::given;
|
||||
use git::tests::then;
|
||||
use git_next_config as config;
|
||||
use secrecy::ExposeSecret;
|
||||
use std::collections::BTreeMap;
|
||||
use std::path::PathBuf;
|
||||
|
||||
type TestResult = Result<(), Box<dyn std::error::Error>>;
|
||||
|
||||
mod commit_log;
|
||||
mod fetch;
|
||||
mod find_default_remote;
|
||||
mod forge_config;
|
||||
mod read_file;
|
||||
mod repo_config;
|
||||
mod server_repo_config;
|
47
crates/git/src/repository/open/tests/read_file.rs
Normal file
47
crates/git/src/repository/open/tests/read_file.rs
Normal file
|
@ -0,0 +1,47 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_return_file() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let repo_config = given::a_repo_config();
|
||||
let file_name = given::a_pathbuf();
|
||||
let contents = given::a_name();
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
then::commit_named_file_to_branch(
|
||||
&file_name,
|
||||
&contents,
|
||||
&fs,
|
||||
&gitdir,
|
||||
&repo_config.branches().main(),
|
||||
)?;
|
||||
// then::create_a_commit_on_branch(&fs, &gitdir, &repo_config.branches().main())?;
|
||||
let_assert!(
|
||||
Ok(result) = open_repository.read_file(&repo_config.branches().main(), &file_name),
|
||||
"read file"
|
||||
);
|
||||
assert_eq!(result, contents);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// assumes running in the git-next repo which should have main, next and dev as remote branches
|
||||
fn should_error_on_missing_file() -> TestResult {
|
||||
let_assert!(Ok(fs) = kxio::fs::temp());
|
||||
let gitdir: config::GitDir = fs.base().to_path_buf().into();
|
||||
let test_repository = git::repository::test(fs.clone());
|
||||
let_assert!(Ok(open_repository) = test_repository.open(&gitdir));
|
||||
let repo_config = &given::a_repo_config();
|
||||
let branches = repo_config.branches();
|
||||
then::create_a_commit_on_branch(&fs, &gitdir, &branches.dev())?;
|
||||
let_assert!(
|
||||
Err(err) = open_repository.read_file(&branches.dev(), &given::a_pathbuf()),
|
||||
"read file"
|
||||
);
|
||||
eprintln!("err: {err:#?}");
|
||||
assert!(matches!(err, git::file::Error::FileNotFound));
|
||||
Ok(())
|
||||
}
|
50
crates/git/src/repository/open/tests/repo_config.rs
Normal file
50
crates/git/src/repository/open/tests/repo_config.rs
Normal file
|
@ -0,0 +1,50 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn should_parse_toml() -> TestResult {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let toml = format!(
|
||||
r#"
|
||||
[branches]
|
||||
main = "{main}"
|
||||
next = "{next}"
|
||||
dev = "{dev}"
|
||||
"#
|
||||
);
|
||||
|
||||
let rc = config::RepoConfig::parse(toml.as_str())?;
|
||||
|
||||
assert_eq!(
|
||||
rc,
|
||||
config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Repo // reading from repo is the default
|
||||
)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
#[test]
|
||||
fn should_return_branches() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let branches = config::RepoBranches::new(main, next, dev);
|
||||
let repo_config = config::RepoConfig::new(branches.clone(), config::RepoConfigSource::Repo);
|
||||
|
||||
assert_eq!(repo_config.branches(), &branches);
|
||||
}
|
||||
#[test]
|
||||
fn should_return_source() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let repo_config = config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Repo,
|
||||
);
|
||||
|
||||
assert_eq!(repo_config.source(), config::RepoConfigSource::Repo);
|
||||
}
|
84
crates/git/src/repository/open/tests/server_repo_config.rs
Normal file
84
crates/git/src/repository/open/tests/server_repo_config.rs
Normal file
|
@ -0,0 +1,84 @@
|
|||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn should_not_return_repo_config_when_no_branches() {
|
||||
let main = None;
|
||||
let next = None;
|
||||
let dev = None;
|
||||
let src =
|
||||
config::ServerRepoConfig::new(given::a_name(), given::a_name(), None, main, next, dev);
|
||||
|
||||
let_assert!(None = src.repo_config());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo_config_when_branches() {
|
||||
let main = given::a_name();
|
||||
let next = given::a_name();
|
||||
let dev = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
given::a_name(),
|
||||
None,
|
||||
Some(main.clone()),
|
||||
Some(next.clone()),
|
||||
Some(dev.clone()),
|
||||
);
|
||||
|
||||
let_assert!(Some(rc) = src.repo_config());
|
||||
assert_eq!(
|
||||
rc,
|
||||
config::RepoConfig::new(
|
||||
config::RepoBranches::new(main, next, dev),
|
||||
config::RepoConfigSource::Server
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_repo() {
|
||||
let repo_path = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
repo_path.clone(),
|
||||
given::a_name(),
|
||||
None,
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(src.repo(), config::RepoPath::new(repo_path));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_branch() {
|
||||
let branch = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
branch.clone(),
|
||||
None,
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(src.branch(), config::BranchName::new(branch));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_return_gitdir() {
|
||||
let gitdir = given::a_name();
|
||||
let src = config::ServerRepoConfig::new(
|
||||
given::a_name(),
|
||||
given::a_name(),
|
||||
Some(gitdir.clone().into()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
Some(given::a_name()),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
src.gitdir(),
|
||||
Some(config::GitDir::new(PathBuf::default().join(gitdir)))
|
||||
);
|
||||
}
|
Loading…
Reference in a new issue