public void LooksUpCommitWhenGitSourceIsFortyCharacters()
        {
            // Arrange
            string sha            = "5a6940131b31f6958007ecbc0c51cbc35177f4e0";
            var    strykerOptions = new StrykerOptions(gitSource: sha);

            var commitMock           = new Mock <Commit>();
            var repositoryMock       = new Mock <IRepository>();
            var branchCollectionMock = new Mock <BranchCollection>();

            branchCollectionMock
            .Setup(x => x.GetEnumerator()).Returns(
                ((IEnumerable <Branch>) new List <Branch>()).GetEnumerator());

            repositoryMock.SetupGet(x => x.Branches).Returns(branchCollectionMock.Object);
            repositoryMock.Setup(x => x.Lookup(It.IsAny <ObjectId>())).Returns(commitMock.Object);

            var target = new GitInfoProvider(strykerOptions, repositoryMock.Object);

            // Act
            Commit result = target.DetermineCommit();

            // Assert
            result.ShouldNotBeNull();
            repositoryMock.Verify(x => x.Lookup(It.Is <ObjectId>(x => x.Sha == sha)), Times.Once);
        }
        public void ReturnsTip_When_Friendly_Name_Is_GitSource()
        {
            // Arrange
            var options        = new StrykerOptions(gitSource: "master");
            var repositoryMock = new Mock <IRepository>(MockBehavior.Strict);

            var branchCollectionMock = new Mock <BranchCollection>(MockBehavior.Strict);
            var branchMock           = new Mock <Branch>();
            var commitMock           = new Mock <Commit>();

            branchMock
            .SetupGet(x => x.FriendlyName)
            .Returns("master");

            branchMock
            .SetupGet(x => x.CanonicalName)
            .Returns("origin/master");

            branchMock.SetupGet(x => x.Tip).Returns(commitMock.Object);

            branchCollectionMock
            .Setup(x => x.GetEnumerator())
            .Returns(((IEnumerable <Branch>) new List <Branch>
            {
                branchMock.Object
            }).GetEnumerator());

            repositoryMock
            .SetupGet(x => x.Branches)
            .Returns(branchCollectionMock.Object);

            var target = new GitInfoProvider(options, repositoryMock.Object);

            // Act
            var res = target.DetermineCommit();

            // Assert
            res.ShouldNotBeNull();
            res.ShouldBe(commitMock.Object);

            repositoryMock.Verify();
        }
        public void DetermineCommitThrowsStrykerInputException()
        {
            var strykerOptions = new StrykerOptions(gitSource: "master");

            var repository = new Mock <IRepository>();

            var branchCollectionMock = new Mock <BranchCollection>();

            branchCollectionMock
            .Setup(x => x.GetEnumerator()).Returns(
                ((IEnumerable <Branch>) new List <Branch>()).GetEnumerator());


            repository.SetupGet(x => x.Branches).Returns(branchCollectionMock.Object);

            var target = new GitInfoProvider(strykerOptions, repository.Object);


            void act() => target.DetermineCommit();

            Should.Throw <StrykerInputException>(act);
        }