public virtual async Task ApplyVariationChanges(IApplyProviderVariations variationsApplication) { while (_variationChanges.Count > 0) { IVariationChange variationChange = _variationChanges.Dequeue(); await variationChange.Apply(variationsApplication); } }
public void QueueVariationChange(IVariationChange variationChange) { //the different concrete variation strategies can queue implementations //of IVariationChange here to be run against this provider context //the changes are basically commands to run (moving funding about, creating new providers etc.) //the strategies instantiate the correct change and set its properties correctly so that it //can be run in order per provider _variationChanges.Enqueue(variationChange); }
public async Task QueuesVariationChangesToBeAppliedLater() { IVariationChange changeOne = NewChange(); IVariationChange changeTwo = NewChange(); IVariationChange changeThree = NewChange(); _variationContext.QueueVariationChange(changeThree); _variationContext.QueueVariationChange(changeOne); _variationContext.QueueVariationChange(changeTwo); await _variationContext.ApplyVariationChanges(_applyProviderVariations); Received.InOrder(async() => { await changeThree.Apply(_applyProviderVariations); await changeOne.Apply(_applyProviderVariations); await changeTwo.Apply(_applyProviderVariations); }); }
protected void ThenTheVariationChangeWasQueued <TChange>() where TChange : IVariationChange { VariationContext .QueuedChanges .Count() .Should() .BeGreaterOrEqualTo(_queuedChangeIndex + 1); IVariationChange variationChange = VariationContext .QueuedChanges .ElementAt(_queuedChangeIndex); variationChange .Should() .BeOfType <TChange>(); _queuedChangeIndex++; }