using Microsoft.VisualStudio.TestTools.UnitTesting;
using MvcAvecTests.Controllers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace MvcAvecTests.Controllers.Tests {
  [TestClass()]
  public class CalculatriceControllerTest {
    [TestMethod()]
    public void AdditionnerSansArgumentTest() {
      var ctrlr = new CalculatriceController();
      var rtrr = ctrlr.Additionner() as RedirectToRouteResult;
      Assert.IsTrue( rtrr != null && rtrr.RouteValues["action"].Equals( "Index" ), "L'action Additionner sans argument doit rediriger vers l'action index" );
    }
    [TestMethod()]
    public void AdditionnerPremierPasNumeriqueTest() {
      var ctrlr = new CalculatriceController();
      var vr = (ViewResult)ctrlr.Additionner( "truc", "1" );
			int bidon;
      Assert.IsTrue( vr.ViewBag.Resultat is string && !int.TryParse( vr.ViewBag.Resultat, out bidon ), "Le premier paramètre n'est pas un entier, on devrait fournir un message d'erreur dans ViewBag.Resultat" );
    }
    [TestMethod()]
    public void AdditionnerSecondPasNumeriqueTest() {
      var ctrlr = new CalculatriceController();
      var vr = (ViewResult)ctrlr.Additionner( "1", "truc" );
      int bidon;
      Assert.IsTrue( vr.ViewBag.Resultat is string && ! int.TryParse( vr.ViewBag.Resultat, out bidon ), "Le 2nd paramètre n'est pas un entier, on devrait fournir un message d'erreur dans ViewBag.Resultat" );
    }
    [TestMethod()]
    public void AdditionnerDebordementTest() {
      var ctrlr = new CalculatriceController();
      var vr = (ViewResult)ctrlr.Additionner( int.MaxValue.ToString(), int.MaxValue.ToString() );
			int bidon;
			Assert.IsTrue( vr.ViewBag.Resultat is string && !int.TryParse( vr.ViewBag.Resultat, out bidon ), "Le calcul aurait causer un débordement, on devrait fournir un message d'erreur dans ViewBag.Resultat" );
    }
  }
}