#define THERMOSTAT_TESTS

using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoTestsUnitaires;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace DemoTestsUnitaires.Tests
{
#if THERMOSTAT_TESTS
    [TestClass]
    public class ThermostatTests
    {
        /// <summary>
        /// Test 1 : Vérifie que la température par défaut est bien initialisée
        /// </summary>
        [TestMethod]
        public void Constructeur_TemperatureParDefaut()
        {
            // Arrange
            Thermostat t = new Thermostat();

            // Act
            int temperature = t.Temperature;

            // Assert
            Assert.AreEqual(Thermostat.TEMP_PAR_DEFAUT, temperature);
        }

        /// <summary>
        /// Test 2 : Vérifie qu'on peut augmenter la température normalement
        /// </summary>
        [TestMethod]
        public void AugmenterTemperature_TemperatureAugmenteDe1()
        {
            // Arrange
            Thermostat t = new Thermostat();

            // Act
            t.AugmenterTemperature();

            // Assert
            Assert.AreEqual(Thermostat.TEMP_PAR_DEFAUT + 1, t.Temperature);
        }       
        /// <summary>
        /// Test 3 : Vérifie qu'une exception ArgumentOutOfRangeException est levée si on dépasse la température max
        /// </summary>
        [TestMethod]       
        public void AugmenterTemperature_DepasseMax_DeclencheException()
        {
            // Arrange : création du thermostat avec la température maximale permise
            Thermostat t = new Thermostat(Thermostat.TEMP_MAX);

            // Act → dépassement
            Assert.ThrowsException<ArgumentOutOfRangeException>(() =>
            {
                t.AugmenterTemperature();
            }); ; // ❌ doit lever exception
        }
        /// <summary>
        /// Test 4 : Vérifie que la température diminue correctement de 1
        /// </summary>
        [TestMethod]
        public void DiminuerTemperature_TemperatureDiminueDe1()
        {
            // Arrange : création d'un thermostat avec la valeur par défaut
            Thermostat t = new Thermostat();

            // On mémorise la valeur initiale pour comparaison
            int temperatureInitiale = t.Temperature;

            // Act : on diminue la température
            t.DiminuerTemperature();

            // Assert : la température doit avoir diminué de 1
            Assert.AreEqual(temperatureInitiale - 1, t.Temperature);
        }

        /// <summary>
        /// Test 5 : Vérifie qu'une exception ArgumentOutOfRangeException est levée si on descend sous la température minimale
        /// </summary>
        [TestMethod]
        public void DiminuerTemperature_SousMin_DeclencheException()
        {
            // Arrange : création du thermostat avec la température minimale permise
            Thermostat t = new Thermostat(Thermostat.TEMP_MIN);
                       

            // Act + Assert :
            // On tente de descendre encore → cela doit déclencher une exception
            Assert.ThrowsException<ArgumentOutOfRangeException>(() =>
            {
                t.DiminuerTemperature();
            });
        }
    }
#endif
}