Skip to content

Commit

Permalink
Remove ChangeLogPipelineBuilder
Browse files Browse the repository at this point in the history
Remove ChangeLogPipelineBuilder and directory create ChangeLogPipeline through the DI container (injecting all regsitered implementations of IChangeLogTask)
  • Loading branch information
ap0llo committed Jun 6, 2022
1 parent e1d6719 commit 6dac9e4
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 201 deletions.
35 changes: 8 additions & 27 deletions src/ChangeLog.Test/Integrations/IntegrationsExtensionsTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using Autofac;
using Grynwald.ChangeLog.Configuration;
using Grynwald.ChangeLog.Git;
Expand Down Expand Up @@ -37,32 +38,12 @@ public void RegisterIntegrations_registers_expected_types()
});

// ASSERT
AutofacAssert.CanResolveType<IGitHubClientFactory>(container);
AutofacAssert.CanResolveType<GitHubLinkTask>(container);

AutofacAssert.CanResolveType<IGitLabClientFactory>(container);
AutofacAssert.CanResolveType<GitLabLinkTask>(container);
}

[Fact]
public void AddIntegrationTasks_adds_expected_tasks()
{
// ARRANGE
var configuration = new ChangeLogConfiguration();

using var container = BuildContainer(b => b.RegisterInstance(configuration));

var pipelineBuilderMock = new Mock<IChangeLogPipelineBuilder>(MockBehavior.Strict);
pipelineBuilderMock.Setup(x => x.Container).Returns(container);
pipelineBuilderMock.Setup(x => x.AddTask<GitHubLinkTask>()).Returns(pipelineBuilderMock.Object);
pipelineBuilderMock.Setup(x => x.AddTask<GitLabLinkTask>()).Returns(pipelineBuilderMock.Object);

// ACT
pipelineBuilderMock.Object.AddIntegrationTasks();

// ASSERT
pipelineBuilderMock.Verify(x => x.AddTask<GitHubLinkTask>(), Times.Once);
pipelineBuilderMock.Verify(x => x.AddTask<GitHubLinkTask>(), Times.Once);
var tasks = container.Resolve<IEnumerable<IChangeLogTask>>();
Assert.Collection(
tasks.OrderBy(x => x.GetType().Name),
x => Assert.IsType<GitHubLinkTask>(x),
x => Assert.IsType<GitLabLinkTask>(x)
);
}
}
}
89 changes: 0 additions & 89 deletions src/ChangeLog.Test/Pipeline/ChangeLogPipelineBuilderTest.cs

This file was deleted.

26 changes: 20 additions & 6 deletions src/ChangeLog.Test/Pipeline/ChangeLogPipelineTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void Logger_must_not_be_null()
// ARRANGE

// ACT
var ex = Record.Exception(() => new ChangeLogPipeline(null!, Array.Empty<IChangeLogTask>()));
var ex = Record.Exception(() => new ChangeLogPipeline(logger: null!, tasks: new[] { Mock.Of<IChangeLogTask>() }));

// ASSERT
var argumentNullException = Assert.IsType<ArgumentNullException>(ex);
Expand All @@ -43,15 +43,29 @@ public void Tasks_must_not_be_null()
// ARRANGE

// ACT
var ex = Record.Exception(() => new ChangeLogPipeline(m_Logger, null!));
var ex = Record.Exception(() => new ChangeLogPipeline(logger: m_Logger, tasks: null!));

// ASSERT
var argumentNullException = Assert.IsType<ArgumentNullException>(ex);
Assert.Equal("tasks", argumentNullException.ParamName);
}

[Fact]
public void Tasks_must_not_be_empty()
{
// ARRANGE

// ACT
var ex = Record.Exception(() => new ChangeLogPipeline(logger: m_Logger, tasks: Array.Empty<IChangeLogTask>()));

// ASSERT
var argumentException = Assert.IsType<ArgumentException>(ex);
Assert.Equal("tasks", argumentException.ParamName);
Assert.Contains("Task list must not be empty", ex.Message);
}


[Theory]
[InlineData(0)]
[InlineData(1)]
[InlineData(10)]
public async Task Run_executes_all_tasks_in_the_insertion_order(int numberOfTasks)
Expand All @@ -66,7 +80,7 @@ public async Task Run_executes_all_tasks_in_the_insertion_order(int numberOfTask
})
.ToArray();

var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object));
var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object).ToArray());

// ACT
var result = await sut.RunAsync();
Expand Down Expand Up @@ -102,7 +116,7 @@ public async Task Run_aborts_execution_if_a_task_fails()

tasks[1].Setup(x => x.RunAsync(It.IsAny<ApplicationChangeLog>())).Returns(Task.FromResult(ChangeLogTaskResult.Error));

var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object));
var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object).ToArray());

// ACT
var result = await sut.RunAsync();
Expand Down Expand Up @@ -149,7 +163,7 @@ public async Task Run_continues_execution_if_a_task_is_skipped()

tasks[1].Setup(x => x.RunAsync(It.IsAny<ApplicationChangeLog>())).Returns(Task.FromResult(ChangeLogTaskResult.Skipped));

