view Agendas/trunk/src/Agendas.Web.Tests/Controllers/PatrocinadorControllerTests.cs @ 284:79942e030118

#123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador.
author juanjose.montesdeocaarbos
date Wed, 28 Dec 2011 09:35:27 -0300
parents 1e889a2e45c5
children 48ab8788bd19
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Agendas.NHibernate;
using Agendas.Repositories.Tests.Infraestructure;
using Agendas.Web.Tests.Helpers;
using AltNetHispano.Agendas.Repositories.NHibernate;
using AltNetHispano.Agendas.Web.Controllers;
using AltNetHispano.Agendas.Web.Models;
using Moq;
using NUnit.Framework;
using System.Drawing;

namespace Agendas.Web.Tests.Controllers
{
	[TestFixture]
	public class PatrocinadorControllerTests : MvcControllerTestsBase
	{
		internal void CrearPatrocinadorApress()
		{
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};
			var form = new FormCollection
			           	{
			           		{"Nombre", "APRESS"},
			           		{"Logo", @"images\apress.gif"}
			           	};
			var patrocinadorNew = BindModel<PatrocinadorNewModel>(patrocinadorController, form);

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultNuevo = patrocinadorController.Nuevo(patrocinadorNew);
			}
		}

		internal void RegisterBinders()
		{
			ModelBinders.Binders[typeof(HttpPostedFileBase)] = new HttpPostedFileBaseModelBinder();
		}

		[SetUp]
		public void SetUpTests()
		{
			NhHelperTest.CleanDb();
			RegisterBinders();
		}

		[Test]
		public void PatrocinadorIndexGet()
		{
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultIndex = patrocinadorController.Index();
				Assert.IsInstanceOf(typeof(ViewResult), resultIndex);
				Assert.AreEqual("", ((ViewResult)resultIndex).ViewName);
			}
		}

		[Test]
		public void PatrocinadorNuevoGet()
		{
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultNuevo = patrocinadorController.Nuevo();
				Assert.IsInstanceOf(typeof(ViewResult), resultNuevo);
				Assert.AreEqual("DefaultEditor", ((ViewResult)resultNuevo).ViewName); //UploadFileEditor
			}
		}

		[Test]
		public void PatrocinadorNuevoPostSatisfactorio()
		{
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			var form = new FormCollection
                           {
                               {"Nombre", "APRESS"},
							   {"Logo", @"images\apress.gif"}
                           };
			var patrocinadorNew = BindModel<PatrocinadorNewModel>(patrocinadorController, form);

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultNuevo = patrocinadorController.Nuevo(patrocinadorNew);
				Assert.IsInstanceOf(typeof(RedirectToRouteResult), resultNuevo);
				var viewResultNuevo = (RedirectToRouteResult)resultNuevo;
				Assert.AreEqual("Index", viewResultNuevo.RouteValues["action"]);
			}
		}

		[Test]
		public void PatrocinadorNuevoPostRequiredFields()
		{
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			var form = new FormCollection
                           {
                               {"Nombre", ""},
                               {"Logo", "" }
                           };
			var patrocinadorNew = BindModel<PatrocinadorNewModel>(patrocinadorController, form);

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultNuevo = patrocinadorController.Nuevo(patrocinadorNew);
				Assert.IsInstanceOf(typeof(ViewResult), resultNuevo);
				var viewResultNuevo = (ViewResult)resultNuevo;
				Assert.AreEqual("DefaultEditor", viewResultNuevo.ViewName);
				Assert.AreEqual(1, viewResultNuevo.ViewData.ModelState["Nombre"].Errors.Count);
				Assert.AreEqual("El campo Nombre es obligatorio.", viewResultNuevo.ViewData.ModelState["Nombre"].Errors[0].ErrorMessage);
				Assert.AreEqual(1, viewResultNuevo.ViewData.ModelState["Logo"].Errors.Count);
				Assert.AreEqual("El campo Logo es obligatorio.", viewResultNuevo.ViewData.ModelState["Logo"].Errors[0].ErrorMessage);
			}
		}

		[Test]
		public void PatrocinadorNuevoPostExists()
		{
			CrearPatrocinadorApress();

			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			var form = new FormCollection
			           	{
			           		{"Nombre", "APRESS"},
			           		{"Logo", @"images\apress.gif"}
			           	};
			var patrocinadorNew = BindModel<PatrocinadorNewModel>(patrocinadorController, form);

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultNuevo = patrocinadorController.Nuevo(patrocinadorNew);
				Assert.IsInstanceOf(typeof (ViewResult), resultNuevo);
				var viewResultNuevo = (ViewResult) resultNuevo;

				Assert.AreEqual("El patrocinador ya existe.", viewResultNuevo.TempData["error"]);
			}
		}

		[Test]
		public void PatrocinadorModificarGetDontExists()
		{

			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var patrocinadorRepository = new PatrocinadorRepository(NhHelper.GetSessionFactory());
				Assert.AreEqual(0, patrocinadorRepository.GetAll().Count());
				var resultModificar = patrocinadorController.Modificar("11111111-1111-1111-1111-111111111111");
				Assert.IsInstanceOf(typeof(RedirectToRouteResult), resultModificar);
				Assert.AreEqual("Index", ((RedirectToRouteResult)resultModificar).RouteValues["action"]);
				Assert.AreEqual("No se encontró el patrocinador que intenta modificar", patrocinadorController.TempData["error"]);
				Assert.AreEqual(0, patrocinadorRepository.GetAll().Count());
			}
		}

		[Test]
		public void PatrocinadorModificarGetExists()
		{
			CrearPatrocinadorApress();

			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var patrocinadorRepository = new PatrocinadorRepository(NhHelper.GetSessionFactory());
				var resultModificar = patrocinadorController.Modificar(patrocinadorRepository.GetAll().FirstOrDefault().Id.ToString());
				Assert.IsInstanceOf(typeof(ViewResult), resultModificar);
				Assert.AreEqual("DefaultEditor", ((ViewResult)resultModificar).ViewName);
			}
		}

		[Test]
		public void PatrocinadorModificarPostSatisfactorio()
		{
			PatrocinadorRepository patrocinadorRepository;
			PatrocinadorEditModel patrocinadorEdit;

			CrearPatrocinadorApress();
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			                             	{
			                             		ControllerContext = ControllerCtx
			                             	};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				patrocinadorRepository = new PatrocinadorRepository(NhHelper.GetSessionFactory());

				var form = new FormCollection
				           	{
				           		{"Id", patrocinadorRepository.GetAll().FirstOrDefault().Id.ToString()},
				           		{"Nombre", "APRESS"},
				           		{"Logo", @"images\apress.gif"}
				           	};
				patrocinadorEdit = BindModel<PatrocinadorEditModel>(patrocinadorController, form);
			}

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				Assert.AreEqual(1, patrocinadorRepository.GetAll().Count());
				var resultModificar = patrocinadorController.Modificar(patrocinadorEdit);
				Assert.IsInstanceOf(typeof(RedirectToRouteResult), resultModificar);
				var viewResultEdit = (RedirectToRouteResult)resultModificar;
				Assert.AreEqual("Index", viewResultEdit.RouteValues["action"]);
				Assert.AreEqual(1, patrocinadorRepository.GetAll().Count());
			}
		}

		[Test]
		public void PatrocinadorModificarPostRequiredFields()
		{
			CrearPatrocinadorApress();
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};
			var form = new FormCollection
				        {
				           	{"Id", ""},
				           	{"Nombre", ""},
				           	{"Logo", ""}
				        };
			var patrocinadorEdit = BindModel<PatrocinadorEditModel>(patrocinadorController, form);

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				var resultModificar = patrocinadorController.Modificar(patrocinadorEdit);
				Assert.IsInstanceOf(typeof(ViewResult), resultModificar);
				var viewResultNuevo = (ViewResult)resultModificar;
				Assert.AreEqual("DefaultEditor", viewResultNuevo.ViewName);
				Assert.AreEqual(1, viewResultNuevo.ViewData.ModelState["Nombre"].Errors.Count);
				Assert.AreEqual("El campo Nombre es obligatorio.", viewResultNuevo.ViewData.ModelState["Nombre"].Errors[0].ErrorMessage);
				Assert.AreEqual(1, viewResultNuevo.ViewData.ModelState["Logo"].Errors.Count);
				Assert.AreEqual("El campo Logo es obligatorio.", viewResultNuevo.ViewData.ModelState["Logo"].Errors[0].ErrorMessage);
			}
		}

		[Test]
		public void PatrocinadorQuitarPostSatisfactorio()
		{
			var patrocinadorId = string.Empty;
			PatrocinadorRepository patrocinadorRepository;

			CrearPatrocinadorApress();
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				patrocinadorRepository = new PatrocinadorRepository(NhHelper.GetSessionFactory());
				patrocinadorId = patrocinadorRepository.GetByNombre("Apress").Id.ToString();
			}

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				Assert.AreEqual(1, patrocinadorRepository.GetAll().Count());
				var resultQuitar = patrocinadorController.Eliminar(patrocinadorId);
				Assert.IsInstanceOf(typeof(RedirectToRouteResult), resultQuitar);
				var viewResult = (RedirectToRouteResult)resultQuitar;
				Assert.AreEqual("Index", viewResult.RouteValues["action"]);
			}
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				Assert.AreEqual(0, patrocinadorRepository.GetAll().Count());
			}
		}

		[Test]
		[Ignore]
		public void PatrocinadorQuitarPostDontExists()
		{
			PatrocinadorRepository patrocinadorRepository;
			PatrocinadorEditModel patrocinadorEdit;

			CrearPatrocinadorApress();
			var patrocinadorController = new PatrocinadorController(new HttpServerStub())
			{
				ControllerContext = ControllerCtx
			};
			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				patrocinadorRepository = new PatrocinadorRepository(NhHelper.GetSessionFactory());

				var form = new FormCollection
				           	{
				           		{"Id", patrocinadorRepository.GetAll().FirstOrDefault().Id.ToString()},
				           		{"Nombre", "APRESS"},
				           		{"Logo", @"images\apress.gif"}
				           	};
				patrocinadorEdit = BindModel<PatrocinadorEditModel>(patrocinadorController, form);
			}

			using (new RequestEmulator(NhHelper.GetSessionFactory()))
			{
				Assert.AreEqual(1, patrocinadorRepository.GetAll().Count());
				var resultQuit = patrocinadorController.Modificar(patrocinadorEdit);
				Assert.IsInstanceOf(typeof(RedirectToRouteResult), resultQuit);
				var viewResult = (RedirectToRouteResult)resultQuit;
				Assert.AreEqual("Index", viewResult.RouteValues["action"]);
				Assert.AreEqual(1, patrocinadorRepository.GetAll().Count());
			}
		}
	}
}