Exemple #1
0
        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");
        }