private Core.Pipeline.Pipeline MockPipeline(params GroupDefinition[] groupDefinitions)
        {
            var treeBuilder = TreeBuilderTests.Construct(groupDefinitions);

            var masterBranch      = new MockBranch("master");
            var ciDefinition      = new MockBuildDefinition("1", "ci");
            var stageBranch       = new MockBranch("stage");
            var nightlyDefinition = new MockBuildDefinition("2", "nightly");

            var branches    = new[] { masterBranch, stageBranch };
            var definitions = new[] { ciDefinition, nightlyDefinition };

            var b1 = Substitute.For <IBuild>();

            b1.Id.Returns("1");
            b1.Definition.Returns(nightlyDefinition);
            b1.BranchName.Returns("stage");

            var b2 = Substitute.For <IBuild>();

            b2.Id.Returns("2");
            b2.Definition.Returns(nightlyDefinition);
            b2.BranchName.Returns("master");

            var buildProvider = Substitute.For <IBuildProvider>();

            buildProvider.FetchAllBuilds().Returns(x => b1.AsyncYield());
            buildProvider.FetchBuildsChangedSince(Arg.Any <DateTime>()).Returns(x => b2.AsyncYield());
            buildProvider.FetchExistingBuildDefinitions().Returns(x => ToAsync(definitions));

            var branchProvider = Substitute.For <IBranchProvider>();

            branchProvider.FetchExistingBranches().Returns(x => ToAsync(branches));

            var configuration = Substitute.For <IConfiguration>();

            configuration.BuildsToShow.Returns(int.MaxValue);
            var userIdentityList = Substitute.For <IUserIdentityList>();
            var pipeline         = new Core.Pipeline.Pipeline(treeBuilder, configuration, userIdentityList);

            var project = new Project(buildProvider, branchProvider, Substitute.For <IProjectConfiguration>());

            pipeline.AddProject(project);

            return(pipeline);
        }
Beispiel #2
0
        public async Task UpdateShouldGroupBuildsCorrectly()
        {
            // Arrange
            var treeBuilder = TreeBuilderTests.Construct(GroupDefinition.Source, GroupDefinition.Branch, GroupDefinition.BuildDefinition);

            var masterBranch      = Substitute.For <IBranch>();
            var ciDefinition      = new MockBuildDefinition("1", "ci");
            var stageBranch       = Substitute.For <IBranch>();
            var nightlyDefinition = new MockBuildDefinition("2", "nightly");

            var branches    = new[] { masterBranch, stageBranch };
            var definitions = new[] { ciDefinition, nightlyDefinition };

            var b1 = Substitute.For <IBuild>();

            b1.Id.Returns("1");
            b1.Definition.Returns(nightlyDefinition);
            b1.BranchName.Returns("stage");

            var b2 = Substitute.For <IBuild>();

            b2.Id.Returns("2");
            b2.Definition.Returns(nightlyDefinition);
            b2.BranchName.Returns("stage");

            var buildProvider = Substitute.For <IBuildProvider>();

            buildProvider.FetchAllBuilds().Returns(x => b1.AsyncYield());
            buildProvider.FetchBuildsChangedSince(Arg.Any <DateTime>()).Returns(x => b2.AsyncYield());
            buildProvider.FetchExistingBuildDefinitions().Returns(x => ToAsync(definitions));

            var branchProvider = Substitute.For <IBranchProvider>();

            branchProvider.FetchExistingBranches().Returns(x => ToAsync(branches));

            var configuration = Substitute.For <IConfiguration>();

            configuration.BuildsToShow.Returns(int.MaxValue);
            var pipeline = new Core.Pipeline.Pipeline(treeBuilder, configuration);

            var project = new Project(buildProvider, branchProvider, Substitute.For <IProjectConfiguration>());

            pipeline.AddProject(project);

            IBuildTree?tree = null;

            pipeline.Notifier.Updated += (s, e) => tree = e.Tree;

            // Act
            await pipeline.Update();

            await pipeline.Update();

            // Assert
            Assert.NotNull(tree);

            var parser = new BuildTreeParser(tree !);

            Assert.All(parser.ChildrenAtLevel(0), x => Assert.IsAssignableFrom <IBuildTree>(x));
            Assert.All(parser.ChildrenAtLevel(1), x => Assert.IsAssignableFrom <ISourceGroupNode>(x));
            Assert.All(parser.ChildrenAtLevel(2), x => Assert.IsAssignableFrom <IBranchGroupNode>(x));
            Assert.All(parser.ChildrenAtLevel(3), x => Assert.IsAssignableFrom <IDefinitionGroupNode>(x));
            Assert.All(parser.ChildrenAtLevel(4), x => Assert.IsAssignableFrom <IBuildNode>(x));
            Assert.NotEmpty(parser.ChildrenAtLevel(4));
            Assert.Single(parser.ChildrenAtLevel(0));
            Assert.Single(parser.ChildrenAtLevel(1));
            Assert.Single(parser.ChildrenAtLevel(2));
            Assert.Single(parser.ChildrenAtLevel(3));
            Assert.Equal(2, parser.ChildrenAtLevel(4).Count());
        }