コード例 #1
0
        public void HandleCircuitChange(bool state, InputPin inputPin)
        {
            LogHelper.LogMessage("state: {0}, inputPin: {1}", state, inputPin);

            var circuit = _mapper.MapInputPinToCircuit(inputPin);

            if (state)
            {
                //when circuit is turned on
                var newRow = new CircuitStateHistoryEntity
                {
                    Circuit        = circuit,
                    TurnOnTime     = _dateProvider.GetUtcDateTimeDate(),
                    TurnedOnLength = 0
                };
                _circuitsDalHelper.InsertHistory(newRow);
            }
            else
            {
                var turnedOnEntry = _circuitsDalHelper.GetLastRowHistoricalState(circuit);
                if (turnedOnEntry != null)
                {
                    var now          = _dateProvider.GetUtcDateTimeDate();
                    var turnedOnTime = (int)Math.Round((now - turnedOnEntry.TurnOnTime).TotalSeconds);
                    turnedOnEntry.TurnedOnLength = turnedOnTime;

                    _circuitsDalHelper.UpdateHistory(turnedOnEntry);
                }
            }

            _circuitsDalHelper.UpdateCircuitState(circuit, state);
            _eventBroadcaster.BroadcastCircuitStateChange(new StateChange {
                Circuit = circuit, State = state
            });
        }
コード例 #2
0
        public void test_when_circuit_is_on_and_off_for_2_seconds_this_is_logged()
        {
            var circuitRepositoryMock = new Mock <ICircuitsDalHelper>();

            var insertDate         = new DateTime(2014, 1, 1, 12, 1, 1);
            var stateEnteredWhenOn = new CircuitStateHistoryEntity
            {
                Circuit    = Circuit.C1,
                TurnOnTime = insertDate
            };

            circuitRepositoryMock.Setup(r => r.GetLastRowHistoricalState(stateEnteredWhenOn.Circuit))
            .Returns(() => stateEnteredWhenOn);

            var dateProviderMock = new Mock <IDateProvider>();

            dateProviderMock.Setup(dp => dp.GetUtcDateTimeDate())
            .Returns(() => insertDate)
            .Callback(() => insertDate = insertDate.AddHours(1));
            var eventBroadcasterMock = new Mock <IEventBroadcaster>();

            var manager = new InputCircuitsManager(circuitRepositoryMock.Object, new PinMapper(),
                                                   dateProviderMock.Object, eventBroadcasterMock.Object);

            manager.HandleCircuitChange(true, InputPin.I1);
            circuitRepositoryMock.Verify(r => r.InsertHistory(It.Is <CircuitStateHistoryEntity>(cs => cs.Circuit == Circuit.C1)), Times.Once);
            manager.HandleCircuitChange(false, InputPin.I1);

            circuitRepositoryMock.Verify(r => r.GetLastRowHistoricalState(stateEnteredWhenOn.Circuit), Times.Once);
            circuitRepositoryMock.Verify(r => r.UpdateHistory(It.Is <CircuitStateHistoryEntity>(cs => cs.Circuit == Circuit.C1 && cs.TurnedOnLength == 3600)), Times.Once);
            eventBroadcasterMock.Verify(x => x.BroadcastCircuitStateChange(It.IsAny <StateChange>()), Times.Exactly(2));
        }
コード例 #3
0
 public void UpdateHistory(CircuitStateHistoryEntity circuitStateHistory)
 {
     _dbContext.CircuitsStateHistory.FindOneAndReplace(c => c.Id == circuitStateHistory.Id, circuitStateHistory);
 }
コード例 #4
0
 public void InsertHistory(CircuitStateHistoryEntity circuitStateHistory)
 {
     _dbContext.CircuitsStateHistory.InsertOne(circuitStateHistory);
 }