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 }); }
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)); }
public void UpdateHistory(CircuitStateHistoryEntity circuitStateHistory) { _dbContext.CircuitsStateHistory.FindOneAndReplace(c => c.Id == circuitStateHistory.Id, circuitStateHistory); }
public void InsertHistory(CircuitStateHistoryEntity circuitStateHistory) { _dbContext.CircuitsStateHistory.InsertOne(circuitStateHistory); }