view Agendas/trunk/src/Agendas.Web.Tests/Controllers/PatrocinadorControllerTests.cs @ 298:9bc60d166c8a

Se corrigieron los tests por el cambio de Patrocinador, para que no persista el logo en disco. Se comentó el código de PatrocinadorApiController, que no se utiliza.
author juanjose.montesdeocaarbos
date Sun, 19 Feb 2012 16:00:38 -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());
			}
		}
	}
}