Skip to content
This repository has been archived by the owner on Dec 28, 2017. It is now read-only.

Commit

Permalink
Merge pull request #50 from cake-contrib/feature/GH-49
Browse files Browse the repository at this point in the history
(GH-49) Add possibility to fail on initialization
  • Loading branch information
pascalberger committed Jun 8, 2017
2 parents 1747443 + 4cf6e65 commit 6807007
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 17 deletions.
9 changes: 9 additions & 0 deletions src/Cake.Prca.Tests/FakePullRequestSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,20 @@ public FakePullRequestSystem(ICakeLog log)

public PrcaCommentFormat CommentFormat { get; set; }

public bool ShouldFailOnInitialization { get; set; } = false;

public override PrcaCommentFormat GetPreferredCommentFormat()
{
return this.CommentFormat;
}

public override bool Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings)
{
var result = base.Initialize(settings);

return result && !this.ShouldFailOnInitialization;
}

protected override IEnumerable<IPrcaDiscussionThread> InternalFetchActiveDiscussionThreads(string commentSource)
{
return this.discussionThreads;
Expand Down
14 changes: 14 additions & 0 deletions src/Cake.Prca.Tests/Issues/CodeAnalysisProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,20 @@ public void Should_Set_Settings()
// Then
provider.PrcaSettings.ShouldBe(settings);
}

[Fact]
public void Should_Return_True()
{
// Given
var provider = new FakeCodeAnalysisProvider(new FakeLog());
var settings = new ReportCodeAnalysisIssuesToPullRequestSettings(@"c:\foo");

// When
var result = provider.Initialize(settings);

// Then
result.ShouldBe(true);
}
}

public sealed class TheReadIssuesMethod
Expand Down
54 changes: 54 additions & 0 deletions src/Cake.Prca.Tests/OrchestratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,60 @@ public void Should_Return_Correct_Values()
result.PostedIssues.Count().ShouldBe(1);
result.PostedIssues.ShouldContain(postedIssue);
}

[Fact]
public void Should_Return_Reported_Issues_If_PullRequestSystem_Could_Not_Be_Initialized()
{
// Given
var firstIssue =
new CodeAnalysisIssue(
@"src\Cake.Prca.Tests\FakeCodeAnalysisProvider.cs",
10,
"Foo",
0,
"Foo",
"Foo");
var secondIssue =
new CodeAnalysisIssue(
@"src\Cake.Prca.Tests\FakeCodeAnalysisProvider.cs",
10,
"Foo",
0,
"Foo",
"Foo");
var fixture = new PrcaFixture();
fixture.CodeAnalysisProviders.Clear();
fixture.CodeAnalysisProviders.Add(
new FakeCodeAnalysisProvider(
fixture.Log,
new List<ICodeAnalysisIssue>
{
firstIssue, secondIssue
}));

fixture.PullRequestSystem =
new FakePullRequestSystem(
fixture.Log,
new List<IPrcaDiscussionThread>(),
new List<FilePath>
{
new FilePath(@"src\Cake.Prca.Tests\FakeCodeAnalysisProvider.cs")
})
{
ShouldFailOnInitialization = true
};

fixture.Settings.MaxIssuesToPost = 1;

// When
var result = fixture.RunOrchestrator();

// Then
result.ReportedIssues.Count().ShouldBe(2);
result.ReportedIssues.ShouldContain(firstIssue);
result.ReportedIssues.ShouldContain(secondIssue);
result.PostedIssues.Count().ShouldBe(0);
}
}
}
}
14 changes: 14 additions & 0 deletions src/Cake.Prca.Tests/PullRequests/PullRequestSystemTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,20 @@ public void Should_Set_Settings()
// Then
prSystem.PrcaSettings.ShouldBe(settings);
}

[Fact]
public void Should_Return_True()
{
// Given
var prSystem = new FakePullRequestSystem(new FakeLog());
var settings = new ReportCodeAnalysisIssuesToPullRequestSettings(@"c:\foo");

// When
var result = prSystem.Initialize(settings);

// Then
result.ShouldBe(true);
}
}

public sealed class TheGetPreferredCommentFormatMethod
Expand Down
4 changes: 3 additions & 1 deletion src/Cake.Prca/Issues/CodeAnalysisProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,13 @@ protected CodeAnalysisProvider(ICakeLog log)
protected ReportCodeAnalysisIssuesToPullRequestSettings PrcaSettings { get; private set; }

