public async Task WhenIAddTheFollowingBudgetItems(Table table) { var features = Resolve <BudgetClassFeatures>(); var dataSet = table.CreateSet <BudgetItemData>(); foreach (var group in dataSet.GroupBy(bid => bid.BudgetClass)) { var budgetClass = await features.FindBudgetClassByNameAsync(group.Key); budgetClass.Should().NotBeNull($@"because BudgetClass ""{group.Key}"" MUST exist"); var mapper = new BudgetItemMapper(); var items = group.Select(bid => mapper.CreateEntity(bid)); var errors = await features.AddBudgetItemsRangeAsync(budgetClass, items); errors.Should().BeEmpty(); } }
public async Task WhenIUpdateBudgetClassToThisItemList(string className, Table table) { var features = Resolve <BudgetClassFeatures>(); var budgetClass = await features.FindBudgetClassByNameAsync(className); budgetClass.Should().NotBeNull(); var dataSet = table.CreateSet <BudgetItemData>(); var itemDict = budgetClass.BudgetItems.ToDictionary(bi => bi.Name); var mapper = new BudgetItemMapper(); foreach (BudgetItemData data in dataSet) { if (itemDict.TryGetValue(data.FindName, out BudgetItem entity)) { mapper.UpdateEntity(data, entity); itemDict.Remove(data.FindName); } else { entity = mapper.CreateEntity(data); budgetClass.BudgetItems.Add(entity); } } foreach (var item in itemDict) { budgetClass.BudgetItems.Remove(item.Value); } var errors = await features.ModifyBudgetClassAsync(budgetClass); errors.Should().BeEmpty(); }