diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllMainTeamQueryTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllMainTeamQueryTests.cs new file mode 100644 index 0000000..b454e23 --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllMainTeamQueryTests.cs @@ -0,0 +1,68 @@ +using AutoMapper; +using FluentAssertions; +using Microsoft.EntityFrameworkCore.Query; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.GetAll; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using System.Linq.Expressions; +using Xunit; + +namespace Streetcode.XUnitTest.MediatR.Team.GetAll; + +public class GetAllMainTeamHandlerTests +{ + private readonly Mock _mockRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly GetAllMainTeamHandler _handler; + + public GetAllMainTeamHandlerTests() + { + _mockRepo = new Mock(); + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }).CreateMapper(); + _mockLogger = new Mock(); + _handler = new GetAllMainTeamHandler(_mockRepo.Object, _mapper, _mockLogger.Object); + } + + [Fact] + public async Task Handle_ReturnsOkResult_WhenMainTeamExists() + { + var mainTeamEntities = new List + { + new TeamMember { Id = 1, FirstName = "John", LastName = "Doe", IsMain = true }, + new TeamMember { Id = 2, FirstName = "Jane", LastName = "Smith", IsMain = true } + }; + var mainTeamDTOs = mainTeamEntities.Select(tm => this._mapper.Map(tm)).ToList(); + + _mockRepo.Setup( + repo => repo.TeamRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync(mainTeamEntities); + + var result = await _handler.Handle(new GetAllMainTeamQuery(), CancellationToken.None); + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeEquivalentTo(mainTeamDTOs); + } + + [Fact] + public async Task Handle_ReturnsFailResult_WhenNoMainTeamExists() + { + _mockRepo.Setup( + repo => repo.TeamRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync((IEnumerable)null); + var result = await _handler.Handle(new GetAllMainTeamQuery(), CancellationToken.None); + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Cannot find any team"); + } +} \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllTeamHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllTeamHandlerTests.cs new file mode 100644 index 0000000..78cb81b --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetAllTeamHandlerTests.cs @@ -0,0 +1,85 @@ +using AutoMapper; +using FluentAssertions; +using Microsoft.EntityFrameworkCore.Query; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.GetAll; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.DAL.Repositories.Interfaces.Team; +using System.Linq.Expressions; +using Xunit; + +namespace Streetcode.XUnitTest.MediatR.Team.GetAll; + +public class GetAllTeamHandlerTests +{ + private readonly Mock _mockRepo; + private readonly Mock _mockTeamRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly GetAllTeamHandler _handler; + + public GetAllTeamHandlerTests() + { + _mockRepo = new Mock(); + _mockTeamRepo = new Mock(); + + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }).CreateMapper(); + + _mockLogger = new Mock(); + + _mockRepo.Setup(x => x.TeamRepository).Returns(_mockTeamRepo.Object); + _handler = new GetAllTeamHandler(_mockRepo.Object, _mapper, _mockLogger.Object); + } + + [Fact] + public async Task Handle_ReturnsOkResult_WhenTeamExists() + { + var teamEntities = new List + { + new TeamMember { Id = 1, FirstName = "John", LastName = "Doe" }, + new TeamMember { Id = 2, FirstName = "Jane", LastName = "Smith" } + }; + var teamDTOs = new List + { + this._mapper.Map(teamEntities.ElementAt(0)), + this._mapper.Map(teamEntities.ElementAt(1)), + }; + + _mockTeamRepo.Setup( + repo => repo.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync(teamEntities); + + var query = new GetAllTeamQuery(); + + var result = await _handler.Handle(query, CancellationToken.None); + + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeEquivalentTo(teamDTOs); + } + + [Fact] + public async Task Handle_ReturnsFailResult_WhenNoTeamExists() + { + _mockTeamRepo.Setup( + repo => repo.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync((IEnumerable)null); + var query = new GetAllTeamQuery(); + + var result = await _handler.Handle(query, CancellationToken.None); + + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Cannot find any team"); + } +} \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetByIdTeamHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetByIdTeamHandlerTests.cs new file mode 100644 index 0000000..46d0684 --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/GetByIdTeamHandlerTests.cs @@ -0,0 +1,68 @@ +using AutoMapper; +using FluentAssertions; +using Microsoft.EntityFrameworkCore.Query; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.GetAll; +using Streetcode.BLL.MediatR.Team.GetById; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.DAL.Repositories.Interfaces.Team; +using System.Linq.Expressions; +using Xunit; + +namespace Streetcode.XUnitTest.BLL.MediatR.Team +{ + public class GetByIdTeamHandlerTests + { + private readonly Mock _mockRepo; + private readonly Mock _mockTeamRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly GetByIdTeamHandler _handler; + public GetByIdTeamHandlerTests() + { + _mockRepo = new Mock(); + _mockTeamRepo = new Mock(); + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }).CreateMapper(); + _mockLogger = new Mock(); + _mockRepo.Setup(x => x.TeamRepository).Returns(_mockTeamRepo.Object); + _handler = new GetByIdTeamHandler(_mockRepo.Object, _mapper, _mockLogger.Object); + } + + + [Fact] + public async Task Handle_ReturnsOkResult_WhenTeamExists() + { + var teamEntity = new TeamMember { Id = 1, FirstName = "John", LastName = "Doe" }; + var teamDTO = this._mapper.Map(teamEntity); + _mockTeamRepo.Setup( + repo => repo.GetSingleOrDefaultAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync(teamEntity); + var result = await _handler.Handle(new GetByIdTeamQuery(1), CancellationToken.None); + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeEquivalentTo(teamDTO); + } + + [Fact] + public async Task Handle_ReturnsFailResult_WhenTeamDoesNotExist() + { + _mockTeamRepo.Setup( + repo => repo.GetSingleOrDefaultAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + ) + ).ReturnsAsync((TeamMember)null); + var result = await _handler.Handle(new GetByIdTeamQuery(1), CancellationToken.None); + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message.Contains("Cannot find")); + } + } +} diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/CreatePositionHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/CreatePositionHandlerTests.cs new file mode 100644 index 0000000..48f2a4e --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/CreatePositionHandlerTests.cs @@ -0,0 +1,75 @@ +using AutoMapper; +using FluentAssertions; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.Create; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.DAL.Repositories.Interfaces.Team; +using Xunit; + +namespace Streetcode.XUnitTest.BLL.MediatR.Team.Position +{ + public class CreatePositionHandlerTests + { + private readonly Mock _mockRepo; + private readonly Mock _mockTeamRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly CreatePositionHandler _handler; + + public CreatePositionHandlerTests() + { + _mockRepo = new Mock(); + _mockTeamRepo = new Mock(); + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + cfg.CreateMap(); + }).CreateMapper(); + _mockLogger = new Mock(); + _mockRepo.Setup(x => x.TeamRepository).Returns(_mockTeamRepo.Object); + _handler = new CreatePositionHandler(_mapper, _mockRepo.Object, _mockLogger.Object); + } + + [Fact] + public async Task Handle_ShouldCreatePosition_WhenDataIsValid() + { + var positionDTO = new PositionDTO { Position = "Developer" }; + var positionEntity = new Positions { Id = 1, Position = "Developer" }; + + _mockRepo.Setup(repo => repo.PositionRepository.CreateAsync(It.IsAny())) + .ReturnsAsync(positionEntity); + + _mockRepo.Setup(repo => repo.SaveChanges()).Returns(1); + + var result = await _handler.Handle(new CreatePositionQuery(positionDTO), CancellationToken.None); + + result.IsSuccess.Should().BeTrue(); + result.Value.Should().NotBeNull(); + result.Value.Position.Should().Be(positionDTO.Position); + + _mockRepo.Verify(repo => repo.SaveChanges(), Times.Once); + } + + [Fact] + public async Task Handle_ShouldReturnFailure_WhenSaveChangesThrowsException() + { + + var positionDTO = new PositionDTO { Position = "Developer" }; + var positionEntity = new Positions { Id = 1, Position = "Developer" }; + _mockRepo.Setup(repo => repo.PositionRepository.CreateAsync(It.IsAny())) + .ReturnsAsync(positionEntity); + + _mockRepo.Setup(repo => repo.SaveChanges()).Throws(new Exception("Database error")); + + var result = await _handler.Handle(new CreatePositionQuery(positionDTO), CancellationToken.None); + + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Database error"); + + _mockRepo.Verify(repo => repo.SaveChanges(), Times.Once); + } + } +} \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/GetAllPositionsHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/GetAllPositionsHandlerTests.cs new file mode 100644 index 0000000..cf3ca69 --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/Position/GetAllPositionsHandlerTests.cs @@ -0,0 +1,74 @@ +using AutoMapper; +using FluentAssertions; +using Microsoft.EntityFrameworkCore.Query; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.Position.GetAll; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.DAL.Repositories.Interfaces.Team; +using System.Linq.Expressions; +using Xunit; + +namespace Streetcode.XUnitTest.BLL.MediatR.Team.Position +{ + public class GetAllPositionsHandlerTests + { + private readonly Mock _mockRepo; + private readonly Mock _mockPositionRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly GetAllPositionsHandler _handler; + + public GetAllPositionsHandlerTests() + { + _mockRepo = new Mock(); + _mockPositionRepo = new Mock(); + + _mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }).CreateMapper(); + + _mockLogger = new Mock(); + + _mockRepo.Setup(x => x.PositionRepository).Returns(_mockPositionRepo.Object); + + _handler = new GetAllPositionsHandler(_mockRepo.Object, _mapper, _mockLogger.Object); + } + + [Fact] + public async Task Handle_ShouldReturnPositions_WhenPositionsExist() + { + var positions = new List + { + new Positions { Id = 1, Position = "Position 1" }, + new Positions { Id = 2, Position = "Position 2" } + }; + + _mockPositionRepo.Setup(repo => repo.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + )).ReturnsAsync(positions); + + var result = await _handler.Handle(new GetAllPositionsQuery(), CancellationToken.None); + + result.IsSuccess.Should().BeTrue(); + result.Value.Should().HaveCount(2); + result.Value.Should().BeEquivalentTo(_mapper.Map>(positions)); + } + + [Fact] + public async Task Handle_ShouldReturnFailure_WhenNoPositionsExist() + { + _mockPositionRepo.Setup(repo => repo.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>() + )).ReturnsAsync((IEnumerable)null); + var result = await _handler.Handle(new GetAllPositionsQuery(), CancellationToken.None); + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Cannot find any positions"); + } + } +} \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/CreateTeamLinkHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/CreateTeamLinkHandlerTests.cs new file mode 100644 index 0000000..b8d80c0 --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/CreateTeamLinkHandlerTests.cs @@ -0,0 +1,54 @@ +using AutoMapper; +using FluentAssertions; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.TeamMembersLinks.Create; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Xunit; + +namespace Streetcode.XUnitTest.BLL.MediatR.Team.TeamMemberLinks +{ + public class CreateTeamLinkHandlerTests + { + private readonly Mock _mockRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly CreateTeamLinkHandler _handler; + + public CreateTeamLinkHandlerTests() + { + _mockRepo = new Mock(); + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + cfg.CreateMap(); + }).CreateMapper(); + _mockLogger = new Mock(); + _handler = new CreateTeamLinkHandler(_mapper, _mockRepo.Object, _mockLogger.Object); + } + + [Fact] + public async Task Handle_ReturnsOkResult_WhenTeamLinkIsCreated() + { + var teamLinkDTO = new TeamMemberLinkDTO { Id = 1, TargetUrl = "http://example.com", TeamMemberId = 1 }; + var teamLinkEntity = this._mapper.Map(teamLinkDTO); + _mockRepo.Setup(repo => repo.TeamLinkRepository.Create(It.IsAny())).Returns(teamLinkEntity); + _mockRepo.Setup(repo => repo.SaveChangesAsync()).ReturnsAsync(1); + var result = await _handler.Handle(new CreateTeamLinkQuery(teamLinkDTO), CancellationToken.None); + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeEquivalentTo(teamLinkDTO); + } + + [Fact] + public async Task Handle_ReturnsFailResult_WhenTeamLinkCreationFails() + { + var teamLinkDTO = new TeamMemberLinkDTO { Id = 1, TargetUrl = "http://example.com", TeamMemberId = 1 }; + _mockRepo.Setup(repo => repo.TeamLinkRepository.Create(It.IsAny())).Returns((TeamMemberLink)null); + var result = await _handler.Handle(new CreateTeamLinkQuery(teamLinkDTO), CancellationToken.None); + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Cannot create team link"); + } + } +} diff --git a/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/GetAllTeamLinkHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/GetAllTeamLinkHandlerTests.cs new file mode 100644 index 0000000..cd7df37 --- /dev/null +++ b/Streetcode/Streetcode.XUnitTest/BLL/MediatR/Team/TeamMemberLinks/GetAllTeamLinkHandlerTests.cs @@ -0,0 +1,53 @@ +using AutoMapper; +using FluentAssertions; +using Moq; +using Streetcode.BLL.DTO.Team; +using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.MediatR.Team.TeamMembersLinks.Create; +using Streetcode.BLL.MediatR.Team.TeamMembersLinks.GetAll; +using Streetcode.DAL.Entities.Team; +using Streetcode.DAL.Repositories.Interfaces.Base; +using Xunit; + +namespace Streetcode.XUnitTest.BLL.MediatR.Team.TeamMemberLinks +{ + public class GetAllTeamLinkHandlerTests + { + private readonly Mock _mockRepo; + private readonly IMapper _mapper; + private readonly Mock _mockLogger; + private readonly GetAllTeamLinkHandler _handler; + public GetAllTeamLinkHandlerTests() + { + _mockRepo = new Mock(); + this._mapper = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }).CreateMapper(); + _mockLogger = new Mock(); + _handler = new GetAllTeamLinkHandler(_mockRepo.Object, _mapper, _mockLogger.Object); + } + [Fact] + public async Task Handle_ReturnsOkResult_WhenTeamLinksExist() + { + var teamLinkEntities = new List + { + new TeamMemberLink { Id = 1, TargetUrl = "http://example.com", TeamMemberId = 1 }, + new TeamMemberLink { Id = 2, TargetUrl = "http://example.org", TeamMemberId = 2 } + }; + var teamLinkDTOs = teamLinkEntities.Select(tl => this._mapper.Map(tl)).ToList(); + _mockRepo.Setup(repo => repo.TeamLinkRepository.GetAllAsync()).ReturnsAsync(teamLinkEntities); + var result = await _handler.Handle(new GetAllTeamLinkQuery(), CancellationToken.None); + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeEquivalentTo(teamLinkDTOs); + } + [Fact] + public async Task Handle_ReturnsFailResult_WhenNoTeamLinksExist() + { + _mockRepo.Setup(repo => repo.TeamLinkRepository.GetAllAsync()).ReturnsAsync((IEnumerable)null); + var result = await _handler.Handle(new GetAllTeamLinkQuery(), CancellationToken.None); + result.IsFailed.Should().BeTrue(); + result.Errors.Should().ContainSingle(e => e.Message == "Cannot find any team links"); + } + } +} diff --git a/Streetcode/Streetcode.XUnitTest/Streetcode.XUnitTest.csproj b/Streetcode/Streetcode.XUnitTest/Streetcode.XUnitTest.csproj index b025524..38bb721 100644 --- a/Streetcode/Streetcode.XUnitTest/Streetcode.XUnitTest.csproj +++ b/Streetcode/Streetcode.XUnitTest/Streetcode.XUnitTest.csproj @@ -7,6 +7,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -15,6 +16,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + + @@ -23,7 +26,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive