示例#1
0
        public void Change_Heat_Setpoint_TenanetId_Is_Empty__Should_Throw_ArgumentOutOfRangeException()
        {
            ConnectToThermostatCommand cmd             = new ConnectToThermostatCommand(Guid.Empty, "ThermostatId", Guid.NewGuid(), 40, 50, 80, "Cool", "Idel");
            HeatSetpointChangeCommand  heatSetpointCmd = new HeatSetpointChangeCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 67);

            Assert.Throws <ArgumentOutOfRangeException> (() => Domain.Thermostat.ConnectToThermostat(eventMetadata, moqEventStore.Object, cmd));
        }
示例#2
0
        public void ChangeHeatSetpoint(IEventMetadata eventMetadata, IEventStore eventStore,
                                       HeatSetpointChangeCommand cmd, long orginalEventNumber)
        {
            ValidateSetpoint(cmd.NewHeatSetpoint);
            ValidateEventNumber(orginalEventNumber);
            ValidateCategory(eventMetadata.Category);

            var connectToControllerCommand = new ChangeHeatSetpoint(eventStore, cmd.ThermostatId,
                                                                    cmd.ThermostatGuid, cmd.TenantId, (double)cmd.NewHeatSetpoint);
            var commandBus = CommandBus.Instance;

            commandBus.Execute(connectToControllerCommand);

            ApplyEvent(new HeatSetpointChanged(cmd.ThermostatGuid, DateTimeOffset.UtcNow, eventMetadata, (double)cmd.NewHeatSetpoint), -4);

            // Send Event to Event Store
            var events = this.GetUncommittedEvents();

            try
            {
                EventSender.SendEvent(eventStore, new CompositeAggregateId(eventMetadata.TenantId, AggregateGuid, eventMetadata.Category), events);
            }
            catch (ConnectionFailure conn)
            {
                Trace.TraceError($"There was a connection error: {conn}");
            }
        }
示例#3
0
        private static void DomoShare_ThermostatHeatSetpointChanged(object sender, ThermostatHeatSetpointChangedEventArgs e)
        {
            var tenantId = Guid.Parse(Configuration.GetSection("AppSettings").GetSection("ControllerId").Value);
            HeatSetpointChangeCommand cmd = new HeatSetpointChangeCommand(e.TenantId, e.ThermostatId, e.ThermostatGuid, e.NewHeatSetpoint);
            ChangeHeatSetpoint        changeHeatSetpointCommand = new ChangeHeatSetpoint(EventStore, e.ThermostatId, e.ThermostatGuid,
                                                                                         e.TenantId, (double)e.NewHeatSetpoint);
            var handler = new ThermostatCommandHandlers();

            handler.Handle(changeHeatSetpointCommand);
        }
示例#4
0
        public void HeatSetpoint_Changed_No_Heat_Setpoint_Temperature_Should_Throw_ArgumentNullException()
        {
            ConnectToThermostatCommand cmd             = new ConnectToThermostatCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 40, 50, 80, "Cool", "Idel");
            HeatSetpointChangeCommand  heatSetpointCmd = new HeatSetpointChangeCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), null);

            ChangeHeatSetpoint changeHeatSetpointCommand = new ChangeHeatSetpoint(moqEventStore.Object, cmd.ThermostatId,
                                                                                  cmd.ThermostatAggregateId, Guid.NewGuid(), heatSetpointCmd.NewHeatSetpoint);
            var handler = new ThermostatCommandHandlers();

            Assert.Throws <ArgumentNullException>(() => handler.Handle(changeHeatSetpointCommand));
        }
示例#5
0
        public void Change_Heat_Setpoint_EventNumber_Mismatch_Should_Throw_ArgumentOutOfRangeException()
        {
            ConnectToThermostatCommand cmd             = new ConnectToThermostatCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 40, 50, 80, "Cool", "Idel");
            HeatSetpointChangeCommand  heatSetpointCmd = new HeatSetpointChangeCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 67);

            List <IEvent> connected = new List <IEvent>();

            connected.Add(new Connected(Guid.NewGuid(), DateTimeOffset.UtcNow, eventMetadata, 78, 56, 76, "Off", "Idel", 80));
            moqEventStore.Setup(storage => storage.GetAllEvents(It.IsAny <CompositeAggregateId>())).Returns(connected);
            var p = Domain.Thermostat.ConnectToThermostat(eventMetadata, moqEventStore.Object, cmd);

            Assert.Throws <ArgumentOutOfRangeException>(() => p.ChangeHeatSetpoint(eventMetadata, moqEventStore.Object, heatSetpointCmd, 200));
            moqEventStore.Verify(m => m.SaveEvents(It.IsAny <CompositeAggregateId>(), It.IsAny <IEnumerable <IEvent> >()), Times.Once);
        }
