コード例 #1
0
        public void CoverageFiles_NotFullSource_SetsDigestToFileHash()
        {
            var hash  = "d131dd02c5e6eec4d131dd02c5e6eec4d131dd02c5e6eec4";
            var bytes = Enumerable.Range(0, hash.Length)
                        .Where(x => x % 2 == 0)
                        .Select(x => Convert.ToByte(hash.Substring(x, 2), 16))
                        .ToArray();

            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs(TestHelpers.LoadResourceText("Coveralls.Tests.Files.OpenCover.SingleFileCoverage.xml"));
            fileSystem.ComputeHash("").ReturnsForAnyArgs(bytes);

            var opts = Substitute.For <ICommandOptions>();

            opts.InputFiles.Returns(new List <string> {
                "coverage.xml"
            });
            opts.SendFullSources.Returns(false);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            var coveredFileData = coveralls.CoverageFiles.First();

            coveredFileData.SourceDigest.Should().Be(hash);
        }
コード例 #2
0
        public void ServiceJobId_OnLocal_IsZero()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("0");
        }
コード例 #3
0
 public void Constructor_NullOptions_ThrowsArgumentException()
 {
     Assert.Throws <ArgumentException>(() =>
     {
         var coveralls = new CoverallsBootstrap(null);
     });
 }
コード例 #4
0
        public void ServiceJobId_OnLocal_IsZero()
        {
            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("0");
        }
コード例 #5
0
        public void Repository_OnLocal_IsCorrectType()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository.Should().BeOfType <LocalGit>();
        }
コード例 #6
0
        public void Parser_NoOptionsSpecified_UsesOpenCoverParser()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateParser().Should().BeOfType <OpenCoverParser>();
        }
コード例 #7
0
 public void Parser_ParserOpenCoverSpecified_UsesOpenCoverParser()
 {
     var opts = Substitute.For<ICommandOptions>();
     opts.Parser.ReturnsForAnyArgs(ParserType.OpenCover);
     var coveralls = new CoverallsBootstrap(opts);
     coveralls.CreateParser().Should().BeOfType<OpenCoverParser>();
 }
コード例 #8
0
        public void GitRepository_BlankAppVeyorVariable_LocalGit()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateGitRepository().Should().BeOfType <LocalGit>();
        }
コード例 #9
0
        public void RepoToken_EnvVarNotSet_IsNull()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.RepoToken.Should().Be(null);
        }
コード例 #10
0
        public void Parser_NoOptionsSpecified_UsesOpenCoverParser()
        {
            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateParser().Should().BeOfType<OpenCoverParser>();
        }
コード例 #11
0
        public void ServiceName_NoEnvironmentVariable_IsCoverallsNet()
        {
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceName.Should().Be("coveralls.net");
        }
コード例 #12
0
        public void RepoToken_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("COVERALLS_REPO_TOKEN", "1234abcd");
            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.RepoToken.Should().Be("1234abcd");
        }
コード例 #13
0
        public void ServiceName_AppVeyorEnvironment_IsAppveyor()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceName.Should().Be("appveyor");
        }
コード例 #14
0
        public void Parser_ParserCoberturaSpecified_UsesCoberturaParser()
        {
            var opts = Substitute.For <ICommandOptions>();

            opts.Parser.ReturnsForAnyArgs(ParserType.Cobertura);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateParser().Should().BeOfType <CoberturaCoverageParser>();
        }
コード例 #15
0
        public void Parser_ParserAutoDetectSpecified_UsesAutoParser()
        {
            var opts = Substitute.For <ICommandOptions>();

            opts.Parser.ReturnsForAnyArgs(ParserType.AutoDetect);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateParser().Should().BeOfType <AutoParser>();
        }
コード例 #16
0
        public void Parser_ParserOpenCoverSpecified_UsesOpenCoverParser()
        {
            var opts = Substitute.For <ICommandOptions>();

            opts.Parser.ReturnsForAnyArgs(ParserTypes.OpenCover);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateParser().Should().BeOfType <OpenCoverParser>();
        }
