public async Task ExecutesVariationStrategiesSpecifiedInSuppliedFundingVariationsAndReturnsVariationResult(
            FundingVariation[] fundingVariations)
        {
            IEnumerable <ProfileVariationPointer> variationPointers = ArraySegment <ProfileVariationPointer> .Empty;
            PublishedProvider existingPublishedProvider             = NewPublishedProvider();
            Provider          updatedProvider     = NewApiProvider();
            decimal           updatedTotalFunding = new RandomNumberBetween(0, 1000);
            IDictionary <string, PublishedProviderSnapShots> allPublishedProviderSnapShots     = new Dictionary <string, PublishedProviderSnapShots>();
            IDictionary <string, PublishedProvider>          allPublishedProviderRefreshStates = new Dictionary <string, PublishedProvider>();
            string providerVersionId = NewRandomString();

            ProviderVariationContext providerVariationContext = await _factory.CreateRequiredVariationChanges(existingPublishedProvider,
                                                                                                              updatedTotalFunding,
                                                                                                              updatedProvider,
                                                                                                              fundingVariations,
                                                                                                              allPublishedProviderSnapShots,
                                                                                                              allPublishedProviderRefreshStates,
                                                                                                              variationPointers,
                                                                                                              providerVersionId);

            providerVariationContext
            .UpdatedTotalFunding
            .Should()
            .Be(updatedTotalFunding);

            providerVariationContext
            .ReleasedState
            .Should()
            .BeSameAs(existingPublishedProvider.Released);

            providerVariationContext
            .UpdatedProvider
            .Should()
            .BeSameAs(updatedProvider);

            providerVariationContext
            .ProviderVersionId
            .Should()
            .BeSameAs(providerVersionId);

            Received.InOrder(() =>
            {
                foreach (FundingVariation fundingVariation in fundingVariations.OrderBy(_ => _.Order))
                {
                    _variationStrategyServiceLocator.GetService(fundingVariation.Name);
                    _variationStrategy.DetermineVariations(Arg.Is <ProviderVariationContext>(
                                                               ctx => ctx.UpdatedTotalFunding == updatedTotalFunding &&
                                                               ReferenceEquals(ctx.ReleasedState, existingPublishedProvider.Released) &&
                                                               ctx.ProviderId == existingPublishedProvider.Current.ProviderId &&
                                                               ReferenceEquals(ctx.UpdatedProvider, updatedProvider) &&
                                                               ReferenceEquals(ctx.AllPublishedProviderSnapShots, allPublishedProviderSnapShots) &&
                                                               ReferenceEquals(ctx.AllPublishedProvidersRefreshStates, allPublishedProviderRefreshStates) &&
                                                               ctx.ProviderVersionId == providerVersionId),
                                                           fundingVariation.FundingLineCodes);
                }
            });
        }
        public void SetUp()
        {
            _variationStrategyServiceLocator = Substitute.For <IVariationStrategyServiceLocator>();
            _variationStrategy = Substitute.For <IVariationStrategy>();

            _factory = new ProviderVariationsDetection(_variationStrategyServiceLocator);

            _variationStrategyServiceLocator
            .GetService(Arg.Any <string>())
            .Returns(_variationStrategy);
        }
示例#3
0
        public async Task <ProviderVariationContext> CreateRequiredVariationChanges(PublishedProvider existingPublishedProvider,
                                                                                    decimal?updatedTotalFunding,
                                                                                    Provider provider,
                                                                                    IEnumerable <FundingVariation> variations,
                                                                                    IDictionary <string, PublishedProviderSnapShots> allPublishedProviderSnapShots,
                                                                                    IDictionary <string, PublishedProvider> allPublishedProviderRefreshStates,
                                                                                    IEnumerable <ProfileVariationPointer> variationPointers,
                                                                                    string providerVersionId)
        {
            Guard.ArgumentNotNull(existingPublishedProvider, nameof(existingPublishedProvider));
            Guard.ArgumentNotNull(updatedTotalFunding, nameof(updatedTotalFunding));
            Guard.ArgumentNotNull(provider, nameof(provider));
            Guard.ArgumentNotNull(variations, nameof(variations));
            Guard.ArgumentNotNull(allPublishedProviderRefreshStates, nameof(allPublishedProviderRefreshStates));
            Guard.ArgumentNotNull(allPublishedProviderSnapShots, nameof(allPublishedProviderSnapShots));

            ProviderVariationContext providerVariationContext = new ProviderVariationContext
            {
                PublishedProvider                  = existingPublishedProvider,
                UpdatedProvider                    = provider,
                UpdatedTotalFunding                = updatedTotalFunding,
                AllPublishedProviderSnapShots      = allPublishedProviderSnapShots,
                AllPublishedProvidersRefreshStates = allPublishedProviderRefreshStates,
                ProviderVersionId                  = providerVersionId,
                VariationPointers                  = variationPointers
            };

            foreach (FundingVariation configuredVariation in variations.OrderBy(_ => _.Order))
            {
                IVariationStrategy variationStrategy = _variationStrategyServiceLocator.GetService(configuredVariation.Name);

                await variationStrategy.DetermineVariations(providerVariationContext, configuredVariation.FundingLineCodes);
            }

            return(providerVariationContext);
        }