Skip to content

Commit

Permalink
Merge pull request #9 from marcduiker/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
marcduiker authored Mar 17, 2019
2 parents b0111c4 + 98f61bd commit 79509c0
Show file tree
Hide file tree
Showing 8 changed files with 204 additions and 93 deletions.
18 changes: 18 additions & 0 deletions config/AzFuncUpdatesConfigurations.typed.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
PartitionKey,RowKey,Timestamp,CreatedAt,CreatedAt@type,HashTags,HashTags@type,IsActive,IsActive@type,RepositoryName,RepositoryName@type,RepositoryOwner,RepositoryOwner@type
Repositories,Azure|azure-functions-core-tools,2019-03-08T21:12:46.700Z,2019-02-27T17:40:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-core-tools,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-docker,2019-03-08T21:12:46.700Z,2019-03-04T17:07:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #Docker,Edm.String,true,Edm.Boolean,azure-functions-docker,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-durable-extension,2019-03-08T21:12:46.700Z,2019-02-27T17:44:00.000Z,Edm.DateTime,#Azure #AzureFunctions #DurableFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-durable-extension,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-durable-js,2019-03-08T21:33:47.752Z,2019-03-08T22:33:00.000Z,Edm.DateTime,#Azure #AzureFunctions #DurableFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-durable-js,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-eventgrid-extension,2019-03-08T21:12:46.700Z,2019-02-28T15:45:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-eventgrid-extension,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-host,2019-03-08T21:12:46.700Z,2019-02-13T23:14:40.371Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-host,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-java-library,2019-03-08T21:12:46.700Z,2019-03-04T20:58:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #Java,Edm.String,true,Edm.Boolean,azure-functions-java-library,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-java-worker,2019-03-08T21:12:46.700Z,2019-03-04T20:59:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #Java,Edm.String,true,Edm.Boolean,azure-functions-java-worker,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-nodejs-worker,2019-03-08T21:12:46.700Z,2019-03-03T16:28:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #NodeJS #TypeScript,Edm.String,true,Edm.Boolean,azure-functions-nodejs-worker,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-powershell-worker,2019-03-08T21:33:54.838Z,2019-03-04T19:45:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #PowerShell,Edm.String,true,Edm.Boolean,azure-functions-powershell-worker,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-python-worker,2019-03-08T21:12:46.700Z,2019-03-04T17:06:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #Python,Edm.String,true,Edm.Boolean,azure-functions-python-worker,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-signalrservice-extension,2019-03-08T21:12:46.700Z,2019-02-28T15:51:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-signalrservice-extension,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-templates,2019-03-08T21:12:46.700Z,2019-02-27T17:42:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-templates,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-ux,2019-03-08T21:12:46.700Z,2019-03-04T17:04:00.000Z,Edm.DateTime,#Azure #Portal #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-functions-ux,Edm.String,Azure,Edm.String
Repositories,Azure|azure-functions-vs-build-sdk,2019-03-08T21:12:46.700Z,2019-03-04T16:56:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless #MSBuild,Edm.String,true,Edm.Boolean,azure-functions-vs-build-sdk,Edm.String,Azure,Edm.String
Repositories,Azure|azure-webjobs-sdk,2019-03-08T21:12:46.700Z,2019-02-27T22:58:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-webjobs-sdk,Edm.String,Azure,Edm.String
Repositories,Azure|azure-webjobs-sdk-extensions,2019-03-08T21:12:46.700Z,2019-02-28T15:40:00.000Z,Edm.DateTime,#Azure #AzureFunctions #Serverless,Edm.String,true,Edm.Boolean,azure-webjobs-sdk-extensions,Edm.String,Azure,Edm.String
16 changes: 16 additions & 0 deletions src/AzureFunctionsUpdates.UnitTests/Models/LatestReleasesTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,22 @@ public void GivenHistoryReleaseIsReleaseWithMatchingReleaseId_WhenIIsNewAndShoul
latestReleases.IsNewAndShouldBeStored.Should().BeFalse("because the releaseIds are equal");
}

[Fact]
public void GivenHistoryReleaseIsNullReleaseAndGitHubReleaseIsNullRelease_WhenIIsNewAndShouldBeStoredIsCalled_ThenResultShouldBeFalse()
{
// Arrange
const string repoName = "repo";
var repoConfig = RepositoryConfigurationBuilder.BuildOne(repoName);
var releasesFromGitHub = RepositoryReleaseBuilder.BuildListContainingOneNullRelease(repoName);
var releasesFromHistory = RepositoryReleaseBuilder.BuildListContainingOneNullRelease(repoName);

// Act
var latestReleases = new LatestReleases(repoConfig, releasesFromGitHub, releasesFromHistory);

// Assert
latestReleases.IsNewAndShouldBeStored.Should().BeFalse("because there is no result from GitHub");
}

