public async Task AddManyEnumerable(List <Topping> toppings)
        {
            await Toppings.AddMany(toppings);

            var result = (await Toppings.GetAll()).ToList();

            Assert.Equal(toppings.Count, result.Count);
            Assert.All(result, t => Assert.Contains(t, toppings));
        }
        public async Task Add_NoToppings(Pizza p)
        {
            p.Toppings.Clear();
            await Pizzas.Add(p);

            var response = await Pizzas.Get(p.Id);

            Assert.Equal(p, response);
            Assert.Empty(await Toppings.GetAll());
        }
        public async Task AddManyParams(Topping a, Topping b, Topping c)
        {
            await Toppings.AddMany(a, b, c);

            var result = (await Toppings.GetAll()).ToList();

            Assert.Equal(3, result.Count);
            Assert.Contains(a, result);
            Assert.Contains(b, result);
            Assert.Contains(c, result);
        }
        public async Task DeleteByModel(Topping topping, Topping other)
        {
            await Toppings.AddMany(topping, other);

            await Toppings.Delete(topping);

            var results = (await Toppings.GetAll()).ToList();

            Assert.Single(results);
            Assert.Contains(other, results);
            Assert.DoesNotContain(topping, results);
        }
        public async Task DeleteById(Pizza p)
        {
            await Pizzas.Add(p);

            await Pizzas.Delete(p.Id);

            Assert.Empty(await Pizzas.GetAll());

            var toppings = (await Toppings.GetAll()).ToList();

            Assert.Equal(p.Toppings.Count, toppings.Count);
            Assert.All(toppings, t => Assert.Contains(t, p.Toppings));
        }
        public async Task DeleteManyByIdEnumerable(List <Topping> toppings, Topping other)
        {
            await Toppings.AddMany(toppings);

            await Toppings.Add(other);

            await Toppings.DeleteMany(toppings.Select(t => t.Id));

            var results = (await Toppings.GetAll()).ToList();

            Assert.Single(results);
            Assert.Contains(other, results);
            Assert.All(toppings, t => Assert.DoesNotContain(t, results));
        }
        public async Task DeleteManyByIdParams(Topping a, Topping b, Topping other)
        {
            await Toppings.AddMany(a, b);

            await Toppings.Add(other);

            await Toppings.DeleteMany(a.Id, b.Id);

            var results = (await Toppings.GetAll()).ToList();

            Assert.Single(results);
            Assert.Contains(other, results);
            Assert.DoesNotContain(a, results);
            Assert.DoesNotContain(b, results);
        }
        public async Task DeleteManyByParamsId(Pizza a, Pizza b, Pizza c)
        {
            await Pizzas.AddMany(a, b, c);

            await Pizzas.DeleteMany(a.Id, c.Id);

            var ps = (await Pizzas.GetAll()).ToList();
            var ts = (await Toppings.GetAll()).ToList();

            var expectedToppings = a.Toppings.Concat(b.Toppings).Concat(c.Toppings).ToList();

            Assert.Equal(1, ps.Count);
            Assert.Contains(b, ps);

            Assert.Equal(expectedToppings.Count, ts.Count);
            Assert.All(ts, t => Assert.Contains(t, expectedToppings));
        }
        public async Task DeleteManyByEnumerableId(List <Pizza> pizzas, Pizza exclude)
        {
            await Pizzas.Add(exclude);

            await Pizzas.AddMany(pizzas);

            await Pizzas.DeleteMany(pizzas.Select(p => p.Id));

            var ps = (await Pizzas.GetAll()).ToList();
            var ts = (await Toppings.GetAll()).ToList();

            var expectedToppings = pizzas.SelectMany(p => p.Toppings).Concat(exclude.Toppings).ToList();

            Assert.Equal(1, ps.Count);
            Assert.Contains(exclude, ps);

            Assert.Equal(expectedToppings.Count, ts.Count);
            Assert.All(ts, t => Assert.Contains(t, expectedToppings));
        }