コード例 #17
0
        public void ServiceName_AppVeyorEnvironment_IsAppveyor()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceName.Should().Be("appveyor");
        }
コード例 #18
0
        public void Repository_OnAppVeyor_IsCorrectType()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository.Should().BeOfType <AppVeyorGit>();
        }
コード例 #19
0
        public void GitRepository_AppVeyorVariableExists_LocalGit()
        {
            Environment.SetEnvironmentVariable("APPVEYOR_JOB_ID", "12345");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.CreateGitRepository().Should().BeOfType <AppVeyorGit>();
        }
コード例 #20
0
        public void ServiceJobId_OnJenkins_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("JENKINS_HOME", "True");
            Environment.SetEnvironmentVariable("BUILD_NUMBER", "23");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("23");
        }
コード例 #21
0
        public void ServiceJobId_OnAppVeyor_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");
            Environment.SetEnvironmentVariable("APPVEYOR_JOB_ID", "23");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("23");
        }
コード例 #22
0
 public void Parser_ParserTypeUnknown_FailsToInitialize()
 {
     var opts = Substitute.For<ICommandOptions>();
     opts.Parser.ReturnsForAnyArgs(ParserType.Unknown);
     
     Assert.Throws<ArgumentException>(() =>
     {
         var coveralls = new CoverallsBootstrap(opts);
     });
 }
コード例 #23
0
        public void Repository_OnJenkins_IsCorrectType()
        {
            Environment.SetEnvironmentVariable("JENKINS_HOME", "True");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = Stub.LocalFileSystem();

            coveralls.Repository.Should().BeOfType <JenkinsGit>();
        }
コード例 #24
0
        public void Parser_ParserTypeUnknown_FailsToInitialize()
        {
            var opts = Substitute.For <ICommandOptions>();

            opts.Parser.ReturnsForAnyArgs(ParserType.Unknown);

            Assert.Throws <ArgumentException>(() =>
            {
                var coveralls = new CoverallsBootstrap(opts);
            });
        }
コード例 #25
0
        public void CoverageFiles_EmptyReportFile_CoverageFilesIsEmpty()
        {
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs("");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            coveralls.CoverageFiles.Should().BeEmpty();
        }
コード例 #26
0
        public void CoverageFiles_ValidFile_ReturnsCorrectCountOfFiles()
        {
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs(TestHelpers.LoadResourceText("Coveralls.Tests.Files.OpenCover.SingleFileCoverage.xml"));

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            coveralls.CoverageFiles.Count().Should().Be(1);
        }
コード例 #27
0
        public void CoverageFiles_NoReportFile_ThrowsException()
        {
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs(a => null);

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            coveralls.CoverageFiles.Should().BeNull();
        }
コード例 #28
0
        public void Dispose_DisposesOfRepository()
        {
            var gitRepo = Substitute.For <IGitRepository>();

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository = gitRepo;

            coveralls.Dispose();

            gitRepo.Received().Dispose();
        }
コード例 #29
0
        public void CoverageFiles_EmptyReportFile_ThrowsException()
        {
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs("");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            Assert.Throws <Exception>(() =>
            {
                var files = coveralls.CoverageFiles;
            });
        }
コード例 #30
0
        public void GetData_ReturnsCorrectDataBasedOnEnvironment()
        {
            Environment.SetEnvironmentVariable("COVERALLS_REPO_TOKEN", "1234abcd");
            Environment.SetEnvironmentVariable("JENKINS_HOME", "True");
            Environment.SetEnvironmentVariable("BUILD_NUMBER", "23");

            var opts      = Substitute.For <ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = Stub.LocalFileSystem();

            var data = coveralls.GetData();

            data.ServiceName.Should().Be("jenkins");
            data.ServiceJobId.Should().Be("23");
            data.RepoToken.Should().Be("1234abcd");
        }