var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object));
var sut = new ChangeLogPipeline(m_Logger, tasks.Select(x => x.Object).ToArray());

// ACT
var result = await sut.RunAsync();
Expand Down
43 changes: 14 additions & 29 deletions src/ChangeLog/Commands/GenerateCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,19 @@ public async Task<int> RunAsync()

containerBuilder.RegisterType<ChangeLogPipeline>();

containerBuilder.RegisterType<LoadCurrentVersionTask>();
containerBuilder.RegisterType<LoadVersionsFromTagsTask>();
containerBuilder.RegisterType<LoadCommitsTask>();
containerBuilder.RegisterType<LoadMessageOverridesFromGitNotesTask>();
containerBuilder.RegisterType<LoadMessageOverridesFromFileSystemTask>();
containerBuilder.RegisterType<ParseCommitsTask>();
containerBuilder.RegisterType<ParseCommitReferencesTask>();
containerBuilder.RegisterType<FilterVersionsTask>();
containerBuilder.RegisterType<FilterEntriesTask>();
containerBuilder.RegisterType<ResolveEntryReferencesTask>();
containerBuilder.RegisterType<AddCommitFooterTask>();
containerBuilder.RegisterType<ParseWebLinksTask>();
containerBuilder.RegisterType<RenderTemplateTask>();
containerBuilder.RegisterType<LoadCurrentVersionTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<LoadVersionsFromTagsTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<LoadCommitsTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<LoadMessageOverridesFromGitNotesTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<LoadMessageOverridesFromFileSystemTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<ParseCommitsTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<ParseCommitReferencesTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<FilterVersionsTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<FilterEntriesTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<ResolveEntryReferencesTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<AddCommitFooterTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<ParseWebLinksTask>().As<IChangeLogTask>();
containerBuilder.RegisterType<RenderTemplateTask>().As<IChangeLogTask>();

containerBuilder.RegisterIntegrations();

Expand All @@ -129,22 +129,7 @@ public async Task<int> RunAsync()
return 1;
}

var pipeline = new ChangeLogPipelineBuilder(container)
.AddTask<LoadCurrentVersionTask>()
.AddTask<LoadVersionsFromTagsTask>()
.AddTask<LoadCommitsTask>()
.AddTask<LoadMessageOverridesFromGitNotesTask>()
.AddTask<LoadMessageOverridesFromFileSystemTask>()
.AddTask<ParseCommitsTask>()
.AddTask<ParseCommitReferencesTask>()
.AddTask<ParseWebLinksTask>()
.AddTask<FilterVersionsTask>()
.AddTask<FilterEntriesTask>()
.AddTask<ResolveEntryReferencesTask>()
.AddTask<AddCommitFooterTask>()
.AddIntegrationTasks()
.AddTask<RenderTemplateTask>()
.Build();
var pipeline = container.Resolve<ChangeLogPipeline>();

var result = await pipeline.RunAsync();
return result.Success ? 0 : 1;
Expand Down
10 changes: 2 additions & 8 deletions src/ChangeLog/Integrations/IntegrationsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,10 @@ internal static class IntegrationsExtensions
public static void RegisterIntegrations(this ContainerBuilder containerBuilder)
{
containerBuilder.RegisterType<GitHubClientFactory>().As<IGitHubClientFactory>();
containerBuilder.RegisterType<GitHubLinkTask>();
containerBuilder.RegisterType<GitHubLinkTask>().As<IChangeLogTask>();

containerBuilder.RegisterType<GitLabClientFactory>().As<IGitLabClientFactory>();
containerBuilder.RegisterType<GitLabLinkTask>();
containerBuilder.RegisterType<GitLabLinkTask>().As<IChangeLogTask>();
}


public static IChangeLogPipelineBuilder AddIntegrationTasks(this IChangeLogPipelineBuilder pipelineBuilder) =>
pipelineBuilder
.AddTask<GitHubLinkTask>()
.AddTask<GitLabLinkTask>();
}
}
10 changes: 8 additions & 2 deletions src/ChangeLog/Pipeline/ChangeLogPipeline.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ public sealed class ChangeLogPipeline
public IEnumerable<IChangeLogTask> Tasks => m_Tasks;


public ChangeLogPipeline(ILogger<ChangeLogPipeline> logger, IEnumerable<IChangeLogTask> tasks)
public ChangeLogPipeline(ILogger<ChangeLogPipeline> logger, IReadOnlyList<IChangeLogTask> tasks)
{
m_Tasks = (tasks ?? throw new ArgumentNullException(nameof(tasks))).ToList();
if (tasks is null)
throw new ArgumentNullException(nameof(tasks));

if (tasks.Count == 0)
throw new ArgumentException("Task list must not be empty", nameof(tasks));

m_Tasks = tasks;
m_Logger = logger ?? throw new ArgumentNullException(nameof(logger));
}

Expand Down
40 changes: 0 additions & 40 deletions src/ChangeLog/Pipeline/ChangeLogPipelineBuilder.cs

This file was deleted.

0 comments on commit 6dac9e4

Please sign in to comment.