using System; using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using DevHive.Services.Interfaces; using DevHive.Services.Models; using DevHive.Web.Controllers; using DevHive.Web.Models.Comment; using DevHive.Web.Models.Feed; using DevHive.Web.Models.Post; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; namespace DevHive.Web.Tests { [TestFixture] public class FeedControllerTests { private Mock _feedServiceMock; private Mock _mapperMock; private FeedController _feedController; #region SetUp [SetUp] public void SetUp() { this._feedServiceMock = new Mock(); this._mapperMock = new Mock(); this._feedController = new FeedController(this._feedServiceMock.Object, this._mapperMock.Object); } #endregion #region GetPosts [Test] public async Task GetPosts_ReturnsOkObjectResultWithCorrectReadPageWebModel_WhenPostsExist() { GetPageWebModel getPageWebModel = new GetPageWebModel { }; GetPageServiceModel getPageServiceModel = new GetPageServiceModel { }; ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel { }; ReadPageWebModel readPageWebModel = new ReadPageWebModel { Posts = new List { new ReadPostWebModel(), new ReadPostWebModel(), new ReadPostWebModel() } }; this._feedServiceMock .Setup(p => p.GetPage(It.IsAny())) .ReturnsAsync(readPageServiceModel); this._mapperMock .Setup(p => p.Map(It.IsAny())) .Returns(getPageServiceModel); this._mapperMock .Setup(p => p.Map(It.IsAny())) .Returns(readPageWebModel); IActionResult result = await this._feedController.GetPosts(Guid.Empty, getPageWebModel); Assert.IsInstanceOf(result); OkObjectResult okObjectResult = result as OkObjectResult; ReadPageWebModel resultModel = okObjectResult.Value as Models.Comment.ReadPageWebModel; Assert.AreEqual(3, resultModel.Posts.Count); } #endregion #region GetUserPosts [Test] public async Task GetUserPosts_GetsPostsOfUser_WhenTheyExist() { GetPageWebModel getPageWebModel = new GetPageWebModel { }; GetPageServiceModel getPageServiceModel = new GetPageServiceModel { }; ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel { }; ReadPageWebModel readPageWebModel = new ReadPageWebModel { Posts = new List { new ReadPostWebModel(), new ReadPostWebModel(), new ReadPostWebModel() } }; this._feedServiceMock .Setup(p => p.GetUserPage(It.IsAny())) .ReturnsAsync(readPageServiceModel); this._mapperMock .Setup(p => p.Map(It.IsAny())) .Returns(getPageServiceModel); this._mapperMock .Setup(p => p.Map(It.IsAny())) .Returns(readPageWebModel); IActionResult result = await this._feedController.GetUserPosts(null, getPageWebModel); Assert.IsInstanceOf(result); OkObjectResult okObjectResult = result as OkObjectResult; ReadPageWebModel resultModel = okObjectResult.Value as Models.Comment.ReadPageWebModel; Assert.AreEqual(3, resultModel.Posts.Count); } #endregion } }