コード例 #31
0
ファイル: Program.cs プロジェクト: modulexcite/coveralls.net
        internal static void Run(CommandLineOptions options)
        {
            if (options.DebugMode)
            {
                Console.WriteLine(Resources.RepoTokenDebug, Environment.GetEnvironmentVariable("COVERALLS_REPO_TOKEN"));
            }

            using (var coveralls = new CoverallsBootstrap(options))
            {
                coveralls.FileSystem = new LocalFileSystem();

                if (!coveralls.CoverageFiles.Any())
                {
                    Console.WriteLine(Resources.NoCoverageFilesErrorMessage);
                    return;
                }

                if (coveralls.RepoToken.IsBlank())
                {
                    Console.WriteLine(Resources.BlankTokenErrorMessage);

                    if (coveralls.ServiceName == "appveyor")
                    {
                        Console.Write(Resources.AppVeyorBlankToken);
                    }
                    return;
                }

                foreach (var file in coveralls.CoverageFiles)
                {
                    file.Path = file.Path.ToRelativePath(Directory.GetCurrentDirectory());
                }

                var coverallsData = coveralls.GetData();
                var json = JsonConvert.SerializeObject(coverallsData);
                SendToCoveralls(json);

                if (options.DebugMode)
                {
                    Console.WriteLine(Resources.CoverallsJsonHeader, JsonPrettyPrint(json));
                }
            }
        }
コード例 #32
0
ファイル: Program.cs プロジェクト: sitedata/coveralls.net
        internal static void Run(CommandLineOptions options)
        {
            if (options.DebugMode)
            {
                Console.WriteLine(Resources.RepoTokenDebug, Environment.GetEnvironmentVariable("COVERALLS_REPO_TOKEN"));
            }

            using (var coveralls = new CoverallsBootstrap(options))
            {
                coveralls.FileSystem = new LocalFileSystem();

                if (!coveralls.CoverageFiles.Any())
                {
                    Console.WriteLine(Resources.NoCoverageFilesErrorMessage);
                    return;
                }

                if (coveralls.RepoToken.IsBlank())
                {
                    Console.WriteLine(Resources.BlankTokenErrorMessage);

                    if (coveralls.ServiceName == "appveyor")
                    {
                        Console.Write(Resources.AppVeyorBlankToken);
                    }
                    return;
                }

                foreach (var file in coveralls.CoverageFiles)
                {
                    file.Path = file.Path.ToRelativePath(Directory.GetCurrentDirectory());
                }

                var coverallsData = coveralls.GetData();
                var json          = JsonConvert.SerializeObject(coverallsData);
                SendToCoveralls(json);

                if (options.DebugMode)
                {
                    Console.WriteLine(Resources.CoverallsJsonHeader, JsonPrettyPrint(json));
                }
            }
        }
コード例 #33
0
        public void CoverageFiles_NotFullSource_SourceDigestNotNull()
        {
            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("").ReturnsForAnyArgs(TestHelpers.LoadResourceText("Coveralls.Tests.Files.OpenCover.SingleFileCoverage.xml"));

            var opts = Substitute.For <ICommandOptions>();

            opts.InputFiles.Returns(new List <string> {
                "coverage.xml"
            });
            opts.SendFullSources.Returns(false);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            var coveredFileData = coveralls.CoverageFiles.First();

            coveredFileData.SourceDigest.Should().NotBeNull();
        }
コード例 #34
0
        public void CoverageFiles_FullSource_RetrievesFullFileContents()
        {
            var fileContents     = TestHelpers.LoadResourceText("Coveralls.Tests.Files.Utilities.cs");
            var fileContentsUnix = fileContents.Replace("\r\n", "\n");

            var fileSystem = Substitute.For <IFileSystem>();

            fileSystem.ReadFileText("coverage.xml").Returns(TestHelpers.LoadResourceText("Coveralls.Tests.Files.OpenCover.SingleFileCoverage.xml"));
            fileSystem.ReadFileText(@"c:/src/SymSharp/Symitar/Utilities.cs").Returns(fileContents);

            var opts = Substitute.For <ICommandOptions>();

            opts.InputFiles.Returns(new List <string> {
                "coverage.xml"
            });
            opts.SendFullSources.Returns(true);
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.FileSystem = fileSystem;

            var coveredFileData = coveralls.CoverageFiles.First();

            coveredFileData.Source.Should().Be(fileContentsUnix);
        }
