public void Should_NotTurnOn_IfMotionDetected_AndSkipConditionIs_Fulfilled() { var timer = new TestTimerService(); var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("14:00:00")); var motionDetectorFactory = new TestMotionDetectorFactory(new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService())); var stateMachineFactory = new TestStateMachineFactory(); var automation = new TurnOnAndOffAutomation(AutomationIdGenerator.EmptyId, dateTimeService, new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService()), new TestDaylightService()); var motionDetector = motionDetectorFactory.CreateTestMotionDetector(); var output = stateMachineFactory.CreateTestStateMachineWithOnOffStates(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); automation.WithTrigger(motionDetector); automation.WithTarget(output); IStateMachine[] otherActuators = { stateMachineFactory.CreateTestStateMachineWithOnOffStates(), stateMachineFactory.CreateTestStateMachineWithOnOffStates(BinaryStateId.On) }; automation.WithSkipIfAnyActuatorIsAlreadyOn(otherActuators); motionDetector.TriggerMotionDetection(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); }
public void NightRange_IN_RANGE_ShouldBeFulfilled() { var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("21:00")); var condition = new TimeRangeCondition(dateTimeService) .WithStart(TimeSpan.Parse("18:00")) .WithEnd(TimeSpan.Parse("08:00")); condition.Validate().ShouldBeEquivalentTo(ConditionState.Fulfilled); }
public void AdjustedRange_OUT_OF_RANGE_ShouldBeNotFulfilled() { var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("15:00")); // 10-18 adjusted to 16-18 var condition = new TimeRangeCondition(dateTimeService) .WithStart(TimeSpan.Parse("10:00")) .WithEnd(TimeSpan.Parse("18:00")) .WithStartAdjustment(TimeSpan.FromHours(6)); condition.Validate().ShouldBeEquivalentTo(ConditionState.NotFulfilled); }
public void Should_NotTurnOn_IfMotionDetected_AndTimeRangeConditionIs_NotFulfilled() { var timer = new TestTimerService(); var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("18:00:00")); var motionDetectorFactory = new TestMotionDetectorFactory(new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService())); var stateMachineFactory = new TestStateMachineFactory(); var automation = new TurnOnAndOffAutomation(AutomationIdGenerator.EmptyId, dateTimeService, new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService()), new TestDaylightService()); var motionDetector = motionDetectorFactory.CreateTestMotionDetector(); var output = stateMachineFactory.CreateTestStateMachineWithOnOffStates(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); automation.WithTurnOnWithinTimeRange(() => TimeSpan.Parse("10:00:00"), () => TimeSpan.Parse("15:00:00")); automation.WithTrigger(motionDetector); automation.WithTarget(output); motionDetector.TriggerMotionDetection(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); }
public TestController() { Log.Instance = new TestLogger(); // Create root services first. var systemInformationService = new SystemInformationService(); var apiService = new ApiService(); ApiService = new ApiService(); BackupService = new BackupService(); StorageService = new StorageService(); TimerService = new TestTimerService(); DaylightService = new TestDaylightService(); DateTimeService = new TestDateTimeService(); SettingsService = new SettingsService(BackupService, StorageService); ResourceService = new ResourceService(BackupService, StorageService, SettingsService); SchedulerService = new SchedulerService(TimerService, DateTimeService); NotificationService = new NotificationService(DateTimeService, ApiService, SchedulerService, SettingsService, StorageService, ResourceService); SystemEventsService = new SystemEventsService(this, NotificationService, ResourceService); AutomationService = new AutomationService(SystemEventsService, systemInformationService, apiService); ComponentService = new ComponentService(SystemEventsService, systemInformationService, apiService, SettingsService); AreaService = new AreaService(ComponentService, AutomationService, SystemEventsService, systemInformationService, apiService, SettingsService); }
public TestController() { Log.Instance = new TestLogger(); // Create root services first. var systemInformationService = new SystemInformationService(); var apiService = new ApiService(); ApiService = new ApiService(); BackupService = new BackupService(); StorageService = new StorageService(); TimerService = new TestTimerService(); DaylightService = new TestDaylightService(); DateTimeService = new TestDateTimeService(); SettingsService = new SettingsService(BackupService, StorageService); ResourceService = new ResourceService(BackupService, StorageService, SettingsService); SchedulerService = new SchedulerService(TimerService, DateTimeService); NotificationService = new NotificationService(DateTimeService, ApiService, SchedulerService, SettingsService, StorageService, ResourceService); SystemEventsService = new SystemEventsService(this, NotificationService, ResourceService); AutomationService = new AutomationService(SystemEventsService, systemInformationService, apiService); ComponentService = new ComponentService(SystemEventsService, systemInformationService, apiService, SettingsService); AreaService = new AreaService(ComponentService, AutomationService, SystemEventsService, systemInformationService, apiService, SettingsService); }
public void Should_TurnOff_IfButtonPressed_WhileTargetIsAlreadyOn() { var timer = new TestTimerService(); var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("14:00:00")); var buttonFactory = new TestButtonFactory(timer, new SettingsService(new BackupService(), new StorageService())); var stateMachineFactory = new TestStateMachineFactory(); var automation = new TurnOnAndOffAutomation(AutomationIdGenerator.EmptyId, dateTimeService, new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService()), new TestDaylightService()); var button = buttonFactory.CreateTestButton(); var output = stateMachineFactory.CreateTestStateMachineWithOnOffStates(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); automation.WithTrigger(button.GetPressedShortlyTrigger()); automation.WithTarget(output); IStateMachine[] otherActuators = { stateMachineFactory.CreateTestStateMachineWithOnOffStates(), stateMachineFactory.CreateTestStateMachineWithOnOffStates() }; automation.WithSkipIfAnyActuatorIsAlreadyOn(otherActuators); button.PressShortly(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.On); button.PressShortly(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.On); automation.WithTurnOffIfButtonPressedWhileAlreadyOn(); button.PressShortly(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); }
public void Should_TurnOn_IfButtonPressed_EvenIfTimeRangeConditionIs_NotFulfilled() { var timer = new TestTimerService(); var dateTimeService = new TestDateTimeService(); dateTimeService.SetTime(TimeSpan.Parse("18:00:00")); var buttonFactory = new TestButtonFactory(timer, new SettingsService(new BackupService(), new StorageService())); var stateMachineFactory = new TestStateMachineFactory(); var automation = new TurnOnAndOffAutomation(AutomationIdGenerator.EmptyId, dateTimeService, new SchedulerService(timer, dateTimeService), new SettingsService(new BackupService(), new StorageService()), new TestDaylightService()); var button = buttonFactory.CreateTestButton(); var output = stateMachineFactory.CreateTestStateMachineWithOnOffStates(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.Off); automation.WithTurnOnWithinTimeRange(() => TimeSpan.Parse("10:00:00"), () => TimeSpan.Parse("15:00:00")); automation.WithTrigger(button.GetPressedShortlyTrigger()); automation.WithTarget(output); button.PressShortly(); output.GetState().ShouldBeEquivalentTo(BinaryStateId.On); }