Exemple #1
0
        public void Parse_Positive()
        {
            var actionWorkflow1 = new ActionWorkflow {
                Name = "workflow-1"
            };
            var actionWorkflow2 = new ActionWorkflow {
                Name = "workflow-2"
            };

            var deserializerMock = Mock.Create <IDeserializer>();

            Mock.Arrange(() => deserializerMock.Deserialize <ActionWorkflow>(
                             Arg.Matches <StreamReader>(r => Path.GetFileName((r.BaseStream as FileStream).Name) == _fixture.Files[0])))
            .Returns(actionWorkflow1);
            Mock.Arrange(() => deserializerMock.Deserialize <ActionWorkflow>(
                             Arg.Matches <StreamReader>(r => Path.GetFileName((r.BaseStream as FileStream).Name) == _fixture.Files[1])))
            .Returns(actionWorkflow2);

            var deserializerFactoryMock = Mock.Create <IDeserializerFactory>();

            Mock.Arrange(() => deserializerFactoryMock.Get()).Returns(deserializerMock);

            var parser = new WorkflowParser(deserializerFactoryMock);
            IEnumerable <WorkflowInfo> result = parser.Parse(_fixture.Files);

            Assert.Equal(2, result.Count());
            WorkflowInfo workflowInfo = result.First();

            Assert.Equal(_fixture.Files[0], workflowInfo.File.FilePath);
            Assert.Equal(actionWorkflow1, workflowInfo.Workflow);
            workflowInfo = result.Last();
            Assert.Equal(_fixture.Files[1], workflowInfo.File.FilePath);
            Assert.Equal(actionWorkflow2, workflowInfo.Workflow);
        }
Exemple #2
0
        public void Test_GettersSetters()
        {
            const string file           = "test-file";
            var          actionWorkflow = new ActionWorkflow();
            var          wfi            = new WorkflowInfo(file, actionWorkflow);

            Assert.NotNull(wfi.File);
            Assert.Equal(file, wfi.File.FilePath);
            Assert.Same(actionWorkflow, wfi.Workflow);
        }
Exemple #3
0
        public void Test_GettersSetters()
        {
            const string name = "test-name";
            var          jobs = new Dictionary <string, Job>
            {
                { "some-key", new Job() },
            };
            var actionWorkflow = new ActionWorkflow {
                Name = name, Jobs = jobs
            };

            Assert.Equal(name, actionWorkflow.Name);
            Assert.Equal(jobs, actionWorkflow.Jobs);
        }
