public async Task StartHeatingMode_CurrentRoomTemperatureHigherThanTarget_AirConditionerSwitchesToStandBy()
        {
            // Arrange.
            IAirConditioner airConditioner = new FakeAirConditioner(LoggerFactory.CreateLogger <IAirConditioner>(), 30, secondsToTemperatureChange: 0);

            airConditioner.PowerOn();

            // Act.
            await airConditioner.StartHeatingMode(20);

            // Assert
            airConditioner.RoomTemperature.Should().Be(30);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.StandBy);
        }
        public async Task SetToCoolingMode_AirConditionerIsOff_AirConditionerSwitchesToStandBy()
        {
            // Arrange.
            IAirConditioner airConditioner = new FakeAirConditioner(LoggerFactory.CreateLogger <IAirConditioner>(), 10, secondsToTemperatureChange: 0);

            airConditioner.PowerOff();

            // Act.
            await airConditioner.StartCoolingMode(5);

            // Assert
            airConditioner.RoomTemperature.Should().Be(10);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.StandBy);
        }
        public async Task StartCoolingMode_TargetTemperatureLowerThanMix_AirConditionerCoolsRoomToMin()
        {
            // Arrange.
            IAirConditioner airConditioner = new FakeAirConditioner(LoggerFactory.CreateLogger <IAirConditioner>(), 5 + 1, secondsToTemperatureChange: 0);

            airConditioner.PowerOn();

            // Act.
            await airConditioner.StartCoolingMode(airConditioner.MinTemperature - 1);

            // Assert
            await Task.Delay(TimeSpan.FromSeconds(1));

            airConditioner.RoomTemperature.Should().Be(airConditioner.MinTemperature);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.StandBy);
        }
        public async Task SetToCoolingMode_RoomTemperatureIsHigherThanTarget_AirConditionerCoolsRoom()
        {
            // Arrange.
            IAirConditioner airConditioner = new FakeAirConditioner(LoggerFactory.CreateLogger <IAirConditioner>(), 10, secondsToTemperatureChange: 0);

            airConditioner.PowerOn();

            // Act.
            await airConditioner.StartCoolingMode(9);

            // Assert
            await Task.Delay(TimeSpan.FromSeconds(1));

            airConditioner.RoomTemperature.Should().Be(9);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.StandBy);
        }
        public async Task PowerOff_PowerOffDuringRunningTask_TaskShouldBeStopped()
        {
            // Arrange.
            int             initialTemperature = 20;
            IAirConditioner airConditioner     = new FakeAirConditioner(LoggerFactory.CreateLogger <IAirConditioner>(), initialTemperature, secondsToTemperatureChange: 1);

            airConditioner.PowerOn();

            // Act.
            await airConditioner.StartHeatingMode(airConditioner.MaxTemperature);

            await Task.Delay(TimeSpan.FromSeconds(1));

            airConditioner.RoomTemperature.Should().BeGreaterThan(initialTemperature);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.Heating);

            airConditioner.PowerOff();

            // Assert
            airConditioner.RoomTemperature.Should().BeLessThan(airConditioner.MaxTemperature);
            airConditioner.CurrentMode.Should().Be(AirConditionerMode.StandBy);
        }