示例#6
0
        public void HeatSetpoint_Changed_Should_Change_Heat_Setpoint()
        {
            ConnectToThermostatCommand cmd             = new ConnectToThermostatCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 40, 50, 80, "Cool", "Idel");
            HeatSetpointChangeCommand  heatSetpointCmd = new HeatSetpointChangeCommand(Guid.NewGuid(), "ThermostatId", Guid.NewGuid(), 67);
            List <IEvent> connected = new List <IEvent>();

            connected.Add(new Connected(Guid.NewGuid(), DateTimeOffset.UtcNow, eventMetadata, 78, 56, 76, "Off", "Idel", 80));
            moqEventStore.Setup(storage => storage.GetAllEvents(It.IsAny <CompositeAggregateId>())).Returns(connected);

            var thermo = Domain.Thermostat.ConnectToThermostat(eventMetadata, moqEventStore.Object, cmd);

            thermo.ChangeHeatSetpoint(eventMetadata, moqEventStore.Object, heatSetpointCmd, thermo.Version);
            moqEventStore.Verify(m => m.SaveEvents(It.IsAny <CompositeAggregateId>(), It.IsAny <IEnumerable <IEvent> >()), Times.Exactly(2));
            var events = thermo.GetUncommittedEvents();

            events.Count().ShouldEqual(1);
        }
        public void Handle(ChangeHeatSetpoint message)
        {
            //Validate
            ValidateSetpoint(message.NewHeatSetpoint);

            //Process
            var tenantId      = message.TenantId;
            var eventMetadata = new EventMetadata(tenantId, "Thermostat", Guid.NewGuid().ToString(), Guid.NewGuid(), tenantId, DateTimeOffset.UtcNow);
            var thermostat    = new Domain.Thermostat(message.Id);

            Repository <Domain.Thermostat> thermostatRepo = new Repository <Domain.Thermostat>(message.EventStore);

            HeatSetpointChangeCommand cmd = new HeatSetpointChangeCommand(tenantId, message.ThermostatId, message.Id, message.NewHeatSetpoint);

            var found = thermostatRepo.GetById(new CompositeAggregateId(tenantId, message.Id, "Thermostat"));

            found.ChangeHeatSetpoint(eventMetadata, message.EventStore, cmd, ((Aggregate)found).EventMetadata.EventNumber);
        }
示例#8
0
        public void Should_Change_Heat_Setpoint_To_Thermostat()
        {
            var moqEventStore              = new Mock <IEventStore>();
            var eventMetadata              = new EventMetadata(Guid.NewGuid(), "TestCategory", "TestCorrelationId", Guid.NewGuid(), Guid.NewGuid(), DateTimeOffset.UtcNow);
            var thermostatId               = "termostatId";
            var thermostatGuid             = Guid.NewGuid();
            ConnectToThermostatCommand cmd = new ConnectToThermostatCommand(Guid.NewGuid(), thermostatId, thermostatGuid, 76, 60.9, 77.2, "Heat", "Heating", 77.4);
            List <IEvent> connected        = new List <IEvent>();

            connected.Add(new ESEvents.Common.Events.Thermostat.Connected(Guid.NewGuid(), DateTimeOffset.UtcNow, eventMetadata, 78, 56, 76, "Off", "Idel", 80));
            moqEventStore.Setup(storage => storage.GetAllEvents(It.IsAny <CompositeAggregateId>())).Returns(connected);

            var p = Domain.Thermostat.ConnectToThermostat(eventMetadata, moqEventStore.Object, cmd);
            HeatSetpointChangeCommand heatSetpointChangeCommand = new HeatSetpointChangeCommand(Guid.NewGuid(), thermostatId, thermostatGuid, 61);
            ChangeHeatSetpoint        changeHeatSetpointCommand = new ChangeHeatSetpoint(moqEventStore.Object, thermostatId, thermostatGuid, Guid.NewGuid(), (double)cmd.HeatSetpoint);
            var handler = new ThermostatCommandHandlers();

            handler.Handle(changeHeatSetpointCommand);

            Assert.IsNotNull(p.AggregateGuid);
            Assert.AreNotEqual(Guid.Empty, p.AggregateGuid);
        }