using Contracts.DTO; using Contracts.Repositories; using Contracts.SearchModels; using Contracts.ViewModels; using Moq; using Services.Domain; using Services.Support.Exceptions; namespace Services.Tests.Domain; public class UserServiceTests { [Fact] public async Task Delete_WhenUserExists_ThenDeleteUser_ReturnsUserViewModel() { var userRepoMock = new Mock(); userRepoMock.Setup(repo => repo.Delete(It.IsAny())).ReturnsAsync(new UserDto()); var userService = new UserService(userRepoMock.Object); var result = await userService.Delete(new UserSearch()); userRepoMock.Verify(repo => repo.Delete(It.IsAny()), Times.Once); Assert.NotNull(result); Assert.IsType(result); } [Fact] public void Delete_WhenUserNotExists_ThenThrowsUserNotFoundException() { var userRepoMock = new Mock(); userRepoMock.Setup(repo => repo.Delete(It.IsAny())).ReturnsAsync((UserDto?)null); var userService = new UserService(userRepoMock.Object); Assert.ThrowsAsync(() => userService.Delete(new UserSearch())); } [Fact] public async Task Update_WhenUserExists_ThenUpdateUser_ReturnsUserViewModel() { var userRepoMock = new Mock(); userRepoMock.Setup(repo => repo.Update(It.IsAny())).ReturnsAsync(new UserDto()); var userService = new UserService(userRepoMock.Object); var result = await userService.UpdateUserData(new UserDto()); userRepoMock.Verify(repo => repo.Update(It.IsAny()), Times.Once); Assert.NotNull(result); Assert.IsType(result); } [Fact] public void Update_WhenUserNotFound_ThenThrowsUserNotFoundException() { var userRepoMock = new Mock(); userRepoMock.Setup(repo => repo.Update(It.IsAny())).ReturnsAsync((UserDto?)null); var userService = new UserService(userRepoMock.Object); Assert.ThrowsAsync(() => userService.UpdateUserData(new UserDto())); } [Fact] public async Task GetDetails_ReturnsUserViewModel() { var userRepoMock = new Mock(); userRepoMock.Setup(repo => repo.Get(It.IsAny())).ReturnsAsync(new UserDto()); var userService = new UserService(userRepoMock.Object); var result = await userService.GetDetails(new UserSearch()); userRepoMock.Verify(repo => repo.Get(It.IsAny()), Times.Once); Assert.NotNull(result); Assert.IsType(result); } }