Exemple #1
0
        public void CanObserveStateOfMultipleEventViews()
        {
            // Arrange
            var eventSubject           = new Subject <SimpleEvent>();
            var totalCostCartEventView = new TotalCostCartEventView(eventSubject.AsObservable());
            var ordersCartEventView    = new OrdersCartEventView(eventSubject.AsObservable());

            // Act
            TotalCostCartState lastTotalCostCartState = null;
            OrdersCartState    lastOrdersCartState    = null;

            totalCostCartEventView.ObserveState()
            .Subscribe(state =>
            {
                lastTotalCostCartState = state;
            });
            ordersCartEventView.ObserveState()
            .Subscribe(state =>
            {
                lastOrdersCartState = state;
            });

            eventSubject.OnNext(new SimpleEvent
            {
                EventName = nameof(AddItemInCartCommand),
                Data      = new AddItemInCartCommand
                {
                    ItemName = "Book",
                    UnitCost = 45
                }
            });
            eventSubject.OnNext(new SimpleEvent
            {
                EventName = nameof(AddItemInCartCommand),
                Data      = new AddItemInCartCommand
                {
                    ItemName = "Book",
                    UnitCost = 20
                }
            });

            // Assert
            Assert.NotNull(lastTotalCostCartState);
            Assert.Equal(65, lastTotalCostCartState.TotalCost);

            Assert.NotNull(lastOrdersCartState);
            Assert.Equal(2, lastOrdersCartState.NumberOfItems);
            Assert.Single(lastOrdersCartState.Items);
            Assert.True(lastOrdersCartState.Items.ContainsKey("Book"));
            Assert.Equal(2, lastOrdersCartState.Items["Book"]);
        }
Exemple #2
0
        public void CanObserveStatePartially()
        {
            // Arrange
            var eventSubject        = new Subject <SimpleEvent>();
            var ordersCartEventView = new OrdersCartEventView(eventSubject.AsObservable());

            // Act
            int lastNumberOfItems = 0;

            ordersCartEventView.ObserveState(state => state.NumberOfItems)
            .Subscribe(numberOfItems =>
            {
                lastNumberOfItems = numberOfItems;
            });

            eventSubject.OnNext(new SimpleEvent
            {
                EventName = nameof(AddItemInCartCommand),
                Data      = new AddItemInCartCommand
                {
                    ItemName = "Book",
                    UnitCost = 45
                }
            });
            eventSubject.OnNext(new SimpleEvent
            {
                EventName = nameof(AddItemInCartCommand),
                Data      = new AddItemInCartCommand
                {
                    ItemName      = "Book",
                    UnitCost      = 20,
                    NumberOfUnits = 2
                }
            });

            // Assert
            Assert.Equal(3, lastNumberOfItems);
        }