diff options
| author | Danail Dimitrov <danaildimitrov321@gmail.com> | 2021-01-28 17:09:36 +0200 |
|---|---|---|
| committer | Danail Dimitrov <danaildimitrov321@gmail.com> | 2021-01-28 17:09:36 +0200 |
| commit | b13e1d473dc1c29925bd37db4c7265bb4dee350b (patch) | |
| tree | 49ccce128d7e245a266a0721ad0a05a58bcae187 | |
| parent | f8e17868c617e1734c0e77e58a8318300a5b663a (diff) | |
| download | DevHive-b13e1d473dc1c29925bd37db4c7265bb4dee350b.tar DevHive-b13e1d473dc1c29925bd37db4c7265bb4dee350b.tar.gz DevHive-b13e1d473dc1c29925bd37db4c7265bb4dee350b.zip | |
Adding FeedService tests and fixed minor bug with FeedService.GetPage where no exception would be thrown when there are no posts to query
| -rw-r--r-- | src/DevHive.Services/Services/FeedService.cs | 10 | ||||
| -rw-r--r-- | src/DevHive.Tests/DevHive.Services.Tests/FeedService.Tests.cs | 155 |
2 files changed, 161 insertions, 4 deletions
diff --git a/src/DevHive.Services/Services/FeedService.cs b/src/DevHive.Services/Services/FeedService.cs index cae986f..5f2410d 100644 --- a/src/DevHive.Services/Services/FeedService.cs +++ b/src/DevHive.Services/Services/FeedService.cs @@ -30,12 +30,14 @@ namespace DevHive.Services.Services throw new ArgumentException("User doesn't exist!"); List<User> friendsList = user.Friends.ToList(); - // if(friendsList.Count == 0) - // throw new ArgumentException("This user does not have any friends!"); + if (friendsList.Count == 0) + throw new ArgumentException("User has no friends to get feed from!"); List<Post> posts = await this._feedRepository - .GetFriendsPosts(friendsList, model.FirstRequestIssued, model.PageNumber, model.PageSize) ?? - throw new ArgumentException("No posts to query."); + .GetFriendsPosts(friendsList, model.FirstRequestIssued, model.PageNumber, model.PageSize); + + if (posts.Count <= 0) + throw new ArgumentException("No friends of user have posted anything yet!"); ReadPageServiceModel readPageServiceModel = new(); foreach (Post post in posts) diff --git a/src/DevHive.Tests/DevHive.Services.Tests/FeedService.Tests.cs b/src/DevHive.Tests/DevHive.Services.Tests/FeedService.Tests.cs new file mode 100644 index 0000000..36cb838 --- /dev/null +++ b/src/DevHive.Tests/DevHive.Services.Tests/FeedService.Tests.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Data.Interfaces.Repositories; +using DevHive.Data.Models; +using DevHive.Services.Models; +using DevHive.Services.Models.Post.Post; +using DevHive.Services.Services; +using Moq; +using NUnit.Framework; + +namespace DevHive.Services.Tests +{ + [TestFixture] + public class FeedServiceTests + { + private Mock<IFeedRepository> FeedRepositoryMock { get; set; } + private Mock<IUserRepository> UserRepositoryMock { get; set; } + private Mock<IMapper> MapperMock { get; set; } + private FeedService FeedService { get; set; } + + #region SetUps + [SetUp] + public void Setup() + { + this.FeedRepositoryMock = new Mock<IFeedRepository>(); + this.UserRepositoryMock = new Mock<IUserRepository>(); + this.MapperMock = new Mock<IMapper>(); + this.FeedService = new FeedService(this.FeedRepositoryMock.Object, this.UserRepositoryMock.Object, this.MapperMock.Object); + } + #endregion + + #region GetPage + [Test] + public async Task GetPage_ReturnsReadPageServiceModel_WhenSuitablePostsExist() + { + GetPageServiceModel getPageServiceModel = new GetPageServiceModel + { + UserId = Guid.NewGuid() + }; + + User dummyUser = CreateDummyUser(); + User anotherDummyUser = CreateAnotherDummyUser(); + HashSet<User> friends = new HashSet<User>(); + friends.Add(anotherDummyUser); + dummyUser.Friends = friends; + + List<Post> posts = new List<Post> + { + new Post{ Message = "Message"} + }; + + ReadPostServiceModel readPostServiceModel = new ReadPostServiceModel + { + PostId = Guid.NewGuid(), + Message = "Message" + }; + List<ReadPostServiceModel> readPostServiceModels = new List<ReadPostServiceModel>(); + readPostServiceModels.Add(readPostServiceModel); + ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel + { + Posts = readPostServiceModels + }; + + this.UserRepositoryMock.Setup(p => p.GetByIdAsync(It.IsAny<Guid>())).Returns(Task.FromResult(dummyUser)); + this.FeedRepositoryMock.Setup(p => p.GetFriendsPosts(It.IsAny<List<User>>(), It.IsAny<DateTime>(), It.IsAny<int>(), It.IsAny<int>())).Returns(Task.FromResult(posts)); + this.MapperMock.Setup(p => p.Map<ReadPostServiceModel>(It.IsAny<Post>())).Returns(readPostServiceModel); + + ReadPageServiceModel result = await this.FeedService.GetPage(getPageServiceModel); + + Assert.GreaterOrEqual(1, result.Posts.Count, "GetPage does not correctly return the posts"); + } + + [Test] + public void GetPage_ThrowsException_WhenNoSuitablePostsExist() + { + const string EXCEPTION_MESSAGE = "No friends of user have posted anything yet!"; + GetPageServiceModel getPageServiceModel = new GetPageServiceModel + { + UserId = Guid.NewGuid() + }; + + User dummyUser = CreateDummyUser(); + User anotherDummyUser = CreateAnotherDummyUser(); + HashSet<User> friends = new HashSet<User>(); + friends.Add(anotherDummyUser); + dummyUser.Friends = friends; + + ReadPostServiceModel readPostServiceModel = new ReadPostServiceModel + { + PostId = Guid.NewGuid(), + Message = "Message" + }; + List<ReadPostServiceModel> readPostServiceModels = new List<ReadPostServiceModel>(); + readPostServiceModels.Add(readPostServiceModel); + ReadPageServiceModel readPageServiceModel = new ReadPageServiceModel + { + Posts = readPostServiceModels + }; + + this.UserRepositoryMock.Setup(p => p.GetByIdAsync(It.IsAny<Guid>())).Returns(Task.FromResult(dummyUser)); + this.FeedRepositoryMock.Setup(p => p.GetFriendsPosts(It.IsAny<List<User>>(), It.IsAny<DateTime>(), It.IsAny<int>(), It.IsAny<int>())).Returns(Task.FromResult(new List<Post>())); + + Exception ex = Assert.ThrowsAsync<ArgumentException>(() => this.FeedService.GetPage(getPageServiceModel)); + + Assert.AreEqual(EXCEPTION_MESSAGE, ex.Message, "Wrong exception message"); + } + + [Test] + public void GetPage_ThrowsException_WhenUserHasNoFriendsToGetPostsFrom() + { + const string EXCEPTION_MESSAGE = "User has no friends to get feed from!"; + GetPageServiceModel getPageServiceModel = new GetPageServiceModel + { + UserId = Guid.NewGuid() + }; + + User dummyUser = CreateDummyUser(); + + this.UserRepositoryMock.Setup(p => p.GetByIdAsync(It.IsAny<Guid>())).Returns(Task.FromResult(dummyUser)); + + Exception ex = Assert.ThrowsAsync<ArgumentException>(() => this.FeedService.GetPage(getPageServiceModel)); + + Assert.AreEqual(EXCEPTION_MESSAGE, ex.Message, "Wrong exception message"); + } + #endregion + + #region HelperMethods + private User CreateDummyUser() + { + return new() + { + Id = Guid.NewGuid(), + UserName = "dummyUser", + FirstName = "Spas", + LastName = "Spasov", + Email = "abv@abv.bg", + }; + } + + private User CreateAnotherDummyUser() + { + return new() + { + Id = Guid.NewGuid(), + UserName = "anotherDummyUser", + FirstName = "Alex", + LastName = "Spiridonov", + Email = "a_spiridonov@abv.bg", + }; + } + #endregion + } +} |