Exemple #4
0
        public void Run_ShouldUpgrade(bool shouldUpgrade, bool isOutdatedEmpty)
        {
            const string repository = "test-repository";

            IEnumerable <WorkflowInfo> infos = new List <WorkflowInfo>();
            var workflowServiceMock          = Mock.Create <IWorkflowService>();

            Mock.Arrange(() => workflowServiceMock.GetWorkflows(repository)).Returns(infos);

            IDictionary <WorkflowInfo, IEnumerable <GitHubAction> > outdated;
            var actionPrinterMock = Mock.Create <IActionPrinter>();

            if (isOutdatedEmpty)
            {
                outdated = new Dictionary <WorkflowInfo, IEnumerable <GitHubAction> >();
                Mock.Arrange(() => actionPrinterMock.PrintHeader(Arg.AnyString, Arg.AnyString))
                .OccursNever();
                Mock.Arrange(() => actionPrinterMock.Print(Arg.IsAny <IEnumerable <GitHubAction> >()))
                .OccursNever();
                Mock.Arrange(() => actionPrinterMock.PrintNoUpgradeNeeded()).DoNothing().OccursOnce();
            }
            else
            {
                const string fileName       = ".github/test-file";
                var          actionWorkflow = new ActionWorkflow {
                    Name = "test-action-workflow-name"
                };
                var actions = new List <GitHubAction>();
                outdated = new Dictionary <WorkflowInfo, IEnumerable <GitHubAction> >
                {
                    { new WorkflowInfo($"some-folder/{fileName}", actionWorkflow), actions }
                };
                Mock.Arrange(() => actionPrinterMock.PrintHeader(actionWorkflow.Name, fileName))
                .DoNothing().OccursOnce();
                Mock.Arrange(() => actionPrinterMock.Print(actions))
                .DoNothing().OccursOnce();
                Mock.Arrange(() => actionPrinterMock.PrintNoUpgradeNeeded()).OccursNever();
            }

            var gitHubServiceMock = Mock.Create <IGitHubService>();

            Mock.Arrange(() => gitHubServiceMock.GetOutdated(infos)).Returns(outdated);

            var progressBarMock = Mock.Create <Ghacu.Runner.Cli.Progress.IProgressBar>();

            Mock.Arrange(() => progressBarMock.Report(0.25)).DoNothing().OccursOnce();
            Mock.Arrange(() => progressBarMock.Dispose()).DoNothing().OccursOnce();

            var streamerMock = Mock.Create <IStreamer>();

            Mock.Arrange(() => streamerMock.Push <CliService>(Arg.IsAny <StreamOptions>())).OccursNever();

            IAssertable pushEmptySetup  = Mock.Arrange(() => streamerMock.PushEmpty()).DoNothing();
            IAssertable runUpgradeSetup = Mock.Arrange(() => actionPrinterMock.PrintRunUpgrade()).DoNothing();

            if (isOutdatedEmpty)
            {
                pushEmptySetup.OccursNever();
                runUpgradeSetup.OccursNever();
            }
            else if (!shouldUpgrade)
            {
                pushEmptySetup.OccursOnce();
                runUpgradeSetup.OccursOnce();
            }

            var service = new CliService(
                workflowServiceMock, gitHubServiceMock, actionPrinterMock, null, streamerMock);

            service.Run(repository, shouldUpgrade);

            Mock.Assert(workflowServiceMock);
            Mock.Assert(gitHubServiceMock);
            Mock.Assert(actionPrinterMock);
            Mock.Assert(streamerMock);
        }
Exemple #5
0
        public void Upgrade_FileValid(string[] current, string[] latest, string[] result)
        {
            var actionWorkflow = new ActionWorkflow
            {
                Jobs = new Dictionary <string, Job>
                {
                    {
                        "github", new Job
                        {
                            Steps = current.Select((v, i) =>
                            {
                                var step = new Step {
                                    Uses = $"own{i}/repo{i}@{v}"
                                };
                                step.Action.LatestVersion = latest[i];
                                return(step);
                            })
                        }
                    },
                    {
                        "docker", new Job
                        {
                            Steps = current.Select((v, i) =>
                            {
                                var step = new Step {
                                    Uses = $"docker://d{i}.com:{v}"
                                };
                                step.Action.LatestVersion = latest[i];
                                return(step);
                            })
                        }
                    }
                }
            };
            var original = @"
name: Test
jobs:
  github:
    steps:
";

            original += string.Join("\n", current.Select(
                                        (v, i) => $"      uses: own{i}/repo{i}@{v}"));
            original += @"
  docker:
    steps:
";
            original += string.Join("\n", current.Select(
                                        (v, i) => $"      uses: docker://d{i}.com:{v}"));
            var expected = @"
name: Test
jobs:
  github:
    steps:
";

            expected += string.Join("\n", result.Select(
                                        (v, i) => $"      uses: own{i}/repo{i}@{v}"));
            expected += @"
  docker:
    steps:
";
            expected += string.Join("\n", result.Select(
                                        (v, i) => $"      uses: docker://d{i}.com:{v}"));
            const string file = "./test.yml";

            File.WriteAllText(file, original);
            try
            {
                var wfi = new WorkflowInfo(file, actionWorkflow);
                wfi.Upgrade();
                Assert.Equal(expected, File.ReadAllText(file));
            }
            finally
            {
                File.Delete(file);
            }
        }