[Fact]
public void GivenHistoryReleaseIsReleaseWithNonMatchingReleaseId_WhenIsNewAndShouldBeStoredIsCalled_ThenResultShouldBeTrue()
{
Expand Down
62 changes: 62 additions & 0 deletions src/AzureFunctionsUpdates.UnitTests/Models/TogglesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using AzureFunctionsUpdates.Models;
using FluentAssertions;
using System;
using Xunit;

namespace AzureFunctionsUpdates.UnitTests.Models
{
public class TogglesTests
{
[Fact]
public void GivenToggleDoPostUpdateEnvironmentVariableIsSetToNull_WhenRetrievingDoPostUpdate_ThenResultShouldBeFalse()
{
// Arrange
Environment.SetEnvironmentVariable(Toggles.DoPostUpdateVariableName, null);

// Act
var result = Toggles.DoPostUpdate;

// Assert
result.Should().BeFalse($"because the {Toggles.DoPostUpdateVariableName} environment variable variable is not set.");
}

[Fact]
public void GivenToggleDoPostUpdateEnvironmentVariableIsSetToIncorrectValue_WhenRetrievingDoPostUpdate_ThenResultShouldBeFalse()
{
// Arrange
Environment.SetEnvironmentVariable(Toggles.DoPostUpdateVariableName, "notabooleanvalue");

// Act
var result = Toggles.DoPostUpdate;

// Assert
result.Should().BeFalse($"because the {Toggles.DoPostUpdateVariableName} environment variable is not a valid boolean value.");
}

[Fact]
public void GivenToggleDoPostUpdateEnvironmentVariableIsSetToFalse_WhenRetrievingDoPostUpdate_ThenResultShouldBeFalse()
{
// Arrange
Environment.SetEnvironmentVariable(Toggles.DoPostUpdateVariableName, "false");

// Act
var result = Toggles.DoPostUpdate;

// Assert
result.Should().BeFalse($"because the {Toggles.DoPostUpdateVariableName} environment variable is not a valid boolean value.");
}

[Fact]
public void GivenToggleDoPostUpdateEnvironmentVariableIsSetToTrue_WhenRetrievingDoPostUpdate_ThenResultShouldBeTrue()
{
// Arrange
Environment.SetEnvironmentVariable(Toggles.DoPostUpdateVariableName, "true");

// Act
var result = Toggles.DoPostUpdate;

// Assert
result.Should().BeTrue($"because the {Toggles.DoPostUpdateVariableName} environment variable is set to true value.");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,103 +5,72 @@
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Moq;
using System.Threading.Tasks;
using Xunit;

namespace AzureFunctionsUpdates.UnitTests.Orchestrations
{
public class ReleaseUpdateOrchestrationTests
{
[Fact]
public void GivenNoReleasesAreAvailableInHistoryAndNewGithubReleasesAreRetrieved_WhenOrchestrationIsRunForTwoRepos_ThenSaveAndPostShouldBeCalled()
public async Task GivenNoReleasesAreAvailableInHistoryAndNewGithubReleasesAreRetrieved_WhenOrchestrationIsRunForTwoRepos_ThenSaveAndPostShouldBeCalled()
{
// Arrange
var mockContext = OrchestrationContextBuilder.BuildWithoutHistoryAndWithGitHubRelease();
var logger = new Mock<ILogger>();
var releaseUpdateOrchestration = new ReleaseUpdateOrchestration();

// Act
releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);
await releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);

// Assert
mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(SaveLatestRelease),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Exactly(2));

mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(PostUpdate),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Exactly(2));
mockContext.VerifyAll();
}

[Fact]
public void GivenNoReleasesAreAvailableInHistoryAndNewGithubReleaseReturnsNullRelease_WhenOrchestrationIsRunForTwoRepos_ThenSaveAndPostShouldBeCalledForTheReleaseWhichWasReturnedFromGitHub()
public async Task GivenNoReleasesAreAvailableInHistoryAndNewGithubReleaseReturnsNullRelease_WhenOrchestrationIsRunForTwoRepos_ThenSaveAndPostShouldBeCalledForTheReleaseWhichWasReturnedFromGitHub()
{
// Arrange
var mockContext = OrchestrationContextBuilder.BuildWithoutHistoryAndGitHubReturnsNullRelease();
var logger = new Mock<ILogger>();
var releaseUpdateOrchestration = new ReleaseUpdateOrchestration();

// Act
releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);
await releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);

// Assert
mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(SaveLatestRelease),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Exactly(1));

mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(PostUpdate),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Exactly(1));
mockContext.VerifyAll();
}


[Fact]
public void GivenReleasesAreAvailableInHistoryAndNewGithubReleasesAreTheSame_WhenOrchestrationIsRun_ThenSaveAndPostShouldNotBeCalled()
public async Task GivenReleasesAreAvailableInHistoryAndNewGithubReleasesAreTheSame_WhenOrchestrationIsRun_ThenSaveAndPostShouldNotBeCalled()
{
// Arrange
var mockContext = OrchestrationContextBuilder.BuildWithHistoryAndWithGitHubWithEqualReleases();
var logger = new Mock<ILogger>();
var releaseUpdateOrchestration = new ReleaseUpdateOrchestration();

// Act
releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);
await releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);

// Assert
mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(SaveLatestRelease),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Never);

mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(PostUpdate),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Never);
mockContext.VerifyAll();
}

[Fact]
public void GivenReleasesAreAvailableInHistoryAndOneGithubReleaseIsEqualAndOneIsDifferent_WhenOrchestrationIsRun_ThenSaveAndPostShouldBeCalledOnce()
public async Task GivenReleasesAreAvailableInHistoryAndOneGithubReleaseIsEqualAndOneIsDifferent_WhenOrchestrationIsRun_ThenSaveAndPostShouldBeCalledOnce()
{
// Arrange
var mockContext = OrchestrationContextBuilder.BuildWithHistoryAndWithGitHubWithOneEqualAndOneDifferentRelease();
var logger = new Mock<ILogger>();
var releaseUpdateOrchestration = new ReleaseUpdateOrchestration();

// Act
releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);
await releaseUpdateOrchestration.Run(mockContext.Object, logger.Object);

// Assert
mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(SaveLatestRelease),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Once);

mockContext.Verify(c => c.CallActivityWithRetryAsync(
nameof(PostUpdate),
It.IsAny<RetryOptions>(),
It.IsAny<RepositoryRelease>()), Times.Once);
mockContext.VerifyAll();
}
}
}
Loading

0 comments on commit 79509c0

Please sign in to comment.