git-next-core 0.14.1

core for git-next, the trunk-based development manager
Documentation
use super::*;
use git::{repository::Direction, tests::given, validation::remotes::validate_default_remotes};

#[test]
fn should_ok_a_valid_repo() {
    let fs = given::a_filesystem();
    let repo_details = given::repo_details(&fs);
    let repo_details_mock = repo_details.clone();

    let mut open_repository = git::repository::open::mock();
    open_repository
        .expect_find_default_remote()
        .returning(move |_direction| repo_details_mock.remote_url());

    let result = validate_default_remotes(&*open_repository, &repo_details);
    println!("{result:?}");
    assert!(result.is_ok());
}

#[test]
fn should_fail_where_no_default_push_remote() {
    let fs = given::a_filesystem();
    let repo_details = given::repo_details(&fs);
    let repo_details_mock = repo_details.clone();

    let mut open_repository = git::repository::open::mock();
    open_repository
        .expect_find_default_remote()
        .returning(move |direction| match direction {
            Direction::Push => None,
            Direction::Fetch => repo_details_mock.remote_url(),
        });

    let result = validate_default_remotes(&*open_repository, &repo_details);
    println!("{result:?}");
    assert!(result.is_err());
}

#[test]
fn should_fail_where_no_default_fetch_remote() {
    let fs = given::a_filesystem();
    let repo_details = given::repo_details(&fs);
    let repo_details_mock = repo_details.clone();

    let mut open_repository = git::repository::open::mock();
    open_repository
        .expect_find_default_remote()
        .returning(move |direction| match direction {
            Direction::Push => repo_details_mock.remote_url(),
            Direction::Fetch => None,
        });

    let result = validate_default_remotes(&*open_repository, &repo_details);
    println!("{result:?}");
    assert!(result.is_err());
}

#[test]
fn should_fail_where_invalid_default_push_remote() {
    let fs = given::a_filesystem();
    let repo_details = given::repo_details(&fs);
    let repo_details_mock = repo_details.clone();

    let mut open_repository = git::repository::open::mock();
    open_repository
        .expect_find_default_remote()
        .returning(move |direction| match direction {
            Direction::Push => Some(given::a_remote_url()),
            Direction::Fetch => repo_details_mock.remote_url(),
        });

    let result = validate_default_remotes(&*open_repository, &repo_details);
    println!("{result:?}");
    assert!(result.is_err());
}

#[test]
fn should_fail_where_invalid_default_fetch_remote() {
    let fs = given::a_filesystem();
    let repo_details = given::repo_details(&fs);
    let repo_details_mock = repo_details.clone();

    let mut open_repository = git::repository::open::mock();
    open_repository
        .expect_find_default_remote()
        .returning(move |direction| match direction {
            Direction::Push => repo_details_mock.remote_url(),
            Direction::Fetch => Some(given::a_remote_url()),
        });

    let result = validate_default_remotes(&*open_repository, &repo_details);
    println!("{result:?}");
    assert!(result.is_err());
}