//
 // GET: /Guess/
 public ActionResult Index()
 {
     if (Session.IsNewSession)
     {
         _secretNumber = new SecretNumber();
         Session.Add("SecretNumber", _secretNumber);
     }
     else
     {
         if (Session.Count > 0)
         {
             _secretNumber = (SecretNumber)Session["SecretNumber"];
             // Check if secret nr should be rebooted
             if (!_secretNumber.CanMakeGuess)
             {
                 _secretNumber.Initialize();
             }
         }
         else
         {
             return View("Error", string.Empty, "Sessionen är felaktig");
         }
     }
     var viewModel = new ViewModel
     {
         SecretNumber = _secretNumber
     };
     return View("Index", viewModel);
 }
        public void CheckCanMakeGuessProperty()
        {
            var sn = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");
            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            for (int i = 94; i <= 100; i++)
            {
                Assert.IsTrue(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte true trots att alla gissningar inte gjorts.");
                sn.MakeGuess(i);
            }
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att sju gissningar gjorts.");

            sn.Initialize();
            number = (int)GetFieldValue(sn, "_number");
            sn.MakeGuess(number);
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts.");
        }
 public void CheckCountProperty()
 {
     var sn = new SecretNumber();
     var number = (int)GetFieldValue(sn, "_number");
     while (number >= 94)
     {
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
     }
     Assert.IsTrue(sn.Count == 0, "Egenskapen Count är inte 0 trots att ingen gissning gjorts.");
     int count = 0;
     for (int i = 94; i <= 100; i++)
     {
         sn.MakeGuess(i);
         Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count));
     }
     sn.MakeGuess(number);
     Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
 }
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;
            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
            }
            sn.Initialize();

            Assert.IsTrue(sn.GuessedNumbers.Count == 0, "Listan med gamla gissningar töms inte.");
            Assert.IsTrue(sn.Count == 0, "Count är inte till 0.");
            Assert.IsNull(sn.LastGuessedNumber.Number, "LastGuessedNumber.Number är inte satt till null.");
            Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.Indefinite, "LastGuessedNumber.Outcome är inte satt till Outcome.Indefinite.");
        }
 public void CheckNumberProperty()
 {
     var sn = new SecretNumber();
     Assert.IsNull(sn.Number, "Egenskapen Number returnerar inte null trots att det finns gissningar kvar.");
     var number = (int)GetFieldValue(sn, "_number");
     while (number >= 94)
     {
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
     }
     for (int i = 94; i <= 100; i++)
     {
         sn.MakeGuess(i);
     }
     Assert.IsTrue(sn.Number == number, "Egenskapen Number har inte samma värde som fältet _number trots att det inte finns några gissningar kvar.");
 }
 public void CheckMakeGuessNoMoreGuesses()
 {
     var sn = new SecretNumber();
     var number = (int)GetFieldValue(sn, "_number");
     while (number >= 94)
     {
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
     }
     for (int i = 94; i <= 100; i++)
     {
         sn.MakeGuess(i);
     }
     var result = sn.MakeGuess(number);
     Assert.IsTrue(result == Outcome.NoMoreGuesses, "MakeGuess returnerar inte Outcome.NoMoreGuesses då fler gissningar än sju görs.");
     //Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.NoMoreGuesses, "Egenskapen LastGuessedNumbers egenskap Outcome är inte Outcome.NoMoreGuesses då fler gissningar än sju görs.");
 }
 public void CheckMakeGuessLow()
 {
     var sn = new SecretNumber();
     int number, prevNumber, loopCount = 5;
     do
     {
         prevNumber = (int)GetFieldValue(sn, "_number");
         Thread.Sleep(100);
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
         Assert.IsTrue(number >= 1 && number <= 100, "Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
         if (--loopCount == 0)
         {
             Assert.IsTrue(prevNumber != number, "Initialize(): _number verkar inte slumpas");
             return;
         }
     } while (number < 2);
     var result = sn.MakeGuess(1);
     Assert.IsTrue(result == Outcome.Low, "MakeGuess returnerar inte Outcome.Low då det gissade talet är mindre än det hemliga talet.");
     Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.Low, "Egenskapen LastGuessedNumber egenskap Outcome är inte Outcome.Low efter en gissning på ett för litet tal gjorts.");
 }
 public void CheckLastGuessedNumberProperty()
 {
     var sn = new SecretNumber();
     var number = (int)GetFieldValue(sn, "_number");
     while (number >= 94)
     {
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
     }
     Assert.IsNull(sn.LastGuessedNumber.Number, "Egenskapen LastGuessedNumbers egenskap Guess är inte null trots att ingen gissning gjorts.");
     sn.MakeGuess(number - 1);
     Assert.IsTrue(sn.LastGuessedNumber.Number == number - 1, "Egenskapen LastGuessedNumbers egenskap Guess har inte värdet av den senaste gissningen då en gissning på ett för lågt tal gjorts.");
     sn.MakeGuess(number + 1);
     Assert.IsTrue(sn.LastGuessedNumber.Number == number + 1, "Egenskapen LastGuessedNumbers egenskap Guess har inte värdet av den senaste gissningen då en gissning på ett för högt tal gjorts.");
     sn.MakeGuess(number);
     Assert.IsTrue(sn.LastGuessedNumber.Number == number, "Egenskapen LastGuessedNumbers egenskap Guess har inte värdet av den senaste gissningen då en gissning på rätt tal gjorts.");
 }
        // Inits the secret nr again and sends back to index-method and page
        public ActionResult Reload()
        {
            if (Session.Count > 0)
            {
                _secretNumber = (SecretNumber)Session["SecretNumber"];
                _secretNumber.Initialize();

                return RedirectToAction("Index");
            }
            else
            {
                return View("Error", String.Empty, "Sessionen är felaktig");
            }
        }