using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using ResourcesManager.Controllers; using ResourcesManager.Interfaces; using ResourcesManager.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; namespace ResourcesManager.Controllers.Tests { [TestClass()] public class ReservationsControllerTests { List expectedReservs; Mock mockReservRepo; Mock mockUserRepo; Mock mockResourceRepo; Mock mockStatRepo; ReservationsController reservController; [TestInitialize] public void InitializeTestData() { expectedReservs = new List { new Reservation() { Id=1, Begining = DateTime.Now, End = DateTime.Now.AddHours(1)}, new Reservation() { Id=2, Begining = DateTime.Now, End = DateTime.Now.AddHours(1) }, new Reservation() { Id=3, Begining = DateTime.Now, End = DateTime.Now.AddHours(1) } }; mockReservRepo = new Mock() { CallBase = true }; mockUserRepo = new Mock() { CallBase = true }; mockResourceRepo = new Mock() { CallBase = true }; mockStatRepo = new Mock() { CallBase = true }; reservController = new ReservationsController(mockReservRepo.Object, mockUserRepo.Object, mockResourceRepo.Object, mockStatRepo.Object); mockReservRepo.Setup(m => m.GetReservations()).Returns(expectedReservs); mockReservRepo.Setup(m => m.GetReservationByID(It.IsAny())).Returns((int id) => { return expectedReservs.FirstOrDefault(x => x.Id == id); }); mockReservRepo.Setup(m => m.InsertReservation(It.IsAny())).Returns((Reservation reserv) => { expectedReservs.Add(reserv); return true; }); mockReservRepo.Setup(m => m.UpdateReservation(It.IsAny())).Returns((Reservation target) => { var reserv = expectedReservs.FirstOrDefault(x => x.Id == target.Id); if (reserv == null) { return false; } reserv.Begining = target.Begining; reserv.End = target.End; reserv.Resource = target.Resource; reserv.ResourceId = target.ResourceId; reserv.User = target.User; return true; }); mockReservRepo.Setup(m => m.DeleteReservation(It.IsAny())).Returns((int id) => { var resource = expectedReservs.FirstOrDefault(x => x.Id == id); if (resource == null) { return false; } expectedReservs.Remove(resource); return true; }); } [TestMethod()] public void Reservation_Get_Index_Test() { var result = reservController.Index(); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Get_Week_Test() { var result = reservController.Week(DateTime.Now); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Get_Day_Test() { var result = reservController.Day(DateTime.Now); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Get_Create_Test() { var result = reservController.Create(1); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Post_Create_Ok_Test() { var beforeCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, beforeCount); reservController.Create(new Reservation() { Id = 4, Begining = DateTime.Now, End = DateTime.Now.AddHours(1) }); var afterCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(4, afterCount); } [TestMethod()] public void Reservation_Post_Create_Fail_Test() { var beforeCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, beforeCount); reservController.Create(new Reservation() { Id = 4, Begining = DateTime.Now }); var afterCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, afterCount); } [TestMethod()] public void Reservation_Get_Edit_Test() { var result = reservController.Edit(1); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Post_Edit_Ok_Test() { var beforeBegin = DateTime.Now.AddDays(2); reservController.Edit(new Reservation() { Id = 3, Begining = DateTime.Now, End = DateTime.Now.AddHours(1) }); object afterBegin = ((reservController.Details(3) as ViewResult).Model as Reservation).Begining; Assert.AreEqual(beforeBegin, afterBegin); } [TestMethod()] public void Reservation_Post_Edit_Fail_Test() { var beforeBegin = DateTime.Now.AddDays(2); reservController.Edit(new Reservation() { Id = 3, Begining = DateTime.Now }); object afterBegin = ((reservController.Details(3) as ViewResult).Model as Reservation).Begining; Assert.AreEqual(beforeBegin, afterBegin); } [TestMethod()] public void Reservation_Get_Delete_Test() { var result = reservController.Delete(1); Assert.IsNotNull((result as ViewResult).Model); } [TestMethod()] public void Reservation_Post_Delete_Ok_Test() { var beforeCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, beforeCount); reservController.DeleteConfirmed(1); var afterCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(2, afterCount); } [TestMethod()] public void Reservation_Post_Delete_Fail_Test() { var beforeCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, beforeCount); reservController.DeleteConfirmed(8); var afterCount = ((reservController.Index() as ViewResult).Model as IEnumerable).Count(); Assert.AreEqual(3, afterCount); } [TestCleanup] public void Resources_CleanUpTestData() { expectedReservs = null; mockReservRepo = null; mockUserRepo = null; } } }