コード例 #35
0
        public void ServiceJobId_OnJenkins_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("JENKINS_HOME", "True");
            Environment.SetEnvironmentVariable("BUILD_NUMBER", "23");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("23");
        }
コード例 #36
0
ファイル: Program.cs プロジェクト: appveyor/coveralls.net
        internal static void Main(string[] args)
        {
            Options = Parser.Default.ParseArguments <CommandLineOptions>(args).Value;

            if (Options.DebugMode)
            {
                Console.WriteLine("[debug] > $env.COVERALLS_REPO_TOKEN: {0}",
                                  Environment.GetEnvironmentVariable("COVERALLS_REPO_TOKEN"));
            }

            try
            {
                var coveralls = new CoverallsBootstrap(Options)
                {
                    FileSystem = new LocalFileSystem()
                };

                // Use specified repo token over Environment variable
                if (Options.CoverallsRepoToken.IsNotBlank())
                {
                    coveralls.RepoToken = Options.CoverallsRepoToken;
                }

                if (!coveralls.CoverageFiles.Any())
                {
                    Console.WriteLine("No coverage statistics files.");
                    return;
                }

                if (coveralls.RepoToken.IsBlank())
                {
                    Console.WriteLine("Blank or invalid Coveralls Repo Token.");

                    if (coveralls.ServiceName == "appveyor")
                    {
                        Console.WriteLine(" - Did you prefix your token with 'secure:' without encrypting it?");
                        Console.WriteLine(" - Is this a Pull Request? AppVeyor does not decrypt environment variables for pull requests.");
                    }
                    return;
                }

                var sourceFiles = coveralls.CoverageFiles;
                foreach (var file in sourceFiles)
                {
                    file.Path = file.Path.ToRelativePath(Directory.GetCurrentDirectory());
                }

                var coverallsData = new CoverallsData
                {
                    ServiceName  = coveralls.ServiceName,
                    ServiceJobId = coveralls.ServiceJobId,
                    RepoToken    = coveralls.RepoToken,
                    SourceFiles  = coveralls.CoverageFiles.ToArray(),
                    Git          = coveralls.Repository.Data
                };

                Console.WriteLine("     Service: {0}", coverallsData.ServiceName);
                Console.WriteLine("      Job ID: {0}", coverallsData.ServiceJobId);
                Console.WriteLine("       Files: {0}", coverallsData.SourceFiles.Count());
                Console.WriteLine("      Commit: {0}", coverallsData.Git.Head.Id);
                Console.WriteLine("Pull Request: {0}", coverallsData.Git.Head.Id);

                var json = JsonConvert.SerializeObject(coverallsData);
                SendToCoveralls(json);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                if (e.InnerException != null)
                {
                    Console.Error.WriteLine(e.InnerException.Message);
                }

                Environment.Exit(1);
            }
        }
コード例 #37
0
        public void Repository_OnAppVeyor_IsCorrectType()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository.Should().BeOfType<AppVeyorGit>();
        }
コード例 #38
0
        public void Repository_OnJenkins_IsCorrectType()
        {
            Environment.SetEnvironmentVariable("JENKINS_HOME", "True");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository.Should().BeOfType<JenkinsGit>();
        }
コード例 #39
0
        public void CoverageFiles_EmptyReportFile_CoverageFilesIsEmpty()
        {
            var fileSystem = Substitute.For<IFileSystem>();
            fileSystem.ReadFileText("").ReturnsForAnyArgs("");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);
            coveralls.FileSystem = fileSystem;

            coveralls.CoverageFiles.Should().BeEmpty();
        }