/// <inheritdoc/>
public virtual void Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings)
public virtual bool Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings)
{
settings.NotNull(nameof(settings));

this.PrcaSettings = settings;

return true;
}

/// <inheritdoc/>
Expand Down
3 changes: 2 additions & 1 deletion src/Cake.Prca/Issues/ICodeAnalysisProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public interface ICodeAnalysisProvider
/// Initializes the code analysis provider.
/// </summary>
/// <param name="settings">General settings</param>
void Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings);
/// <returns><c>true</c> if the initialization was successful, <c>false</c> otherwise.</returns>
bool Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings);

/// <summary>
/// Gets all code analysis issues.
Expand Down
46 changes: 33 additions & 13 deletions src/Cake.Prca/Orchestrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,49 @@ internal class Orchestrator
/// <returns>Information about the reported and written issues.</returns>
public PrcaResult Run()
{
this.log.Verbose("Initialize pull request system...");
this.pullRequestSystem.Initialize(this.settings);
var format = PrcaCommentFormat.Undefined;

var format = this.pullRequestSystem.GetPreferredCommentFormat();
this.log.Verbose("Pull request system prefers comments in {0} format.", format);
// Initialize pull request system.
this.log.Verbose("Initialize pull request system...");
var pullRequestSystemInitialized = this.pullRequestSystem.Initialize(this.settings);
if (pullRequestSystemInitialized)
{
format = this.pullRequestSystem.GetPreferredCommentFormat();
this.log.Verbose("Pull request system prefers comments in {0} format.", format);
}
else
{
this.log.Warning("Error initializing the pull request system.");
}

// Initialize issue providers and read issues.
var issues = new List<ICodeAnalysisIssue>();
foreach (var codeAnalysisProvider in this.codeAnalysisProviders)
{
this.log.Verbose("Initialize code analysis provider {0}...", codeAnalysisProvider.GetType().Name);
codeAnalysisProvider.Initialize(this.settings);
if (codeAnalysisProvider.Initialize(this.settings))
{
this.log.Verbose("Reading issues from {0}...", codeAnalysisProvider.GetType().Name);
var currentIssues = codeAnalysisProvider.ReadIssues(format).ToList();
this.log.Verbose(
"Found {0} issues using issue provider {1}...",
currentIssues.Count,
codeAnalysisProvider.GetType().Name);
issues.AddRange(currentIssues);
}
else
{
this.log.Warning("Error initializing issue provider {0}.", codeAnalysisProvider.GetType().Name);
}
}

this.log.Verbose("Reading issues from {0}...", codeAnalysisProvider.GetType().Name);
var currentIssues = codeAnalysisProvider.ReadIssues(format).ToList();
this.log.Verbose(
"Found {0} issues using issue provider {1}...",
currentIssues.Count,
codeAnalysisProvider.GetType().Name);
issues.AddRange(currentIssues);
// Don't process issues if pull request system could not be initialized.
if (!pullRequestSystemInitialized)
{
return new PrcaResult(issues, new List<ICodeAnalysisIssue>());
}

this.log.Information("Processing {0} new issues", issues.Count);

var postedIssues = this.PostAndResolveComments(issues);

return new PrcaResult(issues, postedIssues);
Expand Down
3 changes: 2 additions & 1 deletion src/Cake.Prca/PullRequests/IPullRequestSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ public interface IPullRequestSystem
/// Initializes the code analysis provider.
/// </summary>
/// <param name="settings">General settings</param>
void Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings);
/// <returns><c>true</c> if the initialization was successful, <c>false</c> otherwise.</returns>
bool Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings);

/// <summary>
/// Returns the preferred format for pull request comments.
Expand Down
4 changes: 3 additions & 1 deletion src/Cake.Prca/PullRequests/PullRequestSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ protected PullRequestSystem(ICakeLog log)
protected ReportCodeAnalysisIssuesToPullRequestSettings PrcaSettings { get; private set; }

/// <inheritdoc/>
public virtual void Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings)
public virtual bool Initialize(ReportCodeAnalysisIssuesToPullRequestSettings settings)
{
settings.NotNull(nameof(settings));

this.PrcaSettings = settings;

return true;
}

/// <inheritdoc/>
Expand Down

0 comments on commit 6807007

Please sign in to comment.