public void ToMutationEvent_Should_ReturnMutationForEachItem()
        {
            var product = ProductFactory.GetProduct("0");

            product.Available.Should().Be(10);

            var product1 = ProductFactory.GetProduct("1");
            var product2 = ProductFactory.GetProduct("2");

            var mutations = new List <Product>
            {
                product1,
                product2
            };

            var actual = MutationFactory.ToMutationEvent <Product, Product, Guid, int>(
                x => x.Available,
                mutations,
                x => x.Id,
                x => x.InStock)
                         .ToList();

            Assert.Equal(mutations.Count, actual.Count);
            var mutation1 = actual[0];
            var mutation2 = actual.Last();

            mutation1.Revert(product);
            product.Available.Should().Be(10 - product1.InStock);

            mutation2.Apply(product);
            product.Available.Should().Be(10 - product1.InStock + product2.InStock);
        }
Exemplo n.º 2
0
        internal static List <IEvent <Product, string> > GetChanges(Guid itemId)
        {
            var priceChanges         = ProductFactory.GetProductPriceChanges(itemId).ToList();
            var stockMutationChanges = ProductFactory.GetProductStockMutations(itemId).ToList();

            var changes = ChangeFactory.ToOrderedChangeEvent <Product, ProductPriceChange, string, double, DateTime>(
                x => x.Price,
                0,
                priceChanges,
                x => x.Id,
                x => x.Price,
                x => x.ChangeDate).Cast <IEvent <Product, string> >().ToList();

            changes.AddRange(MutationFactory.ToMutationEvent <Product, ProductStockMutation, string, int>(
                                 x => x.Available,
                                 stockMutationChanges,
                                 x => x.Id,
                                 x => x.ApplyableAmount).Cast <IEvent <Product, string> >());

            changes.AddRange(MutationFactory.ToOrderedMutationEvent <Product, ProductStockMutation, string, int, DateTime>(
                                 x => x.InStock,
                                 stockMutationChanges,
                                 x => x.Id,
                                 x => x.ApplyableAmount,
                                 x => x.DeliveryDate.Date).Cast <IEvent <Product, string> >());

            return(changes);
        }