コード例 #40
0
        public void CoverageFiles_ValidFile_ReturnsCorrectCountOfFiles()
        {
            var fileSystem = Substitute.For<IFileSystem>();
            fileSystem.ReadFileText("").ReturnsForAnyArgs(TestHelpers.LoadResourceText("Coveralls.Tests.Files.OpenCover.SingleFileCoverage.xml"));

            var opts = Substitute.For<ICommandOptions>();
            opts.InputFiles.Returns(new List<string> {"coverage.xml"});
            var coveralls = new CoverallsBootstrap(opts);
            coveralls.FileSystem = fileSystem;

            coveralls.CoverageFiles.Count().Should().Be(1);
        }
コード例 #41
0
        public void RepoToken_EnvVarNotSet_IsNull()
        {
            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.RepoToken.Should().Be(null);
        }
コード例 #42
0
        public void RepoToken_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("COVERALLS_REPO_TOKEN", "1234abcd");
            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.RepoToken.Should().Be("1234abcd");
        }
コード例 #43
0
 public void ServiceName_NoEnvironmentVariable_IsCoverallsNet()
 {
     var opts = Substitute.For<ICommandOptions>();
     var coveralls = new CoverallsBootstrap(opts);
     coveralls.ServiceName.Should().Be("coveralls.net");
 }
コード例 #44
0
        public void ServiceJobId_OnAppVeyor_ReadsEnvVariable()
        {
            Environment.SetEnvironmentVariable("APPVEYOR", "True");
            Environment.SetEnvironmentVariable("APPVEYOR_JOB_ID", "23");

            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.ServiceJobId.Should().Be("23");
        }
コード例 #45
0
ファイル: Program.cs プロジェクト: kbilsted/coveralls.net
        static void Main(string[] args)
        {
            Options = Parser.Default.ParseArguments <CommandLineOptions>(args).Value;

            try
            {
                var coveralls = new CoverallsBootstrap(Options)
                {
                    FileSystem = new LocalFileSystem()
                };

                if (!coveralls.CoverageFiles.Any())
                {
                    Console.WriteLine("No coverage statistics files.");
                    return;
                }

                if (Options.DebugMode)
                {
                    Console.WriteLine("[debug] repotoken: '" + coveralls.RepoToken + "'");
                }

                if (coveralls.RepoToken.IsBlank())
                {
                    Console.WriteLine("Blank or invalid Coveralls Repo Token. "
                                      + "Did you prefix your token with 'secure:' without encrypting it?");
                    return;
                }

                var sourceFiles = coveralls.CoverageFiles;
                foreach (var file in sourceFiles)
                {
                    file.Path = file.Path.ToRelativePath(Directory.GetCurrentDirectory());
                }

                var coverallsData = new CoverallsData
                {
                    ServiceName  = coveralls.ServiceName,
                    ServiceJobId = coveralls.ServiceJobId,
                    RepoToken    = coveralls.RepoToken,
                    SourceFiles  = coveralls.CoverageFiles.ToArray(),
                    Git          = coveralls.Repository.Data
                };

                Console.WriteLine("Service: {0}", coverallsData.ServiceName);
                Console.WriteLine(" Job ID: {0}", coverallsData.ServiceJobId);
                Console.WriteLine("  Files: {0}", coverallsData.SourceFiles.Length);
                Console.WriteLine(" Commit: {0}", coverallsData.Git.Head.Id);

                var json = JsonConvert.SerializeObject(coverallsData);
                SendToCoveralls(json);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                if (e.InnerException != null)
                {
                    Console.Error.WriteLine(e.InnerException.Message);
                }

                Environment.Exit(1);
            }
        }
コード例 #46
0
        public void Repository_OnLocal_IsCorrectType()
        {
            var opts = Substitute.For<ICommandOptions>();
            var coveralls = new CoverallsBootstrap(opts);

            coveralls.Repository.Should().BeOfType<LocalGit>();
        }