public async Task SeleccionComensales_Failure()
        {
            //Arrange
            using (context)
            {
                var controller = new MenusController(context);

                Menu menu = new Menu
                {
                    idServicio = 1,
                    nombre     = "TestPC",
                    horaInicio = new DateTime(2001, 12, 13, 13, 00, 00),
                    horaFin    = new DateTime(2001, 12, 13, 16, 00, 00),
                    precio     = 10F
                };

                int nComensales = 1;
                int nHabitacion = 101;

                ReservaMenuViewModel rmvm = new ReservaMenuViewModel
                {
                    idServicio  = menu.idServicio,
                    nHabitacion = nHabitacion
                };

                ResultMenuViewModel remvm = new ResultMenuViewModel
                {
                    menu   = menu,
                    result = "Error: out of time"
                };

                SystemTime.Now = () => new DateTime(2016, 10, 20, 12, 00, 00);

                // Act
                var result = await controller.SeleccionComensales(nComensales, rmvm.nHabitacion, rmvm.idServicio, "");

                //Assert
                var viewResult = Assert.IsType <RedirectToActionResult>(result);
                Assert.Equal("ContratarMenu", viewResult.ActionName);
                ResultMenuViewModel vmResult = new ResultMenuViewModel();
                List <string>       keys     = new List <string>();
                string aux;
                int    i = 0;
                foreach (var key in viewResult.RouteValues.Keys)
                {
                    aux = Assert.IsType <string>(key);
                    Assert.Equal(aux, "key", Comparer.Get <string>((s1, s2) => s1 == "result" || s1 == "menu"));
                    keys.Add(aux);
                    i++;
                }
                Assert.Equal(i, 2);

                i = 0;
                foreach (var c in viewResult.RouteValues.Values)
                {
                    aux = keys[i];
                    if (aux == "result")
                    {
                        i++;
                        vmResult.result = Assert.IsType <string>(c);
                    }
                    else if (aux == "menu")
                    {
                        i++;
                        vmResult.menu = Assert.IsType <Menu>(c);
                    }
                    else
                    {
                        i++;
                    }
                }
                Assert.Equal(remvm, vmResult, Comparer.Get <ResultMenuViewModel>((rm1, rm2) => rm1.result == rm2.result && rm1.menu.idServicio == rm2.menu.idServicio));
            }
        }
        public async Task SeleccionComensales_InvalidMenu()
        {
            //Arrange
            using (context)
            {
                var controller = new MenusController(context);

                Menu menu = new Menu
                {
                    idServicio = 0,
                    nombre     = "TestPC",
                    horaInicio = new DateTime(2001, 12, 13, 13, 00, 00),
                    horaFin    = new DateTime(2001, 12, 13, 16, 00, 00),
                    precio     = 10F
                };

                Habitacion habitacion = new Habitacion {
                    numero = 101
                };

                int nComensales = 1;

                ResultMenuViewModel remvm = new ResultMenuViewModel
                {
                    menu   = menu,
                    result = "Failure"
                };

                // Act
                var result = await controller.SeleccionComensales(nComensales, habitacion.numero, menu.idServicio, "");

                //Assert
                var viewResult = Assert.IsType <RedirectToActionResult>(result);
                Assert.Equal("ContratarMenu", viewResult.ActionName);
                string        vmResult = "NOP";
                List <string> keys     = new List <string>();
                string        aux;
                int           i = 0;
                foreach (var key in viewResult.RouteValues.Keys)
                {
                    aux = Assert.IsType <string>(key);
                    Assert.Equal(aux, "key", Comparer.Get <string>((s1, s2) => s1 == "result" || s1 == "menu"));
                    keys.Add(aux);
                    i++;
                }
                Assert.Equal(i, 2);

                i = 0;
                foreach (var c in viewResult.RouteValues.Values)
                {
                    aux = keys[i];
                    if (aux == "result")
                    {
                        i++;
                        vmResult = Assert.IsType <string>(c);
                    }
                    else if (aux == "menu")
                    {
                        i++;
                        Assert.Null(c);
                    }
                    else
                    {
                        i++;
                    }
                }

                Assert.Equal(remvm.result, vmResult);
            }
        }