public GitRepositoryFactory(
     IFileUtilities fileUtils,
     IRepositoryStaticWrapper staticWrapper,
     Func <string, IGitRepository> repoFactory)
 {
     _fileUtils     = fileUtils;
     _staticWrapper = staticWrapper;
     _repoFactory   = repoFactory;
 }
    public void No_delete_and_clone_when_repo_is_valid(
        [Frozen] IRepositoryStaticWrapper wrapper,
        [Frozen] IFileUtilities fileUtils,
        GitRepositoryFactory sut)
    {
        wrapper.IsValid(Arg.Any <string>()).Returns(true);

        sut.CreateAndCloneIfNeeded("repo_url", "repo_path", "branch");

        wrapper.Received().IsValid("repo_path");
        fileUtils.DidNotReceiveWithAnyArgs().DeleteReadOnlyDirectory(default !);
    public void Delete_and_clone_when_repo_is_not_valid(
        [Frozen] IRepositoryStaticWrapper wrapper,
        [Frozen] IFileUtilities fileUtils,
        GitRepositoryFactory sut)
    {
        wrapper.IsValid(Arg.Any <string>()).Returns(false);

        sut.CreateAndCloneIfNeeded("repo_url", "repo_path", "branch");

        Received.InOrder(() =>
        {
            wrapper.IsValid("repo_path");
            fileUtils.DeleteReadOnlyDirectory("repo_path");
            wrapper.Clone("repo_url", "repo_path",
                          Verify.That <CloneOptions>(x => x.BranchName.Should().Be("branch")));
        });
    }