Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/ChangeLog.Test/CommandLine/CommandLineParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using Grynwald.ChangeLog.CommandLine;
using Grynwald.ChangeLog.Configuration;
using Grynwald.ChangeLog.Templates;
using Xunit;

namespace Grynwald.ChangeLog.Test.CommandLine
Expand Down Expand Up @@ -30,9 +31,9 @@ public void Template_parameter_is_optional()
public static IEnumerable<object[]> TemplateNames()
{
#if NETCOREAPP3_1
foreach (var value in Enum.GetValues(typeof(ChangeLogConfiguration.TemplateName)).Cast<ChangeLogConfiguration.TemplateName>())
foreach (var value in Enum.GetValues(typeof(TemplateName)).Cast<TemplateName>())
#else
foreach (var value in Enum.GetValues<ChangeLogConfiguration.TemplateName>())
foreach (var value in Enum.GetValues<TemplateName>())
#endif
{
yield return new object[] { value.ToString(), value };
Expand All @@ -43,7 +44,7 @@ public static IEnumerable<object[]> TemplateNames()

[Theory]
[MemberData(nameof(TemplateNames))]
public void Template_parameter_is_parsed_correctly(string template, ChangeLogConfiguration.TemplateName expected)
public void Template_parameter_is_parsed_correctly(string template, TemplateName expected)
{
// ARRANGE
var args = new[] { "--repository", "some-path", "--template", template };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Linq.Expressions;
using Grynwald.ChangeLog.Configuration;
using Grynwald.ChangeLog.ConventionalCommits;
using Grynwald.ChangeLog.Templates;
using Grynwald.Utilities.Configuration;
using Grynwald.Utilities.IO;
using Newtonsoft.Json;
Expand Down Expand Up @@ -224,7 +225,7 @@ static object[] TestCase(Expression<Action<ChangeLogConfiguration>> assertion)
// Template settings
//
yield return TestCase(config => Assert.NotNull(config.Template));
yield return TestCase(config => Assert.Equal(ChangeLogConfiguration.TemplateName.Default, config.Template.Name));
yield return TestCase(config => Assert.Equal(TemplateName.Default, config.Template.Name));

//
// Default Template settings
Expand Down Expand Up @@ -491,7 +492,7 @@ private static IEnumerable<T> GetEnumValues<T>() where T : Enum
//
// Template setting
//
foreach (var value in GetEnumValues<ChangeLogConfiguration.TemplateName>())
foreach (var value in GetEnumValues<TemplateName>())
{
yield return TestCase("template:name", config => config.Template.Name, value);
}
Expand Down
11 changes: 6 additions & 5 deletions src/ChangeLog.Test/Configuration/ConfigurationValidatorTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Grynwald.ChangeLog.Configuration;
using Grynwald.ChangeLog.Templates;
using Grynwald.Utilities.IO;
using Xunit;

Expand Down Expand Up @@ -792,7 +793,7 @@ public void Name_must_be_defined_value()
{
// ARRANGE
var config = ChangeLogConfigurationLoader.GetDefaultConfiguration();
config.Template.Name = (ChangeLogConfiguration.TemplateName)(-1);
config.Template.Name = (TemplateName)(-1);

var sut = new ConfigurationValidator();

Expand All @@ -809,7 +810,7 @@ public void Name_must_be_defined_value()
[Theory]
[CombinatorialData]
public void Custom_directory_can_be_null_or_empty(
ChangeLogConfiguration.TemplateName template,
TemplateName template,
[CombinatorialValues(null, "")] string customDirectory)
{
// ARRANGE
Expand All @@ -832,7 +833,7 @@ public void Custom_directory_can_be_null_or_empty(
[Theory]
[CombinatorialData]
public void Custom_directory_must_not_be_whitespace(
ChangeLogConfiguration.TemplateName template,
TemplateName template,
[CombinatorialValues("\t", " ")] string customDirectory)
{
// ARRANGE
Expand All @@ -857,7 +858,7 @@ public void Custom_directory_must_not_be_whitespace(

[Theory]
[CombinatorialData]
public void Custom_directory_must_exist_when_it_is_not_null_or_empty(ChangeLogConfiguration.TemplateName template)
public void Custom_directory_must_exist_when_it_is_not_null_or_empty(TemplateName template)
{
// ARRANGE
var config = ChangeLogConfigurationLoader.GetDefaultConfiguration();
Expand All @@ -884,7 +885,7 @@ public void Custom_directory_must_exist_when_it_is_not_null_or_empty(ChangeLogCo

[Theory]
[CombinatorialData]
public void Custom_directory_is_valid_when_directory_exists(ChangeLogConfiguration.TemplateName template)
public void Custom_directory_is_valid_when_directory_exists(TemplateName template)
{
// ARRANGE
using var temporaryDirectory = new TemporaryDirectory();
Expand Down
116 changes: 99 additions & 17 deletions src/ChangeLog.Test/Integrations/GitHub/GitHubLinkTaskTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,16 +80,14 @@ public void Serialize(IXunitSerializationInfo info)
}

private readonly ILogger<GitHubLinkTask> m_Logger;
private readonly ChangeLogConfiguration m_DefaultConfiguration;

private readonly GitHubClientMock m_GithubClientMock;
private readonly Mock<IGitHubClientFactory> m_GitHubClientFactoryMock;

public GitHubLinkTaskTest(ITestOutputHelper testOutputHelper)
{
m_Logger = new XunitLogger<GitHubLinkTask>(testOutputHelper);

m_DefaultConfiguration = ChangeLogConfigurationLoader.GetDefaultConfiguration();

m_GithubClientMock = new();

m_GitHubClientFactoryMock = new(MockBehavior.Strict);
Expand All @@ -105,7 +103,7 @@ public void Logger_must_not_be_null()
// ARRANGE

// ACT
var ex = Record.Exception(() => new GitHubLinkTask(null!, m_DefaultConfiguration, Mock.Of<IGitRepository>(MockBehavior.Strict), Mock.Of<IGitHubClientFactory>(MockBehavior.Strict)));
var ex = Record.Exception(() => new GitHubLinkTask(null!, new ChangeLogConfiguration(), Mock.Of<IGitRepository>(MockBehavior.Strict), Mock.Of<IGitHubClientFactory>(MockBehavior.Strict)));

// ASSERT
var argumentNullException = Assert.IsType<ArgumentNullException>(ex);
Expand All @@ -131,7 +129,7 @@ public void GitRepository_must_not_be_null()
// ARRANGE

// ACT
var ex = Record.Exception(() => new GitHubLinkTask(m_Logger, m_DefaultConfiguration, null!, Mock.Of<IGitHubClientFactory>(MockBehavior.Strict)));
var ex = Record.Exception(() => new GitHubLinkTask(m_Logger, new ChangeLogConfiguration(), null!, Mock.Of<IGitHubClientFactory>(MockBehavior.Strict)));

// ASSERT
var argumentNullException = Assert.IsType<ArgumentNullException>(ex);
Expand All @@ -144,7 +142,7 @@ public void GitHubClientFactoty_must_not_be_null()
// ARRANGE

// ACT
var ex = Record.Exception(() => new GitHubLinkTask(m_Logger, m_DefaultConfiguration, Mock.Of<IGitRepository>(MockBehavior.Strict), null!));
var ex = Record.Exception(() => new GitHubLinkTask(m_Logger, new ChangeLogConfiguration(), Mock.Of<IGitRepository>(MockBehavior.Strict), null!));

// ASSERT
var argumentNullException = Assert.IsType<ArgumentNullException>(ex);
Expand All @@ -155,10 +153,14 @@ public void GitHubClientFactoty_must_not_be_null()
public async Task Run_does_nothing_if_repository_does_not_have_remotes()
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}
var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupEmptyRemotes();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var changeLog = new ApplicationChangeLog();

// ACT
Expand All @@ -169,6 +171,39 @@ public async Task Run_does_nothing_if_repository_does_not_have_remotes()
m_GitHubClientFactoryMock.Verify(x => x.CreateClient(It.IsAny<string>()), Times.Never);
}

[Theory]
[InlineData(ChangeLogConfiguration.IntegrationProvider.None)]
[InlineData(ChangeLogConfiguration.IntegrationProvider.GitLab)]
public async Task Task_is_skipped_if_GitHub_integration_is_disabled(ChangeLogConfiguration.IntegrationProvider integrationProvider)
{
// ARRANGE
var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = integrationProvider;
}

var changeLog = new ApplicationChangeLog()
{
GetSingleVersionChangeLog(
version: "1.2.3",
entries: new []
{
GetChangeLogEntry()
})
};

var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

// ACT
var result = await sut.RunAsync(changeLog);

// ASSERT
Assert.Equal(ChangeLogTaskResult.Skipped, result);
repoMock.Verify(x => x.Remotes, Times.Never);
m_GitHubClientFactoryMock.Verify(x => x.CreateClient(It.IsAny<string>()), Times.Never);
}

[Theory]
[InlineData("origin", "not-a-url")]
[InlineData("origin", "http://not-a-github-url.com")]
Expand All @@ -178,7 +213,10 @@ public async Task Run_does_nothing_if_remote_url_cannot_be_parsed(string remoteN
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
configuration.Integrations.GitHub.RemoteName = remoteName;
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
configuration.Integrations.GitHub.RemoteName = remoteName;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes(remoteName, url);
Expand Down Expand Up @@ -411,7 +449,10 @@ public async Task Run_uses_the_expected_remote_url(GitHubProjectInfoTestCase tes

// Configure remote name to use
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
configuration.Integrations.GitHub = testCase.Configuration;
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
configuration.Integrations.GitHub = testCase.Configuration;
}

// Prepare changelog
var changeLog = new ApplicationChangeLog()
Expand Down Expand Up @@ -458,6 +499,12 @@ public async Task Run_uses_the_expected_remote_url(GitHubProjectInfoTestCase tes
public async Task Run_adds_issue_links_to_footers(string footerText, int issueNumber, string owner, string repo)
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}


var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

Expand All @@ -469,7 +516,7 @@ public async Task Run_adds_issue_links_to_footers(string footerText, int issueNu
.Setup(x => x.Get(owner, repo, issueNumber))
.ReturnsTestIssue();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -515,6 +562,11 @@ public async Task Run_adds_issue_links_to_footers(string footerText, int issueNu
public async Task Run_adds_pull_request_links_to_footers(string footerText, int prNumber, string owner, string repo)
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

Expand All @@ -531,7 +583,7 @@ public async Task Run_adds_pull_request_links_to_footers(string footerText, int
.ReturnsTestPullRequest();


var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -578,14 +630,19 @@ public async Task Run_adds_pull_request_links_to_footers(string footerText, int
public async Task Run_ignores_footers_which_cannot_be_parsed(string footerText)
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

m_GithubClientMock.Repository.Commit
.SetupGet()
.ReturnsTestCommit();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -626,6 +683,11 @@ public async Task Run_ignores_footers_which_cannot_be_parsed(string footerText)
public async Task Run_does_not_add_a_links_to_footers_if_no_issue_or_pull_request_cannot_be_found(string footerText, string owner, string repo)
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

Expand All @@ -641,7 +703,7 @@ public async Task Run_does_not_add_a_links_to_footers_if_no_issue_or_pull_reques
.SetupGet()
.ThrowsNotFound();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -681,10 +743,15 @@ public async Task Run_does_not_add_a_links_to_footers_if_no_issue_or_pull_reques
public async Task Run_creates_client_through_client_factory(string hostName)
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", $"http://{hostName}/owner/repo.git");

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

// ACT
var result = await sut.RunAsync(new ApplicationChangeLog());
Expand All @@ -700,14 +767,19 @@ public async Task Run_creates_client_through_client_factory(string hostName)
public async Task Task_fails_if_GitHub_client_throws_an_ApiException()
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", $"http://github.com/owner/repo.git");

m_GithubClientMock.Repository.Commit
.SetupGet()
.ThrowsAsync(new ApiException());

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -736,14 +808,19 @@ public async Task Task_fails_if_GitHub_client_throws_an_ApiException()
public async Task Run_adds_web_links_to_commit_references()
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

m_GithubClientMock.Repository.Commit
.Setup(x => x.Get("owner", "repo", It.IsAny<string>()))
.ReturnsTestCommit();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down Expand Up @@ -783,14 +860,19 @@ public async Task Run_adds_web_links_to_commit_references()
public async Task Run_ignores_commit_references_that_cannot_be_found()
{
// ARRANGE
var configuration = ChangeLogConfigurationLoader.GetDefaultConfiguration();
{
configuration.Integrations.Provider = ChangeLogConfiguration.IntegrationProvider.GitHub;
}

var repoMock = new Mock<IGitRepository>(MockBehavior.Strict);
repoMock.SetupRemotes("origin", "http://github.com/owner/repo.git");

m_GithubClientMock.Repository.Commit
.Setup(x => x.Get("owner", "repo", It.IsAny<string>()))
.ThrowsNotFound();

var sut = new GitHubLinkTask(m_Logger, m_DefaultConfiguration, repoMock.Object, m_GitHubClientFactoryMock.Object);
var sut = new GitHubLinkTask(m_Logger, configuration, repoMock.Object, m_GitHubClientFactoryMock.Object);

var changeLog = new ApplicationChangeLog()
{
Expand Down
Loading