public async Task Run( [OrchestrationTrigger] IDurableOrchestrationContext context, ILogger logger) { var repositoryConfigurations = await context.CallActivityWithRetryAsync <IReadOnlyList <RepositoryConfiguration> >( functionName : nameof(GetRepositoryConfigurationsActivity), retryOptions : RetryOptionsBuilder.BuildDefault(), input : null); if (repositoryConfigurations.Any()) { var releasesTasks = GetRepositoryReleasesTasks(context, repositoryConfigurations); var githubReleases = await Task.WhenAll(releasesTasks.GithubReleases); var historyReleases = await Task.WhenAll(releasesTasks.HistoryReleases); var releaseMatchFunction = ReleaseFunctionBuilder.BuildForMatchingRepositoryName(); foreach (var repositoryConfiguration in repositoryConfigurations) { var latestReleases = LatestObjectsBuilder.Build <RepositoryConfiguration, RepositoryRelease, LatestReleases>( repositoryConfiguration, githubReleases, historyReleases, releaseMatchFunction); context.SetCustomStatus(repositoryConfiguration.RepositoryName); latestReleases.IsSaved = await SaveLatestRelease(context, logger, latestReleases); await PostLatestRelease(context, logger, latestReleases); } } }
public void GivenHistoryReleaseIsNullReleaseAndGitHubReleaseIsNullRelease_WhenIsNewAndShouldBeStoredIsCalled_ThenResultShouldBeFalse() { // Arrange const string repoName = "repo"; var repoConfig = RepositoryConfigurationBuilder.BuildOne(repoName); var releasesFromGitHub = RepositoryReleaseBuilder.BuildListContainingOneNullRelease <GitHubRepositoryRelease>(repoName); var releasesFromHistory = RepositoryReleaseBuilder.BuildListContainingOneNullRelease <HistoryRepositoryRelease>(repoName); var releaseMatchFunction = ReleaseFunctionBuilder.BuildForMatchingRepositoryName(); // Act var latestReleases = LatestObjectsBuilder.Build <RepositoryConfiguration, RepositoryRelease, LatestReleases>( repoConfig, releasesFromGitHub, releasesFromHistory, releaseMatchFunction); // Assert latestReleases.IsNewAndShouldBeStored.Should().BeFalse("because there is no result from GitHub"); }
public void GivenHistoryReleaseIsReleaseWithNonMatchingReleaseId_WhenIsNewAndShouldBeStoredIsCalled_ThenResultShouldBeTrue() { // Arrange const string repoName = "repo"; const int releaseIdHistory = 1; const int releaseIdGithub = 2; var repoConfig = RepositoryConfigurationBuilder.BuildOne(repoName); var releasesFromGitHub = RepositoryReleaseBuilder.BuildListContainingOneWithReleaseId <GitHubRepositoryRelease>(repoName, releaseIdGithub); var releasesFromHistory = RepositoryReleaseBuilder.BuildListContainingOneWithReleaseId <HistoryRepositoryRelease>(repoName, releaseIdHistory); var releaseMatchFunction = ReleaseFunctionBuilder.BuildForMatchingRepositoryName(); // Act var latestReleases = LatestObjectsBuilder.Build <RepositoryConfiguration, RepositoryRelease, LatestReleases>( repoConfig, releasesFromGitHub, releasesFromHistory, releaseMatchFunction); // Assert latestReleases.IsNewAndShouldBeStored.Should().BeTrue("because the releaseIds are not equal"); }
public void GivenHistoryReleaseIsNullReleaseAndGitHubReleaseIsWithinTimeWindow_WhenIsNewAndShouldBePostedIsCalled_ThenResultShouldBeTrue() { // Arrange const string repoName = "repo"; const int releaseIdGithub = 1; var daysTimespan = new TimeSpan(1, 0, 0, 0); var gitHubReleaseDate = DateTimeOffset.UtcNow.Subtract(daysTimespan); var repoConfig = RepositoryConfigurationBuilder.BuildOne(repoName); var releasesFromGitHub = RepositoryReleaseBuilder.BuildListContainingOneWithReleaseIdAndDate <GitHubRepositoryRelease>(repoName, releaseIdGithub, gitHubReleaseDate); var releasesFromHistory = RepositoryReleaseBuilder.BuildListContainingOneNullRelease <HistoryRepositoryRelease>(repoName); var releaseMatchFunction = ReleaseFunctionBuilder.BuildForMatchingRepositoryName(); // Act var latestReleases = LatestObjectsBuilder.Build <RepositoryConfiguration, RepositoryRelease, LatestReleases>( repoConfig, releasesFromGitHub, releasesFromHistory, releaseMatchFunction); // Assert latestReleases.IsNewAndShouldBeStored.Should().BeTrue("because the release is not in history yet."); latestReleases.IsNewAndShouldBePosted.Should().BeTrue($"because the release date is within the time window of {LatestReleases.MaximumNumberOfDaysToPostAboutNewlyFoundRelease} days"); }