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); }
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); }