diff --git a/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersDto.cs b/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersDto.cs new file mode 100644 index 000000000..dc1f6eca4 --- /dev/null +++ b/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersDto.cs @@ -0,0 +1,8 @@ +namespace Streetcode.BLL.DTO.Partners; + +public class GetAllPartnersDto +{ + public int TotalAmount { get; set; } + + public IEnumerable Partners { get; set; } = new List(); +} diff --git a/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersResponseDTO.cs b/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersResponseDTO.cs deleted file mode 100644 index 375b7e47e..000000000 --- a/Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersResponseDTO.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Streetcode.BLL.DTO.Partners -{ - public class GetAllPartnersResponseDTO - { - public int TotalAmount { get; set; } - public IEnumerable Partners { get; set; } = new List(); - } -} diff --git a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerCreateUpdateDto.cs b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerCreateUpdateDto.cs index 961d5754b..6fdffbca7 100644 --- a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerCreateUpdateDto.cs +++ b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerCreateUpdateDto.cs @@ -1,5 +1,4 @@ -using System.ComponentModel.DataAnnotations; -using Streetcode.BLL.DTO.Partners.Create; +using Streetcode.BLL.DTO.Partners.Create; using Streetcode.BLL.DTO.Streetcode; namespace Streetcode.BLL.DTO.Partners; @@ -7,12 +6,20 @@ namespace Streetcode.BLL.DTO.Partners; public abstract class PartnerCreateUpdateDto { public bool IsKeyPartner { get; set; } + public bool IsVisibleEverywhere { get; set; } + public string Title { get; set; } = null!; + public string? Description { get; set; } + public string? TargetUrl { get; set; } + public int LogoId { get; set; } + public string? UrlTitle { get; set; } + public List? PartnerSourceLinks { get; set; } - public List Streetcodes { get; set; } = new List(); -} \ No newline at end of file + + public List Streetcodes { get; set; } = new List(); +} diff --git a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs similarity index 71% rename from Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs rename to Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs index 9151ba484..97168fdf0 100644 --- a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs +++ b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs @@ -1,17 +1,28 @@ using Streetcode.BLL.DTO.AdditionalContent; +using Streetcode.BLL.DTO.Media.Images; using Streetcode.BLL.DTO.Streetcode; namespace Streetcode.BLL.DTO.Partners; -public class PartnerDTO +public class PartnerDto { public int Id { get; set; } + public bool IsKeyPartner { get; set; } + public bool IsVisibleEverywhere { get; set; } + public string Title { get; set; } = null!; + public string? Description { get; set; } + public int LogoId { get; set; } + public UrlDTO? TargetUrl { get; set; } + public List PartnerSourceLinks { get; set; } = new List(); - public List Streetcodes { get; set; } = new List(); -} \ No newline at end of file + + public List Streetcodes { get; set; } = new List(); + + public ImageDTO? Logo { get; set; } +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/GetAllStreetcodesShortDto.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/GetAllStreetcodesShortDto.cs new file mode 100644 index 000000000..6f1ce510a --- /dev/null +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/GetAllStreetcodesShortDto.cs @@ -0,0 +1,8 @@ +namespace Streetcode.BLL.DTO.Streetcode; + +public class GetAllStreetcodesShortDto +{ + public int TotalAmount { get; set; } + + public IEnumerable StreetcodesShort { get; set; } = new List(); +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDTO.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDTO.cs deleted file mode 100644 index 2be4c2173..000000000 --- a/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDTO.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Streetcode.BLL.DTO.Streetcode -{ - public class StreetcodeShortDTO - { - public int Id { get; set; } - public string Title { get; set; } = null!; - } -} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDto.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDto.cs new file mode 100644 index 000000000..b3e138ef4 --- /dev/null +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDto.cs @@ -0,0 +1,8 @@ +namespace Streetcode.BLL.DTO.Streetcode; + +public class StreetcodeShortDto +{ + public int Id { get; set; } + + public string Title { get; set; } = null!; +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/GetAllTermsResponseDto.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/GetAllTermsResponseDto.cs index 1bce4b248..ea83fb0d4 100644 --- a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/GetAllTermsResponseDto.cs +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/GetAllTermsResponseDto.cs @@ -1,8 +1,9 @@ +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.DTO.Streetcode.TextContent { public class GetAllTermsResponseDto { public int TotalAmount { get; set; } - public IEnumerable Terms { get; set; } = new List(); + public IEnumerable Terms { get; set; } = new List(); } } diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/GetAllTermsDto.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/GetAllTermsDto.cs new file mode 100644 index 000000000..7e55639cd --- /dev/null +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/GetAllTermsDto.cs @@ -0,0 +1,8 @@ +namespace Streetcode.BLL.DTO.Streetcode.TextContent.Term; + +public class GetAllTermsDto +{ + public int TotalAmount { get; set; } + + public IEnumerable Terms { get; set; } = new List(); +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermCreateDto.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermCreateDto.cs new file mode 100644 index 000000000..1ae472be2 --- /dev/null +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermCreateDto.cs @@ -0,0 +1,8 @@ +namespace Streetcode.BLL.DTO.Streetcode.TextContent.Term; + +public class TermCreateDto +{ + public string Title { get; set; } = null!; + + public string Description { get; set; } = null!; +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermDTO.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermDto.cs similarity index 61% rename from Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermDTO.cs rename to Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermDto.cs index a5a53b524..7213af346 100644 --- a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermDTO.cs +++ b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermDto.cs @@ -1,8 +1,10 @@ -namespace Streetcode.BLL.DTO.Streetcode.TextContent; +namespace Streetcode.BLL.DTO.Streetcode.TextContent.Term; -public class TermDTO +public class TermDto { public int Id { get; set; } + public string Title { get; set; } = null!; + public string Description { get; set; } = null!; -} \ No newline at end of file +} diff --git a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermCreateDTO.cs b/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermCreateDTO.cs deleted file mode 100644 index 0cc8dd99b..000000000 --- a/Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermCreateDTO.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Streetcode.BLL.DTO.Streetcode.TextContent -{ - public class TermCreateDTO - { - public string Title { get; set; } = null!; - public string Description { get; set; } = null!; - } -} diff --git a/Streetcode/Streetcode.BLL/Mapping/Partners/PartnerProfile.cs b/Streetcode/Streetcode.BLL/Mapping/Partners/PartnerProfile.cs index cff886d38..62e2a6d76 100644 --- a/Streetcode/Streetcode.BLL/Mapping/Partners/PartnerProfile.cs +++ b/Streetcode/Streetcode.BLL/Mapping/Partners/PartnerProfile.cs @@ -9,7 +9,7 @@ public class PartnerProfile : Profile { public PartnerProfile() { - CreateMap() + CreateMap() .ForPath(dto => dto.TargetUrl!.Title, conf => conf.MapFrom(ol => ol.UrlTitle)) .ForPath(dto => dto.TargetUrl!.Href, conf => conf.MapFrom(ol => ol.TargetUrl)); CreateMap().ReverseMap(); diff --git a/Streetcode/Streetcode.BLL/Mapping/Streetcode/StreetcodeProfile.cs b/Streetcode/Streetcode.BLL/Mapping/Streetcode/StreetcodeProfile.cs index c1df1f03f..3a435afd6 100644 --- a/Streetcode/Streetcode.BLL/Mapping/Streetcode/StreetcodeProfile.cs +++ b/Streetcode/Streetcode.BLL/Mapping/Streetcode/StreetcodeProfile.cs @@ -17,7 +17,7 @@ public StreetcodeProfile() .ForMember(x => x.StreetcodeType, conf => conf.MapFrom(s => GetStreetcodeType(s))) .ForMember(x => x.CreatedBy, conf => conf.MapFrom()) .ReverseMap(); - CreateMap().ReverseMap(); + CreateMap().ReverseMap(); CreateMap() .ForPath(dto => dto.Text, conf => conf .MapFrom(e => e.Text!.Title)) diff --git a/Streetcode/Streetcode.BLL/Mapping/Streetcode/TextContent/TermProfile.cs b/Streetcode/Streetcode.BLL/Mapping/Streetcode/TextContent/TermProfile.cs index 0f6675751..88c259b47 100644 --- a/Streetcode/Streetcode.BLL/Mapping/Streetcode/TextContent/TermProfile.cs +++ b/Streetcode/Streetcode.BLL/Mapping/Streetcode/TextContent/TermProfile.cs @@ -1,5 +1,5 @@ using AutoMapper; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Entities.Streetcode.TextContent; namespace Streetcode.BLL.Mapping.Streetcode.TextContent; @@ -8,7 +8,7 @@ public class TermProfile : Profile { public TermProfile() { - CreateMap().ReverseMap(); - CreateMap(); + CreateMap().ReverseMap(); + CreateMap(); } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerHandler.cs index 05900b837..afd2d972d 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerHandler.cs @@ -2,16 +2,14 @@ using AutoMapper; using FluentResults; using MediatR; -using Microsoft.Extensions.Localization; using Streetcode.BLL.DTO.Partners; using Streetcode.BLL.Interfaces.Logging; -using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; using Streetcode.DAL.Repositories.Interfaces.Base; namespace Streetcode.BLL.MediatR.Partners.Create { - public class CreatePartnerHandler : IRequestHandler> + public class CreatePartnerHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -29,7 +27,7 @@ public CreatePartnerHandler( // If you use Rider instead of Visual Studio, for example, "SuppressMessage" attribute suppresses PossibleMultipleEnumeration warning [SuppressMessage("ReSharper", "PossibleMultipleEnumeration", Justification = "Here is no sense to do materialization of query because of nested ToListAsync method in GetAllAsync method")] - public async Task> Handle(CreatePartnerQuery request, CancellationToken cancellationToken) + public async Task> Handle(CreatePartnerQuery request, CancellationToken cancellationToken) { var newPartner = _mapper.Map(request.newPartner); newPartner.Streetcodes.Clear(); @@ -50,7 +48,7 @@ public async Task> Handle(CreatePartnerQuery request, Cancell newPartner.Streetcodes.AddRange(existingStreetcodes); await _repositoryWrapper.SaveChangesAsync(); - return Result.Ok(_mapper.Map(newPartner)); + return Result.Ok(_mapper.Map(newPartner)); } catch(Exception ex) { diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerQuery.cs index 1cdd744d5..c228f9d06 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Create/CreatePartnerQuery.cs @@ -5,5 +5,5 @@ namespace Streetcode.BLL.MediatR.Partners.Create { public record CreatePartnerQuery(CreatePartnerDTO newPartner) - : IRequest>; + : IRequest>; } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerHandler.cs index a32d1f96f..cd50de6d7 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerHandler.cs @@ -9,7 +9,7 @@ namespace Streetcode.BLL.MediatR.Partners.Delete { - public class DeletePartnerHandler : IRequestHandler> + public class DeletePartnerHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -24,7 +24,7 @@ public DeletePartnerHandler(IRepositoryWrapper repositoryWrapper, IMapper mapper _stringLocalizerNo = stringLocalizerNo; } - public async Task> Handle(DeletePartnerQuery request, CancellationToken cancellationToken) + public async Task> Handle(DeletePartnerQuery request, CancellationToken cancellationToken) { var partner = await _repositoryWrapper.PartnersRepository.GetFirstOrDefaultAsync(p => p.Id == request.id); if (partner == null) @@ -38,8 +38,8 @@ public async Task> Handle(DeletePartnerQuery request, Cancell _repositoryWrapper.PartnersRepository.Delete(partner); try { - await _repositoryWrapper.SaveChangesAsync(); - return Result.Ok(_mapper.Map(partner)); + _repositoryWrapper.SaveChanges(); + return Result.Ok(_mapper.Map(partner)); } catch(Exception ex) { diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerQuery.cs index 90eee8d6b..2fbffb48b 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Delete/DeletePartnerQuery.cs @@ -5,5 +5,5 @@ namespace Streetcode.BLL.MediatR.Partners.Delete { public record DeletePartnerQuery(int id) - : IRequest>; + : IRequest>; } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs index 3f2cac762..f24aa8870 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs @@ -1,101 +1,93 @@ using AutoMapper; using FluentResults; using MediatR; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Localization; +using Microsoft.EntityFrameworkCore; using Streetcode.BLL.DTO.Partners; using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.Interfaces.BlobStorage; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Repositories.Interfaces.Base; -using Streetcode.DAL.Entities.News; -using Streetcode.DAL.Helpers; using Streetcode.DAL.Entities.Partners; -using Streetcode.BLL.DTO.News; -using Microsoft.EntityFrameworkCore.Query; -namespace Streetcode.BLL.MediatR.Partners.GetAll +namespace Streetcode.BLL.MediatR.Partners.GetAll; + +public class GetAllPartnersHandler : IRequestHandler> { - public class GetAllPartnersHandler : IRequestHandler> + private readonly IMapper _mapper; + private readonly IRepositoryWrapper _repositoryWrapper; + private readonly ILoggerService _logger; + private readonly IStringLocalizer _stringLocalizeCannotFind; + private readonly IBlobService _blobService; + + public GetAllPartnersHandler( + IRepositoryWrapper repositoryWrapper, + IMapper mapper, + ILoggerService logger, + IStringLocalizer stringLocalizeCannotFind, + IBlobService blobService) + { + _repositoryWrapper = repositoryWrapper; + _mapper = mapper; + _logger = logger; + _stringLocalizeCannotFind = stringLocalizeCannotFind; + _blobService = blobService; + } + + public async Task> Handle(GetAllPartnersQuery request, CancellationToken cancellationToken) { - private readonly IMapper _mapper; - private readonly IRepositoryWrapper _repositoryWrapper; - private readonly ILoggerService _logger; - private readonly IStringLocalizer _stringLocalizeCannotFind; + var searchTitle = request.title?.Trim().ToLower(); + int page = request.page ?? 1; + int pageSize = request.pageSize ?? 10; + var partners = await _repositoryWrapper.PartnersRepository + .GetAllAsync(include: partnersCollection => partnersCollection + .Include(pl => pl.PartnerSourceLinks) + .Include(p => p.Streetcodes) + .Include(p => p.Logo)); - public GetAllPartnersHandler( - IRepositoryWrapper repositoryWrapper, - IMapper mapper, - ILoggerService logger, - IStringLocalizer stringLocalizeCannotFind) + if (!string.IsNullOrWhiteSpace(searchTitle)) { - _repositoryWrapper = repositoryWrapper; - _mapper = mapper; - _logger = logger; - _stringLocalizeCannotFind = stringLocalizeCannotFind; + partners = partners.Where(context => + !string.IsNullOrWhiteSpace(context.Title) && + context.Title.ToLower().Contains(searchTitle)); } - public async Task> Handle(GetAllPartnersQuery request, CancellationToken cancellationToken) + if (request.IsKeyPartner.HasValue) { - if (request == null) - { - return Result.Fail(new Error("Request is null")); - } + partners = partners.Where(context => + context.IsKeyPartner == request.IsKeyPartner.Value); + page = 1; + } - var allPartners = await _repositoryWrapper.PartnersRepository.GetAllAsync( - predicate: null, - include: (Func, IIncludableQueryable>?)(partnersCollection => - partnersCollection - .Include(pl => pl.PartnerSourceLinks) - .Include(p => p.Streetcodes))); + var totalAmount = partners.Count(); + var paginatedPartners = partners + .Skip((page - 1) * pageSize) + .Take(pageSize) + .ToList(); - if (allPartners == null || !allPartners.Any()) - { - string errorMsg = _stringLocalizeCannotFind["CannotFindAnyPartners"].Value; - _logger.LogError(request, errorMsg); - return Result.Fail(new Error(errorMsg)); - } + var partnersDtos = MapToPartnerDtos(paginatedPartners); - if (!string.IsNullOrWhiteSpace(request.title)) - { - allPartners = allPartners - .Where(p => p.Title != null && p.Title.ToLower().Contains(request.title.ToLower())) - .ToList(); - } + var getAllPartnersResponseDTO = new GetAllPartnersDto + { + TotalAmount = totalAmount, + Partners = partnersDtos, + }; - if (request.IsKeyPartner.HasValue) - { - allPartners = allPartners - .Where(p => p.IsKeyPartner == request.IsKeyPartner.Value) - .ToList(); - } + return Result.Ok(getAllPartnersResponseDTO); + } - var totalCount = allPartners.Count(); + private IEnumerable MapToPartnerDtos(IEnumerable partnerEntities) + { + var partnerDtosList = _mapper.Map>(partnerEntities).ToList(); - if (totalCount == 0) + foreach (var partnerDto in partnerDtosList) + { + if (partnerDto.Logo is not null) { - var emptyResponse = new GetAllPartnersResponseDTO - { - TotalAmount = 0, - Partners = new List() - }; - return Result.Ok(emptyResponse); + partnerDto.Logo.Base64 = _blobService.FindFileInStorageAsBase64(partnerDto.Logo.BlobName); } - - var page = request.page ?? 1; - var pageSize = request.pageSize ?? 10; - - var paginatedPartners = allPartners - .Skip((page - 1) * pageSize) - .Take(pageSize) - .ToList(); - - var getAllPartnersResponseDTO = new GetAllPartnersResponseDTO - { - TotalAmount = totalCount, - Partners = _mapper.Map>(paginatedPartners) - }; - - return Result.Ok(getAllPartnersResponseDTO); } + + return partnerDtosList; } -} +} \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs index a5cb235f3..6aed7b1e7 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetAll; public record GetAllPartnersQuery(ushort? page = null, ushort? pageSize = null, string? title = null, bool? IsKeyPartner = null) - : IRequest>; + : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdHandler.cs index 4cec82535..151ecaf9a 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdHandler.cs @@ -10,7 +10,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetById; -public class GetPartnerByIdHandler : IRequestHandler> +public class GetPartnerByIdHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -25,7 +25,7 @@ public GetPartnerByIdHandler(IRepositoryWrapper repositoryWrapper, IMapper mappe _stringLocalizer = stringLocalizer; } - public async Task> Handle(GetPartnerByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetPartnerByIdQuery request, CancellationToken cancellationToken) { var partner = await _repositoryWrapper .PartnersRepository @@ -41,6 +41,6 @@ public async Task> Handle(GetPartnerByIdQuery request, Cancel return Result.Fail(new Error(errorMsg)); } - return Result.Ok(_mapper.Map(partner)); + return Result.Ok(_mapper.Map(partner)); } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdQuery.cs index ff7ed5150..41738a069 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetById/GetPartnerByIdQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetById; public record GetPartnerByIdQuery(int Id) - : IRequest>; + : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerHandler.cs index b6d04c728..7e3838720 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerHandler.cs @@ -10,7 +10,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetByIsKeyPartner; -public class GetPartnersByIsKeyPartnerHandler : IRequestHandler>> +public class GetPartnersByIsKeyPartnerHandler : IRequestHandler>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -25,7 +25,7 @@ public GetPartnersByIsKeyPartnerHandler(IRepositoryWrapper repositoryWrapper, IM _stringLocalizeCannotFind = stringLocalizeCannotFind; } - public async Task>> Handle(GetPartnersByIsKeyPartnerQuery request, CancellationToken cancellationToken) + public async Task>> Handle(GetPartnersByIsKeyPartnerQuery request, CancellationToken cancellationToken) { var partners = await _repositoryWrapper .PartnersRepository @@ -42,6 +42,6 @@ public async Task>> Handle(GetPartnersByIsKeyPart return Result.Fail(new Error(errorMessage)); } - return Result.Ok(_mapper.Map>(partners)); + return Result.Ok(_mapper.Map>(partners)); } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerQuery.cs index 1cf6272b1..8d27dd196 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByIsKeyPartner/GetPartnersByIsKeyPartnerQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetByIsKeyPartner; public record GetPartnersByIsKeyPartnerQuery(bool IsKeyPartner) - : IRequest>>; \ No newline at end of file + : IRequest>>; \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs index 92e892f23..2ef8d07e9 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs @@ -13,7 +13,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeId; -public class GetPartnersByStreetcodeIdHandler : IRequestHandler>> +public class GetPartnersByStreetcodeIdHandler : IRequestHandler>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -28,7 +28,7 @@ public GetPartnersByStreetcodeIdHandler(IMapper mapper, IRepositoryWrapper repos _stringLocalizerCannotFind = stringLocalizerCannotFind; } - public async Task>> Handle(GetPartnersByStreetcodeIdQuery request, CancellationToken cancellationToken) + public async Task>> Handle(GetPartnersByStreetcodeIdQuery request, CancellationToken cancellationToken) { Expression>? basePredicate = str => str.Id == request.StreetcodeId; var predicate = basePredicate.ExtendWithAccessPredicate(new StreetcodeAccessManager(), request.UserRole); @@ -51,9 +51,9 @@ public async Task>> Handle(GetPartnersByStreetcod { string message = "Returning empty enumerable of partners"; _logger.LogInformation(message); - return Result.Ok(Enumerable.Empty()); + return Result.Ok(Enumerable.Empty()); } - return Result.Ok(_mapper.Map>(partners)); + return Result.Ok(_mapper.Map>(partners)); } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs index cb4ab3455..93b7ccca6 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs @@ -6,4 +6,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeId; public record GetPartnersByStreetcodeIdQuery(int StreetcodeId, UserRole? UserRole) - : IRequest>>; + : IRequest>>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs index beeed0905..04033c78b 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs @@ -14,7 +14,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetToUpdateByStreetcodeId { - public class GetPartnersToUpdateByStreetcodeIdHandler : IRequestHandler>> + public class GetPartnersToUpdateByStreetcodeIdHandler : IRequestHandler>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -29,7 +29,7 @@ public GetPartnersToUpdateByStreetcodeIdHandler(IMapper mapper, IRepositoryWrapp _stringLocalizerCannotFind = stringLocalizerCannotFind; } - public async Task>> Handle(GetPartnersToUpdateByStreetcodeIdQuery request, CancellationToken cancellationToken) + public async Task>> Handle(GetPartnersToUpdateByStreetcodeIdQuery request, CancellationToken cancellationToken) { Expression>? basePredicate = str => str.Id == request.StreetcodeId; var predicate = basePredicate.ExtendWithAccessPredicate(new StreetcodeAccessManager(), request.UserRole); @@ -53,10 +53,10 @@ public async Task>> Handle(GetPartnersToUpdateByS { string message = "Returning empty enumerable of partners to update"; _logger.LogInformation(message); - return Result.Ok(Enumerable.Empty()); + return Result.Ok(Enumerable.Empty()); } - return Result.Ok(value: _mapper.Map>(partners)); + return Result.Ok(value: _mapper.Map>(partners)); } } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs index be31183ff..ca440f853 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs @@ -6,4 +6,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeIdToUpdate; public record class GetPartnersToUpdateByStreetcodeIdQuery(int StreetcodeId, UserRole? UserRole) - : IRequest>>; + : IRequest>>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs index 8d2787d99..da8f048b4 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs @@ -8,7 +8,7 @@ namespace Streetcode.BLL.MediatR.Partners.Update { - public class UpdatePartnerHandler : IRequestHandler> + public class UpdatePartnerHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -21,7 +21,7 @@ public UpdatePartnerHandler(IRepositoryWrapper repositoryWrapper, IMapper mapper _logger = logger; } - public async Task> Handle(UpdatePartnerQuery request, CancellationToken cancellationToken) + public async Task> Handle(UpdatePartnerQuery request, CancellationToken cancellationToken) { var partner = _mapper.Map(request.Partner); @@ -63,8 +63,8 @@ public async Task> Handle(UpdatePartnerQuery request, Cancell } } - await _repositoryWrapper.SaveChangesAsync(); - var dbo = _mapper.Map(partner); + _repositoryWrapper.SaveChanges(); + var dbo = _mapper.Map(partner); dbo.Streetcodes = request.Partner.Streetcodes; return Result.Ok(dbo); } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerQuery.cs index b7baf5fc8..df285d638 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerQuery.cs @@ -1,11 +1,10 @@ using FluentResults; using MediatR; using Streetcode.BLL.DTO.Partners; -using Streetcode.BLL.DTO.Partners.Create; using Streetcode.BLL.DTO.Partners.Update; namespace Streetcode.BLL.MediatR.Partners.Update { public record UpdatePartnerQuery(UpdatePartnerDTO Partner) - : IRequest>; + : IRequest>; } diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedHandler.cs index 24c24d821..8f04b10b5 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedHandler.cs @@ -11,7 +11,7 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllPublished; public class GetAllPublishedHandler : IRequestHandler>> + Result>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -30,7 +30,7 @@ public GetAllPublishedHandler( _stringLocalizerNo = stringLocalizerNo; } - public async Task>> Handle(GetAllPublishedQuery request, CancellationToken cancellationToken) + public async Task>> Handle(GetAllPublishedQuery request, CancellationToken cancellationToken) { var streetcodes = await _repositoryWrapper.StreetcodeRepository.GetAllAsync( predicate: sc => sc.Status == DAL.Enums.StreetcodeStatus.Published); @@ -42,6 +42,6 @@ public async Task>> Handle(GetAllPublishe return Result.Fail(errorMsg); } - return Result.Ok(_mapper.Map>(streetcodes)); + return Result.Ok(_mapper.Map>(streetcodes)); } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedQuery.cs index cd55703d0..3c21109c3 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllPublished/GetAllPublishedQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllPublished; public record GetAllPublishedQuery() - : IRequest>>; + : IRequest>>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs index 125b228f0..c2adbc01a 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs @@ -12,8 +12,8 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllShort; -public class GetAllStreetcodesShortHandler : IRequestHandler>> +public class GetAllStreetcodesShortHandler + : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -32,20 +32,27 @@ public GetAllStreetcodesShortHandler( _stringLocalizerNo = stringLocalizerNo; } - public async Task>> Handle(GetAllStreetcodesShortQuery request, CancellationToken cancellationToken) - { - Expression>? basePredicate = null; - var predicate = basePredicate.ExtendWithAccessPredicate(new StreetcodeAccessManager(), request.UserRole); - - var streetcodes = await _repositoryWrapper.StreetcodeRepository.GetAllAsync(predicate: predicate); + public async Task> Handle(GetAllStreetcodesShortQuery request, CancellationToken cancellationToken) + { + Expression>? basePredicate = null; + var predicate = basePredicate.ExtendWithAccessPredicate(new StreetcodeAccessManager(), request.UserRole); - if (streetcodes.Any()) - { - return Result.Ok(_mapper.Map>(streetcodes)); - } + var paginatedStreetcodesShort = _repositoryWrapper.StreetcodeRepository + .GetAllPaginated(request.page, request.pageSize, predicate: predicate); + if (!paginatedStreetcodesShort.Entities.Any()) + { var errorMsg = _stringLocalizerNo["NoStreetcodesExistNow"].Value; _logger.LogError(request, errorMsg); - return Result.Fail(errorMsg); + return Result.Fail(errorMsg); + } + + var resultDto = new GetAllStreetcodesShortDto + { + TotalAmount = paginatedStreetcodesShort.TotalItems, + StreetcodesShort = _mapper.Map>(paginatedStreetcodesShort.Entities), + }; + + return Result.Ok(resultDto); } } \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs index 5ab82856c..5be71dcec 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs @@ -5,5 +5,5 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllShort; -public record GetAllStreetcodesShortQuery(UserRole? UserRole) - : IRequest>>; \ No newline at end of file +public record GetAllStreetcodesShortQuery(UserRole? UserRole, ushort? page = null, ushort? pageSize = null) + : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs index 1273d7472..2cf6123c9 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs @@ -12,7 +12,7 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetShortById; -public class GetStreetcodeShortByIdHandler : IRequestHandler> +public class GetStreetcodeShortByIdHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repository; @@ -34,12 +34,12 @@ public GetStreetcodeShortByIdHandler( _stringLocalizerCannotFind = stringLocalizerCannotFind; } - public async Task> Handle(GetStreetcodeShortByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetStreetcodeShortByIdQuery request, CancellationToken cancellationToken) { Expression>? basePredicate = st => st.Id == request.Id; var predicate = basePredicate.ExtendWithAccessPredicate(new StreetcodeAccessManager(), request.UserRole); - var streetcode = await _repository.StreetcodeRepository.GetFirstOrDefaultAsync(predicate); + var streetcode = await _repository.StreetcodeRepository.GetFirstOrDefaultAsync(st => st.Id == request.Id); if (streetcode == null) { @@ -48,7 +48,7 @@ public async Task> Handle(GetStreetcodeShortByIdQuery return Result.Fail(new Error(errorMsg)); } - var streetcodeShortDto = _mapper.Map(streetcode); + var streetcodeShortDto = _mapper.Map(streetcode); if (streetcodeShortDto == null) { diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs index 8b5781638..ba044529a 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs @@ -6,4 +6,4 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetShortById; public record GetStreetcodeShortByIdQuery(int Id, UserRole? UserRole) - : IRequest>; \ No newline at end of file + : IRequest>; \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermCommand.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermCommand.cs index 2b7c54bc3..e0b29e794 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermCommand.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermCommand.cs @@ -1,8 +1,8 @@ using FluentResults; using MediatR; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.MediatR.Streetcode.Term.Create; -public record CreateTermCommand(TermCreateDTO Term) - : IRequest>; +public record CreateTermCommand(TermCreateDto Term) + : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermHandler.cs index 8a21c8c78..8be353c01 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Create/CreateTermHandler.cs @@ -2,7 +2,7 @@ using FluentResults; using MediatR; using Microsoft.Extensions.Localization; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Repositories.Interfaces.Base; @@ -10,7 +10,7 @@ namespace Streetcode.BLL.MediatR.Streetcode.Term.Create; -public class CreateTermHandler : IRequestHandler> +public class CreateTermHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repository; @@ -32,7 +32,7 @@ public CreateTermHandler( _stringLocalizerCannotConvert = stringLocalizerCannotConvert; } - public async Task> Handle(CreateTermCommand request, CancellationToken cancellationToken) + public async Task> Handle(CreateTermCommand request, CancellationToken cancellationToken) { var term = _mapper.Map(request.Term); @@ -53,7 +53,7 @@ public async Task> Handle(CreateTermCommand request, Cancellatio return Result.Fail(new Error(errorMessage)); } - var createdTermDto = _mapper.Map(createdTerm); + var createdTermDto = _mapper.Map(createdTerm); if (createdTermDto is null) { diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs index 5b57ed52f..e48223bfe 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs @@ -3,54 +3,52 @@ using FluentResults; using MediatR; using Microsoft.EntityFrameworkCore.Query; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.BLL.DTO.Streetcode.TextContent; -namespace Streetcode.BLL.MediatR.Streetcode.Term.GetAll +namespace Streetcode.BLL.MediatR.Streetcode.Term.GetAll; + +public class GetAllTermsHandler : IRequestHandler> { - public class GetAllTermsHandler : IRequestHandler> - { - private readonly IMapper _mapper; - private readonly IRepositoryWrapper _repositoryWrapper; + private readonly IMapper _mapper; + private readonly IRepositoryWrapper _repositoryWrapper; - public GetAllTermsHandler(IRepositoryWrapper repositoryWrapper, IMapper mapper) - { - _repositoryWrapper = repositoryWrapper; - _mapper = mapper; - } + public GetAllTermsHandler(IRepositoryWrapper repositoryWrapper, IMapper mapper) + { + _repositoryWrapper = repositoryWrapper; + _mapper = mapper; + } - public async Task> Handle(GetAllTermsQuery request, CancellationToken cancellationToken) - { - var allTerms = await _repositoryWrapper.TermRepository.GetAllAsync( - predicate: null, - include: null); + public async Task> Handle(GetAllTermsQuery request, CancellationToken cancellationToken) + { + var allTerms = await _repositoryWrapper.TermRepository.GetAllAsync(predicate: null, include: null); - var filteredTerms = allTerms.ToList(); + var filteredTerms = allTerms; - if (!string.IsNullOrWhiteSpace(request.title)) - { - filteredTerms = filteredTerms - .Where(t => t.Title != null && t.Title.ToLower().Contains(request.title.Trim().ToLower())) - .ToList(); - } + if (!string.IsNullOrWhiteSpace(request.title)) + { + filteredTerms = filteredTerms + .Where(t => t.Title != null && t.Title.ToLower().Contains(request.title.Trim().ToLower())) + .ToList(); + } - var totalAmount = filteredTerms.Count; + var totalAmount = filteredTerms.Count(); - var paginatedTerms = filteredTerms - .Skip((request.page - 1) * request.pageSize) - .Take(request.pageSize) - .ToList(); + var paginatedTerms = filteredTerms + .Skip((request.page - 1) * request.pageSize) + .Take(request.pageSize) + .ToList(); - var termDTOs = _mapper.Map>(paginatedTerms); + var termDTOs = _mapper.Map>(paginatedTerms); - var response = new GetAllTermsResponseDto - { - TotalAmount = totalAmount, - Terms = termDTOs - }; + var response = new GetAllTermsDto + { + TotalAmount = totalAmount, + Terms = termDTOs + }; - return Result.Ok(response); - } + return Result.Ok(response); } -} \ No newline at end of file +} diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs index 571d426de..783d31c15 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs @@ -1,8 +1,8 @@ using FluentResults; using MediatR; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.MediatR.Streetcode.Term.GetAll; public record GetAllTermsQuery(string? title = null, int page = 1, int pageSize = 10) - : IRequest>; \ No newline at end of file + : IRequest>; \ No newline at end of file diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdHandler.cs index 538b51d34..a8709e5ae 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdHandler.cs @@ -2,14 +2,14 @@ using FluentResults; using MediatR; using Microsoft.Extensions.Localization; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Repositories.Interfaces.Base; namespace Streetcode.BLL.MediatR.Streetcode.Term.GetById; -public class GetTermByIdHandler : IRequestHandler> +public class GetTermByIdHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -28,7 +28,7 @@ public GetTermByIdHandler( _stringLocalizerCannotFind = stringLocalizerCannotFind; } - public async Task> Handle(GetTermByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetTermByIdQuery request, CancellationToken cancellationToken) { var term = await _repositoryWrapper.TermRepository.GetFirstOrDefaultAsync(x => x.Id == request.Id); @@ -39,6 +39,6 @@ public async Task> Handle(GetTermByIdQuery request, Cancellation return Result.Fail(new Error(errorMessage)); } - return Result.Ok(_mapper.Map(term)); + return Result.Ok(_mapper.Map(term)); } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdQuery.cs index aab34581e..3f8828ae2 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetById/GetTermByIdQuery.cs @@ -1,8 +1,8 @@ using FluentResults; using MediatR; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.MediatR.Streetcode.Term.GetById; public record GetTermByIdQuery(int Id) - : IRequest>; + : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Update/UpdateTermCommand.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Update/UpdateTermCommand.cs index b10810fda..7835220fb 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Update/UpdateTermCommand.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/Update/UpdateTermCommand.cs @@ -1,8 +1,8 @@ using FluentResults; using MediatR; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.MediatR.Streetcode.Term.Update; -public record UpdateTermCommand(TermDTO Term) +public record UpdateTermCommand(TermDto Term) : IRequest>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Team/GetAll/GetAllTeamHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Team/GetAll/GetAllTeamHandler.cs index f03e6f7e1..5b7609f68 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Team/GetAll/GetAllTeamHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Team/GetAll/GetAllTeamHandler.cs @@ -28,6 +28,8 @@ public GetAllTeamHandler( public async Task> Handle(GetAllTeamQuery request, CancellationToken cancellationToken) { var searchTitle = request.title?.Trim().ToLower(); + int page = request.page ?? 1; + int pageSize = request.pageSize ?? 10; var allTeams = await _repositoryWrapper .TeamRepository @@ -54,13 +56,11 @@ public async Task> Handle(GetAllTeamQuery request, Cancell if (request.IsMain.HasValue) { filteredContexts = filteredContexts.Where(context => context.IsMain == request.IsMain.Value); + page = 1; } var totalItems = filteredContexts.Count(); - int page = request.page ?? 1; - int pageSize = request.pageSize ?? 10; - var paginatedContexts = filteredContexts .Skip((page - 1) * pageSize) .Take(pageSize) diff --git a/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/BaseTermValidator.cs b/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/BaseTermValidator.cs index ce7c4c536..b1125f5ac 100644 --- a/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/BaseTermValidator.cs +++ b/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/BaseTermValidator.cs @@ -2,10 +2,11 @@ using Microsoft.Extensions.Localization; using Streetcode.BLL.DTO.Streetcode.TextContent; using Streetcode.BLL.SharedResource; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; namespace Streetcode.BLL.Validators.Streetcode.Text.Term { - public class BaseTermValidator : AbstractValidator + public class BaseTermValidator : AbstractValidator { public const int TitleMaxLength = 50; public const int DescriptionMaxLength = 500; diff --git a/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/CreateTermValidator.cs b/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/CreateTermValidator.cs index ba3c380c2..985b8d55e 100644 --- a/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/CreateTermValidator.cs +++ b/Streetcode/Streetcode.BLL/Validators/Streetcode/Text/Term/CreateTermValidator.cs @@ -15,4 +15,4 @@ public CreateTermValidator( RuleFor(c => c.Term).SetValidator(baseTermValidator); } } -} +} \ No newline at end of file diff --git a/Streetcode/Streetcode.WebApi/Controllers/Partners/PartnersController.cs b/Streetcode/Streetcode.WebApi/Controllers/Partners/PartnersController.cs index 449d8c35f..504936918 100644 --- a/Streetcode/Streetcode.WebApi/Controllers/Partners/PartnersController.cs +++ b/Streetcode/Streetcode.WebApi/Controllers/Partners/PartnersController.cs @@ -19,7 +19,7 @@ namespace Streetcode.WebApi.Controllers.Partners; public class PartnersController : BaseApiController { [HttpGet] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetAllPartnersResponseDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetAllPartnersDto))] public async Task GetAll([FromQuery] ushort? page, [FromQuery] ushort? pageSize, [FromQuery] string? title, [FromQuery] bool? IsKeyPartner) { return HandleResult(await Mediator.Send(new GetAllPartnersQuery(page, pageSize, title, IsKeyPartner))); @@ -33,14 +33,14 @@ public async Task GetAllShort() } [HttpGet("{isKeyPartner:bool}")] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetPartnersByIsKeyPartner([FromRoute] bool isKeyPartner) { return HandleResult(await Mediator.Send(new GetPartnersByIsKeyPartnerQuery(isKeyPartner))); } [HttpGet("{id:int}")] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDto))] public async Task GetById([FromRoute] int id) { return HandleResult(await Mediator.Send(new GetPartnerByIdQuery(id))); @@ -48,7 +48,7 @@ public async Task GetById([FromRoute] int id) [HttpGet("{streetcodeId:int}")] [ValidateStreetcodeExistence] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetByStreetcodeId([FromRoute] int streetcodeId) { return HandleResult(await Mediator.Send(new GetPartnersByStreetcodeIdQuery(streetcodeId, GetUserRole()))); @@ -56,7 +56,7 @@ public async Task GetByStreetcodeId([FromRoute] int streetcodeId) [HttpGet("{streetcodeId:int}")] [ValidateStreetcodeExistence] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetPartnersToUpdateByStreetcodeId([FromRoute] int streetcodeId) { return HandleResult(await Mediator.Send(new GetPartnersToUpdateByStreetcodeIdQuery(streetcodeId, GetUserRole()))); @@ -64,7 +64,7 @@ public async Task GetPartnersToUpdateByStreetcodeId([FromRoute] i [HttpPost] [Authorize(Roles = nameof(UserRole.Admin))] - [ProducesResponseType(StatusCodes.Status201Created, Type = typeof(PartnerDTO))] + [ProducesResponseType(StatusCodes.Status201Created, Type = typeof(PartnerDto))] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task Create([FromBody] CreatePartnerDTO partner) @@ -74,7 +74,7 @@ public async Task Create([FromBody] CreatePartnerDTO partner) [HttpPut] [Authorize(Roles = nameof(UserRole.Admin))] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDto))] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task Update([FromBody] UpdatePartnerDTO partner) @@ -84,7 +84,7 @@ public async Task Update([FromBody] UpdatePartnerDTO partner) [HttpDelete("{id:int}")] [Authorize(Roles = nameof(UserRole.Admin))] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PartnerDto))] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task Delete([FromRoute] int id) diff --git a/Streetcode/Streetcode.WebApi/Controllers/Streetcode/StreetcodeController.cs b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/StreetcodeController.cs index ff2f3e33c..2793e5566 100644 --- a/Streetcode/Streetcode.WebApi/Controllers/Streetcode/StreetcodeController.cs +++ b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/StreetcodeController.cs @@ -45,17 +45,17 @@ public async Task GetAll([FromQuery] GetAllStreetcodesRequestDTO } [HttpGet] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetAllPublished() { return HandleResult(await Mediator.Send(new GetAllPublishedQuery())); } [HttpGet] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] - public async Task GetAllShort() + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + public async Task GetAllShort([FromQuery] ushort? page, [FromQuery] ushort? pageSize) { - return HandleResult(await Mediator.Send(new GetAllStreetcodesShortQuery(GetUserRole()))); + return HandleResult(await Mediator.Send(new GetAllStreetcodesShortQuery(GetUserRole(), page, pageSize))); } [HttpGet] @@ -74,7 +74,7 @@ public async Task GetPageMainPage(ushort page, ushort pageSize) [HttpGet("{streetcodeId:int}")] [ValidateStreetcodeExistence] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(StreetcodeShortDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(StreetcodeShortDto))] public async Task GetShortById(int streetcodeId) { return HandleResult(await Mediator.Send(new GetStreetcodeShortByIdQuery(streetcodeId, GetUserRole()))); diff --git a/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs index 008b7fd64..0a274e4cb 100644 --- a/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs +++ b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.MediatR.Streetcode.Term.Create; using Streetcode.BLL.MediatR.Streetcode.Term.Delete; using Streetcode.BLL.MediatR.Streetcode.Term.GetAll; @@ -13,14 +13,14 @@ namespace Streetcode.WebApi.Controllers.Streetcode.TextContent; public class TermController : BaseApiController { [HttpGet] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] public async Task GetAll([FromQuery] string? title = null, [FromQuery] int page = 1, [FromQuery] int pageSize = 10) { return HandleResult(await Mediator.Send(new GetAllTermsQuery(title, page, pageSize))); } [HttpGet("{id:int}")] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(TermDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(TermDto))] public async Task GetById([FromRoute] int id) { return HandleResult(await Mediator.Send(new GetTermByIdQuery(id))); @@ -28,10 +28,10 @@ public async Task GetById([FromRoute] int id) [HttpPost] [Authorize(Roles = nameof(UserRole.Admin))] - [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(TermDTO))] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(TermDto))] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task Create([FromBody] TermCreateDTO term) + public async Task Create([FromBody] TermCreateDto term) { return HandleResult(await Mediator.Send(new CreateTermCommand(term))); } @@ -41,7 +41,7 @@ public async Task Create([FromBody] TermCreateDTO term) [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task Update([FromBody] TermDTO term) + public async Task Update([FromBody] TermDto term) { return HandleResult(await Mediator.Send(new UpdateTermCommand(term))); } diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Partners/PartnersControllerTests.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Partners/PartnersControllerTests.cs index f09bf026e..c92959ac8 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Partners/PartnersControllerTests.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Partners/PartnersControllerTests.cs @@ -10,7 +10,6 @@ using Streetcode.XIntegrationTest.ControllerTests.Utils.AuthorizationFixture; using Streetcode.XIntegrationTest.ControllerTests.Utils.Client.Partners; using Streetcode.XIntegrationTest.ControllerTests.Utils.Extracter; -using Streetcode.XIntegrationTest.ControllerTests.Utils.Extracter.AdditionalContent; using Streetcode.XIntegrationTest.ControllerTests.Utils.Extracter.MediaExtracter.Image; using Streetcode.XIntegrationTest.ControllerTests.Utils.Extracter.Partner; using Streetcode.XIntegrationTest.ControllerTests.Utils.Extracter.StreetcodeExtracter; @@ -64,7 +63,7 @@ public PartnersControllerTests(CustomWebApplicationFactory factory, Tok public async Task GetAll_ReturnSuccessStatusCode() { var response = await this.Client.GetAllAsync(); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); Assert.True(response.IsSuccessStatusCode); Assert.NotNull(returnedValue); @@ -75,7 +74,7 @@ public async Task GetById_ReturnSuccessStatusCode() { Partner expectedPartner = this.testPartner; var response = await this.Client.GetByIdAsync(expectedPartner.Id); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); Assert.True(response.IsSuccessStatusCode); Assert.NotNull(returnedValue); @@ -105,7 +104,7 @@ public async Task GetByStreetcodeId_ReturnSuccessStatusCode() int streetcodeId = this.testStreetcodeContent.Id; var response = await this.Client.GetByStreetcodeId(streetcodeId); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); Assert.True(response.IsSuccessStatusCode); Assert.NotNull(returnedValue); diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/StreetcodeQueriesControllerTests.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/StreetcodeQueriesControllerTests.cs index dec67e22f..e0993dae5 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/StreetcodeQueriesControllerTests.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/StreetcodeQueriesControllerTests.cs @@ -207,7 +207,7 @@ public async Task GetAllPublished_ReturnSuccess() Assert.NotNull(response); Assert.Equal(HttpStatusCode.OK, response.StatusCode); - var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); + var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); Assert.NotNull(streetcodes); Assert.NotEmpty(streetcodes); } @@ -222,9 +222,9 @@ public async Task GetAllShort_ReturnSuccess() Assert.NotNull(response); Assert.Equal(HttpStatusCode.OK, response.StatusCode); - var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); + var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); Assert.NotNull(streetcodes); - Assert.NotEmpty(streetcodes); + Assert.NotEmpty(streetcodes.StreetcodesShort); } [Fact] @@ -237,7 +237,7 @@ public async Task GetAllMainPage_ReturnSuccess() Assert.NotNull(response); Assert.Equal(HttpStatusCode.OK, response.StatusCode); - var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); + var streetcodes = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); Assert.NotNull(streetcodes); Assert.NotEmpty(streetcodes); } @@ -271,7 +271,7 @@ public async Task GetShortById_ReturnSuccess() // Act var response = await Client.GetShortByIdAsync(id); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs index 21e869530..b2e511151 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs @@ -2,6 +2,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.XIntegrationTest.Base; using Streetcode.XIntegrationTest.ControllerTests.BaseController; @@ -34,11 +35,12 @@ public async Task GetAll_ShouldReturnSuccessStatusCode_WhenTermsReceived() var json = response.Content; var jobject = JObject.Parse(json); var termsJson = jobject["terms"]?.ToString(); - var returnedValue = JsonConvert.DeserializeObject>(termsJson); + var returnedValue = JsonConvert.DeserializeObject>(termsJson); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(returnedValue); + Assert.NotEmpty(returnedValue); } [Fact] @@ -49,7 +51,7 @@ public async Task GetById_ShouldReturnSuccessStatusCode_WhenIdIsValid() // Act var response = await this.Client.GetByIdAsync(termId); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -68,7 +70,7 @@ public async Task GetById_ShouldReturnBadRequest_WhenIdIsNotValid() // Act var response = await this.Client.GetByIdAsync(termId); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); @@ -84,7 +86,7 @@ public async Task Create_ShouldReturnSuccessStatusCode_WhenTermAdded() // Act var response = await this.Client.Create(termCreateDto, this.TokenStorage.AdminAccessToken); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); @@ -104,7 +106,7 @@ public async Task Create_ShouldReturnFail_WhenTermIsInvalid() // Act var response = await this.Client.Create(termCreateDto, this.TokenStorage.AdminAccessToken); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(400, (int)response.StatusCode); @@ -120,7 +122,7 @@ public async Task Create_ShouldReturnUnauthorized_WhenTokenIsAbsent() // Act var response = await this.Client.Create(termCreateDto); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode); @@ -136,7 +138,7 @@ public async Task Create_ShouldReturnForbidden_WhenUserIsNotAdmin() // Act var response = await this.Client.Create(termCreateDto, this.TokenStorage.UserAccessToken); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.Forbidden, response.StatusCode); diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractCreateTestTermAttribute.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractCreateTestTermAttribute.cs index 12977a2d9..05905cc7b 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractCreateTestTermAttribute.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractCreateTestTermAttribute.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.XIntegrationTest.ControllerTests.BaseController; using Xunit.Sdk; @@ -9,11 +9,11 @@ namespace Streetcode.XIntegrationTest.ControllerTests.Utils.BeforeAndAfterTestAt [AttributeUsage(AttributeTargets.Method, Inherited = false)] public class ExtractCreateTestTermAttribute : BeforeAfterTestAttribute { - public static TermCreateDTO TermCreateDtoForTest { get; private set; } = null!; + public static TermCreateDto TermCreateDtoForTest { get; private set; } = null!; public override void Before(MethodInfo methodUnderTest) { - TermCreateDtoForTest = new TermCreateDTO() + TermCreateDtoForTest = new TermCreateDto() { Title = "TermCreateDto for create test", Description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit", diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractUpdateTestTermAttribute.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractUpdateTestTermAttribute.cs index 6a51bb464..8741a0ea4 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractUpdateTestTermAttribute.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/BeforeAndAfterTestAtribute/Streetcode/TextContent/Terms/ExtractUpdateTestTermAttribute.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.XIntegrationTest.ControllerTests.BaseController; using Xunit.Sdk; @@ -9,11 +9,11 @@ namespace Streetcode.XIntegrationTest.ControllerTests.Utils.BeforeAndAfterTestAt [AttributeUsage(AttributeTargets.Method, Inherited = false)] public class ExtractUpdateTestTermAttribute : BeforeAfterTestAttribute { - public static TermDTO TermUpdateDtoForTest { get; private set; } = null!; + public static TermDto TermUpdateDtoForTest { get; private set; } = null!; public override void Before(MethodInfo methodUnderTest) { - TermUpdateDtoForTest = new TermDTO() + TermUpdateDtoForTest = new TermDto() { Id = 1, Title = "TermDto for update test", diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/Client/StreetCode/TextContent/TermClient.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/Client/StreetCode/TextContent/TermClient.cs index ee99889b8..b56ad75dd 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/Client/StreetCode/TextContent/TermClient.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Utils/Client/StreetCode/TextContent/TermClient.cs @@ -1,5 +1,5 @@ using RestSharp; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.XIntegrationTest.ControllerTests.Utils.Client.Base; namespace Streetcode.XIntegrationTest.ControllerTests.Utils.Client.StreetCode.TextContent; @@ -11,18 +11,18 @@ public TermClient(HttpClient client, string secondPathUrl = "") { } - public async Task Create(TermCreateDTO streetcodeFactCreateDto, string authToken = "") + public async Task Create(TermCreateDto streetcodeFactCreateDto, string authToken = "") { return await SendCommand("/Create", Method.Post, streetcodeFactCreateDto, authToken); } - public async Task Update(TermDTO termUpdateDto, string authToken = "") + public async Task Update(TermDto termUpdateDto, string authToken = "") { return await SendCommand($"/Update", Method.Put, termUpdateDto, authToken); } public async Task Delete(int id, string authToken = "") { - return await SendCommand($"/Delete/{id}", Method.Delete, new TermDTO(), authToken); + return await SendCommand($"/Delete/{id}", Method.Delete, new TermDto(), authToken); } } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs index 3ce2c706e..3ff83b1b7 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs @@ -43,7 +43,7 @@ public async Task ShouldReturnSuccessfully_TypeIsCorrect() _mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(testPartner); - _mockMapper.Setup(x => x.Map(It.IsAny())) + _mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDto()); _mockRepository.Setup(x => x.PartnersRepository.CreateAsync(It.Is(y => y.Id == testPartner.Id))) @@ -62,7 +62,7 @@ public async Task ShouldReturnSuccessfully_TypeIsCorrect() var result = await handler.Handle(new CreatePartnerQuery(GetCreatePartnerDto()), CancellationToken.None); // Assert - Assert.IsType(result.Value); + Assert.IsType(result.Value); } [Fact] @@ -73,7 +73,7 @@ public async Task ShouldReturnSuccessfully_WhenPartnerAdded() _mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(testPartner); - _mockMapper.Setup(x => x.Map(It.IsAny())) + _mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDto()); _mockRepository.Setup(x => x.PartnersRepository.CreateAsync(It.Is(y => y.Id == testPartner.Id))) @@ -118,9 +118,9 @@ private static CreatePartnerDTO GetCreatePartnerDto() }; } - private static PartnerDTO GetPartnerDto() + private static PartnerDto GetPartnerDto() { - return new PartnerDTO + return new PartnerDto { Title = "New Partner", LogoId = 100, @@ -137,11 +137,11 @@ private static CreatePartnerDTO GetCreatePartnerDtoWithStreetcodes() LogoId = 100, IsKeyPartner = false, IsVisibleEverywhere = true, - Streetcodes = new List + Streetcodes = new List { - new StreetcodeShortDTO { Id = 1 }, - new StreetcodeShortDTO { Id = 2 }, - new StreetcodeShortDTO { Id = 3 }, + new StreetcodeShortDto { Id = 1 }, + new StreetcodeShortDto { Id = 2 }, + new StreetcodeShortDto { Id = 3 }, }, }; } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs index 99ca040aa..dbfa38ccb 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs @@ -33,8 +33,8 @@ public async Task ShouldDeleteSuccessfully() // Arrange var testPartner = GetPartner(); - _mockMapper.Setup(x => x.Map(It.IsAny())) - .Returns(GetPartnerDto()); + _mockMapper.Setup(x => x.Map(It.IsAny())) + .Returns(GetPartnerDTO()); _mockRepository.Setup(x => x.PartnersRepository.GetFirstOrDefaultAsync(It.IsAny>>(), null)) .ReturnsAsync(testPartner); @@ -50,7 +50,7 @@ public async Task ShouldDeleteSuccessfully() () => Assert.True(result.IsSuccess)); _mockRepository.Verify(x => x.PartnersRepository.Delete(It.Is(x => x.Id == testPartner.Id)), Times.Once); - _mockRepository.Verify(x => x.SaveChangesAsync(), Times.Once); + _mockRepository.Verify(x => x.SaveChanges(), Times.Once); } [Fact] @@ -71,7 +71,7 @@ public async Task ShouldThrowExeption_IdNotExisting() var result = await handler.Handle(new DeletePartnerQuery(testPartner.Id), CancellationToken.None); // Assert - Assert.Equal(expectedError, result.Errors[0].Message); + Assert.Equal(expectedError, result.Errors.FirstOrDefault()?.Message); _mockRepository.Verify(x => x.PartnersRepository.Delete(It.IsAny()), Times.Never); } @@ -83,12 +83,12 @@ public async Task ShouldThrowExeption_SaveChangesAsyncIsNotSuccessful() var testPartner = GetPartner(); var expectedError = "The partner wasn`t added"; - _mockMapper.Setup(x => x.Map(It.IsAny())) - .Returns(GetPartnerDto()); + _mockMapper.Setup(x => x.Map(It.IsAny())) + .Returns(GetPartnerDTO()); _mockRepository.Setup(x => x.PartnersRepository.GetFirstOrDefaultAsync(It.IsAny>>(), null)) .ReturnsAsync(testPartner); - _mockRepository.Setup(x => x.SaveChangesAsync()) + _mockRepository.Setup(x => x.SaveChanges()) .Throws(new Exception(expectedError)); // Act @@ -97,7 +97,7 @@ public async Task ShouldThrowExeption_SaveChangesAsyncIsNotSuccessful() var result = await handler.Handle(new DeletePartnerQuery(testPartner.Id), CancellationToken.None); // Assert - Assert.Equal(expectedError, result.Errors[0].Message); + Assert.Equal(expectedError, result.Errors.FirstOrDefault()?.Message); } private static Partner GetPartner() @@ -108,9 +108,9 @@ private static Partner GetPartner() }; } - private static PartnerDTO GetPartnerDto() + private static PartnerDto GetPartnerDTO() { - return new PartnerDTO(); + return new PartnerDto(); } private static Partner? GetPartnerWithNotExistingId() diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs index c0d808b7b..94382fbbc 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs @@ -1,55 +1,65 @@ -using System.Linq.Expressions; +using System.Linq; +using System.Collections.Generic; +using System.Threading; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Moq; using AutoMapper; using FluentResults; using MediatR; -using Microsoft.EntityFrameworkCore.Query; using Microsoft.Extensions.Localization; -using Moq; +using Microsoft.EntityFrameworkCore.Query; // Add this for IIncludableQueryable using Streetcode.BLL.DTO.Partners; using Streetcode.BLL.Interfaces.Logging; +using Streetcode.BLL.Interfaces.BlobStorage; using Streetcode.BLL.MediatR.Partners.GetAll; +using Streetcode.DAL.Repositories.Interfaces.Base; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; -using Streetcode.DAL.Repositories.Interfaces.Base; using Xunit; namespace Streetcode.XUnitTest.MediatRTests.Partners { public class GetAllPartnersTest { - private readonly Mock mockRepository; - private readonly Mock mockMapper; - private readonly Mock mockLogger; - private readonly Mock> mockLocalizerCannotFind; + private const string _testBase64String = "rVhhWrnh72xHfKGHg6YTV2H4ywe7BorrYUdILaKz0lQ="; + + private readonly Mock _mockRepository; + private readonly Mock _mockMapper; + private readonly Mock _mockBlobService; + private readonly GetAllPartnersHandler _handler; + private readonly Mock _mockLogger; + private readonly Mock> _mockLocalizerCannotFind; public GetAllPartnersTest() { - this.mockRepository = new Mock(); - this.mockMapper = new Mock(); - this.mockLogger = new Mock(); - this.mockLocalizerCannotFind = new Mock>(); + _mockRepository = new Mock(); + _mockMapper = new Mock(); + _mockBlobService = new Mock(); + _mockLogger = new Mock(); + _mockLocalizerCannotFind = new Mock>(); + _handler = new GetAllPartnersHandler( + _mockRepository.Object, + _mockMapper.Object, + _mockLogger.Object, + _mockLocalizerCannotFind.Object, + _mockBlobService.Object); } [Fact] public async Task ShouldReturnSuccessfully_CorrectType() { // Arrange - this.SetupGetAllAsync(GetPartnerList()); - this.SetupMapper(GetListPartnerDTO()); - - var handler = new GetAllPartnersHandler( - this.mockRepository.Object, - this.mockMapper.Object, - this.mockLogger.Object, - this.mockLocalizerCannotFind.Object); + this.SetupPaginatedRepository(GetPartnerList()); + this.SetupMapper(GetListPartnerDto()); // Act - var result = await handler.Handle(new GetAllPartnersQuery(), CancellationToken.None); + var result = await _handler.Handle(new GetAllPartnersQuery(), CancellationToken.None); // Assert Assert.Multiple( () => Assert.NotNull(result), - () => Assert.IsType>(result.Value.Partners) + () => Assert.IsType>(result.Value.Partners) ); } @@ -57,17 +67,11 @@ public async Task ShouldReturnSuccessfully_CorrectType() public async Task ShouldReturnSuccessfully_CountMatch() { // Arrange - this.SetupGetAllAsync(GetPartnerList()); - this.SetupMapper(GetListPartnerDTO()); - - var handler = new GetAllPartnersHandler( - this.mockRepository.Object, - this.mockMapper.Object, - this.mockLogger.Object, - this.mockLocalizerCannotFind.Object); + this.SetupPaginatedRepository(GetPartnerList()); + this.SetupMapper(GetListPartnerDto()); // Act - var result = await handler.Handle(new GetAllPartnersQuery(), CancellationToken.None); + var result = await _handler.Handle(new GetAllPartnersQuery(), CancellationToken.None); // Assert Assert.Multiple( @@ -81,23 +85,16 @@ public async Task Handler_Returns_Correct_PageSize() { // Arrange ushort pageSize = 3; - this.SetupGetAllAsync(GetPartnerList().Take(pageSize)); - this.SetupMapper(GetListPartnerDTO().Take(pageSize).ToList()); - - var handler = new GetAllPartnersHandler( - this.mockRepository.Object, - this.mockMapper.Object, - this.mockLogger.Object, - this.mockLocalizerCannotFind.Object); + this.SetupPaginatedRepository(GetPartnerList().Take(pageSize)); + this.SetupMapper(GetListPartnerDto().Take(pageSize).ToList()); // Act - var result = await handler.Handle(new GetAllPartnersQuery(page: 1, pageSize: pageSize), CancellationToken.None); + var result = await _handler.Handle(new GetAllPartnersQuery(page: 1, pageSize: pageSize), CancellationToken.None); // Assert Assert.Multiple( - () => Assert.IsType>(result.Value.Partners), - () => Assert.Equal(pageSize, result.Value.Partners.Count()) - ); + () => Assert.IsType>(result.Value.Partners), + () => Assert.Equal(pageSize, result.Value.Partners.Count())); } private static IEnumerable GetPartnerList() @@ -108,39 +105,42 @@ private static IEnumerable GetPartnerList() new Partner { Id = 2 }, new Partner { Id = 3 }, new Partner { Id = 4 }, - new Partner { Id = 5 } + new Partner { Id = 5 }, }; return partners; } - private static List GetListPartnerDTO() + private static List GetListPartnerDto() { - var partnersDTO = new List + var partnersDto = new List { - new PartnerDTO { Id = 1 }, - new PartnerDTO { Id = 2 }, - new PartnerDTO { Id = 3 }, - new PartnerDTO { Id = 4 }, - new PartnerDTO { Id = 5 } + new PartnerDto { Id = 1 }, + new PartnerDto { Id = 2 }, + new PartnerDto { Id = 3 }, + new PartnerDto { Id = 4 }, + new PartnerDto { Id = 5 }, }; - return partnersDTO; + return partnersDto; } - private void SetupGetAllAsync(IEnumerable returnList) + private void SetupPaginatedRepository(IEnumerable returnList) { - this.mockRepository.Setup(repo => repo.PartnersRepository.GetAllAsync( - It.IsAny>>(), - It.IsAny, IIncludableQueryable>>() - )) - .ReturnsAsync(returnList); + // Mocking IQueryable for PartnersRepository's GetAllAsync method + var mockIncludableQueryable = returnList.AsQueryable(); + + // Adjusted mock setup to expect a filter and a function for includes + _mockRepository.Setup(repo => repo.PartnersRepository.GetAllAsync( + It.IsAny>>(), // Mock the filter expression (for Where) + It.IsAny, IIncludableQueryable>>())) // Mock includes + .ReturnsAsync(mockIncludableQueryable); } - private void SetupMapper(IEnumerable returnList) + private void SetupMapper(IEnumerable returnList) { - this.mockMapper - .Setup(x => x.Map>(It.IsAny>())) + _mockMapper + .Setup(x => x.Map>(It.IsAny>())) .Returns(returnList); } } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs index de1f5a463..e72eed509 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs @@ -11,7 +11,6 @@ using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; using Streetcode.DAL.Entities.Streetcode; -using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Enums; using Streetcode.DAL.Repositories.Interfaces.Base; using Streetcode.XUnitTest.Mocks; @@ -44,7 +43,7 @@ public async Task ShouldReturnSuccessfully_ExistingIdAndUserHasAccess() _mockMapper .Setup(x => x - .Map>(It.IsAny>())) + .Map>(It.IsAny>())) .Returns(GetPartnerDTOList()); var handler = new GetPartnersByStreetcodeIdHandler(_mockMapper.Object, _mockRepository.Object, _mockLogger.Object, _mockLocalizerCannotFind); @@ -69,7 +68,7 @@ public async Task Handler_PartnerExistsButUserDoesNotHaveAccess_ReturnsError() var expectedError = _mockLocalizerCannotFind["CannotFindAnyStreetcodeWithCorrespondingId", testStreetcodeContent.Id].Value; _mockMapper - .Setup(x => x.Map>(It.IsAny>())) + .Setup(x => x.Map>(It.IsAny>())) .Returns(GetPartnerDTOList()); var handler = new GetPartnersByStreetcodeIdHandler(_mockMapper.Object, _mockRepository.Object, _mockLogger.Object, _mockLocalizerCannotFind); @@ -91,7 +90,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() _mockMapper .Setup(x => x - .Map>(It.IsAny>())) + .Map>(It.IsAny>())) .Returns(GetPartnerDTOList()); var handler = new GetPartnersByStreetcodeIdHandler(_mockMapper.Object, _mockRepository.Object, _mockLogger.Object, _mockLocalizerCannotFind); @@ -103,7 +102,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() Assert.Multiple( () => Assert.NotNull(result), () => Assert.True(result.IsSuccess), - () => Assert.IsType>(result.ValueOrDefault)); + () => Assert.IsType>(result.ValueOrDefault)); } [Fact] @@ -121,8 +120,8 @@ public async Task ShouldReturnSuccessfully_EmptyListOfPartnersAndUserHasAccess() // Asset Assert.Multiple( - () => Assert.IsType>>(result), - () => Assert.IsAssignableFrom>(result.Value), + () => Assert.IsType>>(result), + () => Assert.IsAssignableFrom>(result.Value), () => Assert.Empty(result.Value)); } @@ -170,11 +169,11 @@ private static List GetStreetcodeList() return streetCodes; } - private static List GetPartnerDTOList() + private static List GetPartnerDTOList() { - var partners = new List + var partners = new List { - new PartnerDTO + new PartnerDto { Id = 1, }, diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs index 180a01545..7fba65fbd 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs @@ -43,8 +43,8 @@ public async Task ShouldReturnSuccessfully_ExistingId() _mockMapper .Setup(x => x - .Map(It.IsAny())) - .Returns(GetPartnerDto()); + .Map(It.IsAny())) + .Returns(GetPartnerDTO()); var handler = new GetPartnerByIdHandler(_mockRepository.Object, _mockMapper.Object, _mockLogger.Object, _mockLocalizerCannotFind.Object); @@ -83,8 +83,8 @@ public async Task ShouldReturnErrorResponse_NotExistingId() _mockMapper .Setup(x => x - .Map(It.IsAny())) - .Returns(GetPartnerDtoWithNotExistingId()); + .Map(It.IsAny())) + .Returns(GetPartnerDTOWithNotExistingId()); var handler = new GetPartnerByIdHandler(_mockRepository.Object, _mockMapper.Object, _mockLogger.Object, _mockLocalizerCannotFind.Object); @@ -112,8 +112,8 @@ public async Task ShouldReturnSuccessfully_CorrectType() _mockMapper .Setup(x => x - .Map(It.IsAny())) - .Returns(GetPartnerDto()); + .Map(It.IsAny())) + .Returns(GetPartnerDTO()); var handler = new GetPartnerByIdHandler(_mockRepository.Object, _mockMapper.Object, _mockLogger.Object, _mockLocalizerCannotFind.Object); @@ -123,7 +123,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() // Assert Assert.Multiple( () => Assert.NotNull(result.ValueOrDefault), - () => Assert.IsType(result.ValueOrDefault)); + () => Assert.IsType(result.ValueOrDefault)); } private static Partner GetPartner() @@ -139,15 +139,15 @@ private static Partner GetPartner() return null; } - private static PartnerDTO GetPartnerDto() + private static PartnerDto GetPartnerDTO() { - return new PartnerDTO + return new PartnerDto { Id = 1, }; } - private static PartnerDTO? GetPartnerDtoWithNotExistingId() + private static PartnerDto? GetPartnerDTOWithNotExistingId() { return null; } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllPublishedHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllPublishedHandlerTests.cs index 371904dce..e9a8253fb 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllPublishedHandlerTests.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllPublishedHandlerTests.cs @@ -56,7 +56,7 @@ public async Task Handle_WhenPublishedStreetcodesExist_ReturnsStreetcodeShortDTO Assert.True(result.IsSuccess); Assert.Equal(testStreetcodes.Count, result.Value.Count()); _repositoryMock.Verify(repo => repo.StreetcodeRepository.GetAllAsync(sc => sc.Status == StreetcodeStatus.Published, null), Times.Once); - _mapperMock.Verify(m => m.Map>(testStreetcodes), Times.Once); + _mapperMock.Verify(m => m.Map>(testStreetcodes), Times.Once); }); } @@ -97,9 +97,9 @@ private void SetupMocks(List? streetcodes) .ReturnsAsync(streetcodes!); _mapperMock - .Setup(m => m.Map>(It.IsAny>())) + .Setup(m => m.Map>(It.IsAny>())) .Returns((IEnumerable src) => - src.Select(s => new StreetcodeShortDTO() + src.Select(s => new StreetcodeShortDto() { Id = s.Id, }).ToList()); diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs index 67d99a6d8..9fdabfad6 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs @@ -1,104 +1,203 @@ -using System.Linq.Expressions; +using System.Linq; +using System.Linq.Expressions; using AutoMapper; +using FluentAssertions; using Microsoft.EntityFrameworkCore.Query; using Moq; +using Streetcode.DAL.Enums; using Streetcode.BLL.DTO.Streetcode; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllShort; using Streetcode.DAL.Entities.Streetcode; -using Streetcode.DAL.Enums; using Streetcode.DAL.Repositories.Interfaces.Base; +using Streetcode.DAL.Helpers; using Streetcode.XUnitTest.Mocks; using Xunit; -namespace Streetcode.XUnitTest.MediatRTests.StreetCode.Streetcode; - -public class GetAllStreetcodesShortHandlerTests +namespace Streetcode.XUnitTest.MediatRTests.StreetCode.Streetcode { - private readonly Mock _repositoryMock; - private readonly Mock _mapperMock; - private readonly Mock _loggerMock; - private readonly MockNoSharedResourceLocalizer _mockLocalizer; - private readonly GetAllStreetcodesShortHandler _handler; - - public GetAllStreetcodesShortHandlerTests() + public class GetAllStreetcodesShortHandlerTests { - _repositoryMock = new Mock(); - _mapperMock = new Mock(); - _loggerMock = new Mock(); - _mockLocalizer = new MockNoSharedResourceLocalizer(); - - _handler = new GetAllStreetcodesShortHandler( - _repositoryMock.Object, - _mapperMock.Object, - _loggerMock.Object, - _mockLocalizer); - } + private readonly Mock _mockRepository; + private readonly Mock _mockMapper; + private readonly Mock _mockLogger; + private readonly MockNoSharedResourceLocalizer _mockNoSharedResourceLocalizer; + private readonly GetAllStreetcodesShortHandler _handler; - [Fact] - public async Task Handle_WhenStreetcodesExist_ReturnsStreetcodeShortDTOs() - { - // Arrange - var testStreetcodes = GetTestStreetcodes(3); + public GetAllStreetcodesShortHandlerTests() + { + _mockRepository = new Mock(); + _mockMapper = new Mock(); + _mockLogger = new Mock(); + _mockNoSharedResourceLocalizer = new MockNoSharedResourceLocalizer(); + _handler = new GetAllStreetcodesShortHandler( + _mockRepository.Object, + _mockMapper.Object, + _mockLogger.Object, + _mockNoSharedResourceLocalizer); + } + + [Fact] + public async Task ShouldGetAllSuccessfully_WhenStreetcodesExist() + { + // Arrange + const int objectsNumber = 2; + var (streetcodeContentsPaginated, streetcodeShortDtoList) = GetStreetcodeObjects(objectsNumber); + var request = GetRequest(UserRole.User); + + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, streetcodeContentsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + streetcodeShortDtoList, + streetcodeContentsPaginated.Entities); - SetupRepositoryMock(testStreetcodes); + // Act + var result = await _handler.Handle(request, CancellationToken.None); - // Act - var result = await _handler.Handle(new GetAllStreetcodesShortQuery(UserRole.User), CancellationToken.None); + // Assert + result.IsSuccess.Should().BeTrue(); + result.Value.StreetcodesShort.Should().SatisfyRespectively( + first => first.Id.Should().Be(streetcodeContentsPaginated.Entities.ToList()[0].Id), + second => second.Id.Should().Be(streetcodeContentsPaginated.Entities.ToList()[1].Id)); + result.Value.TotalAmount.Should().Be(objectsNumber); + } - // Assert - Assert.Multiple(() => + [Fact] + public async Task ShouldGetAllSuccessfully_WithCorrectDataType() { - Assert.True(result.IsSuccess); - Assert.Equal(testStreetcodes.Count, result.Value.Count()); - _mapperMock.Verify(m => m.Map>(testStreetcodes), Times.Once); - }); - } + // Arrange + const int objectsNumber = 2; + var (termsPaginated, termDtoList) = GetStreetcodeObjects(objectsNumber); + var request = GetRequest(UserRole.User); - [Fact] - public async Task Handle_WhenNoStreetcodesExist_ReturnsError() - { - // Arrange - const string expectedErrorKey = "NoStreetcodesExistNow"; - string expectedErrorValue = _mockLocalizer[expectedErrorKey]; - var query = new GetAllStreetcodesShortQuery(UserRole.User); + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, termsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + termDtoList, + termsPaginated.Entities); - SetupRepositoryMock(new List()); + // Act + var result = await _handler.Handle(request, CancellationToken.None); - // Act - var result = await _handler.Handle(query, CancellationToken.None); + // Assert + result.IsSuccess.Should().BeTrue(); + result.Value.Should().BeOfType(); + } - // Assert - Assert.Multiple(() => + [Fact] + public async Task ShouldGetAllFailingly_WhenStreetcodesNotExist() { - Assert.False(result.IsSuccess); - Assert.Contains(expectedErrorValue, result.Errors.Single().Message); - _loggerMock.Verify(logger => logger.LogError(query, expectedErrorValue), Times.Once); - }); - } + // Arrange + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyStreetcodeObjects(); + var request = GetRequest(UserRole.User); + var expectedErrorMessage = _mockNoSharedResourceLocalizer["NoStreetcodesExistNow"].Value; - private static List GetTestStreetcodes(int count) - { - return Enumerable.Range(1, count) - .Select(i => new StreetcodeContent { Id = i }) - .ToList(); - } + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); - private void SetupRepositoryMock(List? streetcodes) - { - _repositoryMock - .Setup(repo => repo.StreetcodeRepository.GetAllAsync( - It.IsAny>>(), - It.IsAny, - IIncludableQueryable>>())) - .ReturnsAsync(streetcodes!); - - _mapperMock - .Setup(m => m.Map>(It.IsAny>())) - .Returns((IEnumerable src) => - src.Select(s => new StreetcodeShortDTO() - { - Id = s.Id, - }).ToList()); + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsFailed.Should().BeTrue(); + result.Errors[0].Message.Should().Be(expectedErrorMessage); + _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); + } + + [Fact] + public async Task ShouldGetAllSuccessfully_WithCorrectPageSize() + { + // Arrange + const ushort pageNumber = 1; + const ushort pageSize = 2; + var (termsPaginated, termDtoList) = GetStreetcodeObjects(pageSize); + var request = GetRequest(UserRole.User, pageNumber, pageSize); + + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, termsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + termDtoList, + termsPaginated.Entities); + + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsSuccess.Should().BeTrue(); + result.Value.StreetcodesShort.Should().NotBeEmpty(); + result.Value.TotalAmount.Should().Be(pageSize); + } + + [Fact] + public async Task ShouldGetAllPaginatedFailingly_WhenPageNumberIsTooBig() + { + // Arrange + const ushort pageNumber = 99; + const ushort pageSize = 2; + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyStreetcodeObjects(); + var request = GetRequest(UserRole.User, pageNumber, pageSize); + var expectedErrorMessage = _mockNoSharedResourceLocalizer["NoStreetcodesExistNow"].Value; + + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); + + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsFailed.Should().BeTrue(); + result.Errors[0].Message.Should().Be(expectedErrorMessage); + _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); + } + + [Theory] + [InlineData(0, 1)] + [InlineData(1, 0)] + public async Task ShouldGetAllPaginatedFailingly_WhenPageNumberOrSizeIsZero(ushort pageNumber, ushort pageSize) + { + // Arrange + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyStreetcodeObjects(); + var request = GetRequest(UserRole.User, pageNumber, pageSize); + var expectedErrorMessage = _mockNoSharedResourceLocalizer["NoStreetcodesExistNow"].Value; + + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); + + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsFailed.Should().BeTrue(); + result.Errors[0].Message.Should().Be(expectedErrorMessage); + _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); + } + + private static (PaginationResponse, List) GetStreetcodeObjects(int count) + { + var streetcodeContentsList = Enumerable + .Range(0, count) + .Select(i => new StreetcodeContent() { Id = i }) + .ToList(); + var streetcodeContentPaginated = PaginationResponse.Create(streetcodeContentsList.AsQueryable()); + + var streetcodeShortDtoList = Enumerable + .Range(0, count) + .Select(i => new StreetcodeShortDto() { Id = streetcodeContentsList[i].Id }) + .ToList(); + + return (streetcodeContentPaginated, streetcodeShortDtoList); + } + + private static (PaginationResponse, List) GetEmptyStreetcodeObjects() + { + return ( + PaginationResponse.Create(new List().AsQueryable()), + new List()); + } + + private static GetAllStreetcodesShortQuery GetRequest(UserRole userRole = UserRole.User, ushort? page = null, ushort? pageSize = null) + { + return new GetAllStreetcodesShortQuery(userRole, page, pageSize); + } } } \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs index 51badf019..121ef7f8e 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs @@ -44,7 +44,7 @@ public async Task Handle_WhenStreetcodeExists_ReturnsStreetcodeShortDTO() // Arrange var request = new GetStreetcodeShortByIdQuery(Id: 1, UserRole.User); var testStreetcode = new StreetcodeContent { Id = request.Id }; - var expectedDto = new StreetcodeShortDTO { Id = request.Id }; + var expectedDto = new StreetcodeShortDto { Id = request.Id }; SetupRepositoryMock(testStreetcode); SetupMapperMock(); @@ -70,7 +70,7 @@ public async Task Handle_WhenMappingFails_ReturnsError() string expectedErrorValue = _mockCannotMapLocalizer[expectedErrorKey]; SetupRepositoryMock(testStreetcode); - _mapperMock.Setup(m => m.Map(It.IsAny())).Returns((StreetcodeShortDTO)null!); + _mapperMock.Setup(m => m.Map(It.IsAny())).Returns((StreetcodeShortDto)null!); // Act var result = await _handler.Handle(request, CancellationToken.None); @@ -94,7 +94,7 @@ private void SetupRepositoryMock(StreetcodeContent? streetcode) private void SetupMapperMock() { _mapperMock - .Setup(m => m.Map(It.IsAny())) - .Returns((StreetcodeContent src) => new StreetcodeShortDTO { Id = src.Id }); + .Setup(m => m.Map(It.IsAny())) + .Returns((StreetcodeContent src) => new StreetcodeShortDto { Id = src.Id }); } } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/CreateTermTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/CreateTermTest.cs index 1fefe509e..7ec6e0a5f 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/CreateTermTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/CreateTermTest.cs @@ -1,7 +1,7 @@ using AutoMapper; using FluentAssertions; using Moq; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.MediatR.Streetcode.Term.Create; using Streetcode.DAL.Entities.Streetcode.TextContent; @@ -54,7 +54,7 @@ public async Task ShouldCreateSuccessfully_WhenRelatedTermAdded() result.Value.Title.Should().Be(termCreateDto.Title); _mockRepository.Verify(x => x.TermRepository.CreateAsync(term), Times.Once); _mockRepository.Verify(x => x.SaveChangesAsync(), Times.Once); - _mockMapper.Verify(x => x.Map(term), Times.Once); + _mockMapper.Verify(x => x.Map(term), Times.Once); } [Fact] @@ -73,11 +73,11 @@ public async Task ShouldCreateSuccessfully_WithCorrectDataType() // Assert result.IsSuccess.Should().BeTrue(); - result.Value.Should().BeOfType(); + result.Value.Should().BeOfType(); } [Fact] - public async Task ShouldCreateSuccessfully_WhenSaveChangesAsyncFailed() + public async Task ShouldCreateFailingly_WhenSaveChangesAsyncFailed() { // Arrange var (termCreateDto, term, _) = GetTermObjects(); @@ -104,7 +104,7 @@ public async Task ShouldCreateFailingly_WhenFirstMappingFailed() var request = GetRequest(termCreateDto); var expectedErrorMessage = _mockCannotConvertNullLocalizer["CannotConvertNullToTerm"].Value; - MockHelpers.SetupMockMapper(_mockMapper, null, request.Term); + MockHelpers.SetupMockMapper(_mockMapper, null, request.Term); // Act var result = await _handler.Handle(request, CancellationToken.None); @@ -136,11 +136,11 @@ public async Task ShouldCreateFailingly_WhenSecondMappingFailed() _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); } - private static (TermCreateDTO, Term, TermDTO) GetTermObjects() + private static (TermCreateDto, Term, TermDto) GetTermObjects() { const string title = "qwerty"; - var termCreateDto = new TermCreateDTO() + var termCreateDto = new TermCreateDto() { Title = title, }; @@ -148,7 +148,7 @@ private static (TermCreateDTO, Term, TermDTO) GetTermObjects() { Title = title, }; - var termDto = new TermDTO() + var termDto = new TermDto() { Title = title, }; @@ -156,7 +156,7 @@ private static (TermCreateDTO, Term, TermDTO) GetTermObjects() return (termCreateDto, term, termDto); } - private static CreateTermCommand GetRequest(TermCreateDTO termCreateDto) + private static CreateTermCommand GetRequest(TermCreateDto termCreateDto) { return new CreateTermCommand(termCreateDto); } diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs index dac423904..f3e60eada 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs @@ -1,14 +1,14 @@ -using System.Linq.Expressions; -using AutoMapper; +using AutoMapper; using FluentAssertions; -using Microsoft.EntityFrameworkCore.Query; using Moq; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.MediatR.Streetcode.Term.GetAll; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Repositories.Interfaces.Base; using Streetcode.XUnitTest.Mocks; using Xunit; +using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore.Query; namespace Streetcode.XUnitTest.MediatRTests.StreetCode.Terms; @@ -29,120 +29,101 @@ public GetAllTermsTest() public async Task ShouldGetAllSuccessfully_WhenTermsExist() { // Arrange - var (termsList, termDtoList) = GetTermObjectsLists(); - var request = GetRequest(); + var terms = GetTermEntities(2); + var termDtos = GetTermDtos(2); + var request = new GetAllTermsQuery(); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper, List>(_mockMapper, termDtoList, termsList); + _mockRepository.Setup(r => r.TermRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>())) + .ReturnsAsync(terms); + + _mockMapper.Setup(m => m.Map>(terms)) + .Returns(termDtos); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert result.IsSuccess.Should().BeTrue(); + result.Value.Terms.Should().HaveCount(2); + result.Value.Terms.Select(t => t.Id).Should().ContainInOrder(0, 1); - var value = result.Value.Should().BeAssignableTo().Which; - - var terms = value.Terms; - - terms.Should().SatisfyRespectively( - first => first.Id.Should().Be(termsList[0].Id), - second => second.Id.Should().Be(termsList[1].Id)); - - terms.Should().HaveCount(2); - - VerifyGetAllAsyncAndMockingOperationsExecution(termsList); + VerifyGetAllAndMapping(terms); } [Fact] - public async Task ShouldGetAllSuccessfully_WithCorrectDataType() + public async Task ShouldReturnEmpty_WhenNoTermsExist() { // Arrange - var (termsList, termDtoList) = GetTermObjectsLists(); - var request = GetRequest(); + var terms = new List(); + var termDtos = new List(); + var request = new GetAllTermsQuery(); + + _mockRepository.Setup(r => r.TermRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>())) + .ReturnsAsync(terms); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper, List>(_mockMapper, termDtoList, termsList); + _mockMapper.Setup(m => m.Map>(terms)) + .Returns(termDtos); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert result.IsSuccess.Should().BeTrue(); - result.ValueOrDefault.Should().BeOfType(); - result.ValueOrDefault.Terms.Should().BeAssignableTo>(); + result.Value.Terms.Should().BeEmpty(); + + VerifyGetAllAndMapping(terms); } [Fact] - public async Task ShouldGetAllSuccessfully_WhenTermsNotExist() + public async Task ShouldReturnCorrectDataType() { // Arrange - var (termsList, termDtoList) = GetEmptyTermObjectsLists(); - var request = GetRequest(); + var terms = GetTermEntities(2); + var termDtos = GetTermDtos(2); + var request = new GetAllTermsQuery(); + + _mockRepository.Setup(r => r.TermRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>())) + .ReturnsAsync(terms); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper(_mockMapper, termDtoList, termsList); + _mockMapper.Setup(m => m.Map>(terms)) + .Returns(termDtos); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert result.IsSuccess.Should().BeTrue(); + result.Value.Terms.Should().BeOfType>(); - var value = result.Value.Should().BeAssignableTo().Which; - - value.Terms.Should().BeEmpty(); - - result.ValueOrDefault.Should().BeAssignableTo(); - - VerifyGetAllAsyncAndMockingOperationsExecution(termsList); + VerifyGetAllAndMapping(terms); } - private static (List, List) GetTermObjectsLists() + private static List GetTermEntities(int count) { - var termsList = new List() - { - new Term() - { - Id = 1, - }, - new Term() - { - Id = 2, - }, - }; - var termDtoList = new List() - { - new TermDTO() - { - Id = termsList[0].Id, - }, - new TermDTO() - { - Id = termsList[1].Id, - }, - }; - - return (termsList, termDtoList); + return Enumerable.Range(0, count) + .Select(i => new Term { Id = i }) + .ToList(); } - private static (List, List) GetEmptyTermObjectsLists() + private static List GetTermDtos(int count) { - return (new List(), new List()); + return Enumerable.Range(0, count) + .Select(i => new TermDto { Id = i }) + .ToList(); } - private static GetAllTermsQuery GetRequest() + private void VerifyGetAllAndMapping(IEnumerable terms) { - return new GetAllTermsQuery(); - } + _mockRepository.Verify(r => r.TermRepository.GetAllAsync( + It.IsAny>>(), + It.IsAny, IIncludableQueryable>>()), Times.Once); - private void VerifyGetAllAsyncAndMockingOperationsExecution(List termsList) - { - _mockRepository.Verify( - x => x.TermRepository.GetAllAsync( - It.IsAny>>(), - It.IsAny, IIncludableQueryable>>()), - Times.Once); - _mockMapper.Verify(x => x.Map>(termsList), Times.Once); + _mockMapper.Verify(m => m.Map>(terms), Times.Once); } -} +} \ No newline at end of file diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetTermByIdTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetTermByIdTest.cs index 6f10f41e8..c4a2fbb25 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetTermByIdTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetTermByIdTest.cs @@ -2,7 +2,7 @@ using FluentAssertions; using Microsoft.EntityFrameworkCore.Query; using Moq; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.MediatR.Streetcode.Term.GetById; using Streetcode.DAL.Entities.Streetcode.TextContent; @@ -55,7 +55,7 @@ public async Task ShouldGetByIdSuccessfully_WhenIdExists(int termId) t => t.Id == request.Id, It.IsAny, IIncludableQueryable>>()), Times.Once); - _mockMapper.Verify(x => x.Map(term), Times.Once); + _mockMapper.Verify(x => x.Map(term), Times.Once); } [Theory] @@ -74,7 +74,7 @@ public async Task ShouldGetByIdSuccessfully_WithCorrectDataType(int termId) // Assert result.IsSuccess.Should().BeTrue(); - result.ValueOrDefault.Should().BeOfType(); + result.ValueOrDefault.Should().BeOfType(); } [Theory] @@ -96,13 +96,13 @@ public async Task ShouldGetByIdFailingly_WhenTermNotFound(int termId) _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); } - private static (Term, TermDTO) GetTermObjects(int termId) + private static (Term, TermDto) GetTermObjects(int termId) { var term = new Term() { Id = termId, }; - var termDto = new TermDTO() + var termDto = new TermDto() { Id = term.Id, }; diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/UpdateTermTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/UpdateTermTest.cs index f2e7f5fc2..dd980735c 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/UpdateTermTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/UpdateTermTest.cs @@ -2,7 +2,7 @@ using FluentAssertions; using MediatR; using Moq; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Interfaces.Logging; using Streetcode.BLL.MediatR.Streetcode.Term.Update; using Streetcode.DAL.Entities.Streetcode.TextContent; @@ -81,7 +81,7 @@ public async Task ShouldUpdateFailingly_WhenMappingFailed() var request = GetRequest(termDto); var expectedErrorMessage = _mockCannotConvertNullLocalizer["CannotConvertNullToTerm"].Value; - MockHelpers.SetupMockMapper(_mockMapper, null, request.Term); + MockHelpers.SetupMockMapper(_mockMapper, null, request.Term); // Act var result = await _handler.Handle(request, CancellationToken.None); @@ -112,15 +112,15 @@ public async Task ShouldUpdateFailingly_WhenSaveChangesAsyncFailed() _mockLogger.Verify(x => x.LogError(request, expectedErrorMessage), Times.Once); } - private static (Term, TermDTO) GetTermObjects() + private static (Term, TermDto) GetTermObjects() { var term = new Term(); - var termDto = new TermDTO(); + var termDto = new TermDto(); return (term, termDto); } - private static UpdateTermCommand GetRequest(TermDTO termDto) + private static UpdateTermCommand GetRequest(TermDto termDto) { return new UpdateTermCommand(termDto); } diff --git a/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs b/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs index 0a17e665c..2d1f0a6ba 100644 --- a/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs +++ b/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs @@ -11,6 +11,7 @@ using Streetcode.DAL.Entities.Streetcode; using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Entities.Users; +using Streetcode.DAL.Helpers; using Streetcode.DAL.Repositories.Interfaces.Base; namespace Streetcode.XUnitTest.Mocks; @@ -142,17 +143,6 @@ public static void SetupMockRelatedTermRepositoryGetAllAsync( .ReturnsAsync(getAllAsyncResult); } - public static void SetupMockTermRepositoryGetAllAsync( - Mock mockRepositoryWrapper, - List getAllAsyncResult) - { - mockRepositoryWrapper - .Setup(x => x.TermRepository.GetAllAsync( - It.IsAny>>(), - It.IsAny, IIncludableQueryable>>())) - .ReturnsAsync(getAllAsyncResult); - } - public static void SetupMockTextRepositoryGetAllAsync( Mock mockRepositoryWrapper, List getAllAsyncResult) @@ -164,6 +154,38 @@ public static void SetupMockTextRepositoryGetAllAsync( .ReturnsAsync(getAllAsyncResult); } + public static void SetupMockTermRepositoryGetAllPaginated( + Mock mockRepositoryWrapper, + PaginationResponse getAllPaginatedResult) + { + mockRepositoryWrapper + .Setup(x => x.TermRepository.GetAllPaginated( + It.IsAny(), + It.IsAny(), + It.IsAny>?>(), + It.IsAny>?>(), + It.IsAny, IIncludableQueryable>?>(), + It.IsAny>?>(), + It.IsAny>?>())) + .Returns(getAllPaginatedResult); + } + + public static void SetupMockStreetcodeRepositoryGetAllPaginated( + Mock mockRepositoryWrapper, + PaginationResponse getAllPaginatedResult) + { + mockRepositoryWrapper + .Setup(x => x.StreetcodeRepository.GetAllPaginated( + It.IsAny(), + It.IsAny(), + It.IsAny>?>(), + It.IsAny>?>(), + It.IsAny, IIncludableQueryable>?>(), + It.IsAny>?>(), + It.IsAny>?>())) + .Returns(getAllPaginatedResult); + } + // This method will return existing streetcode ids public static void SetupMockStreetcodeRepositoryFindAll(Mock mockRepositoryWrapper, List streetcodeIds) { diff --git a/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs b/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs index dfc3dfbd2..9471fe52a 100644 --- a/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs +++ b/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs @@ -273,7 +273,7 @@ private static PartnerCreateUpdateDto GetValidPartner() TargetUrl = "http://test.com", }, }, - Streetcodes = new List() + Streetcodes = new List() { new () { Id = 1 }, new () { Id = 3 }, diff --git a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/BaseTermValidatorTests.cs b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/BaseTermValidatorTests.cs index aaf174a5a..28ca4670a 100644 --- a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/BaseTermValidatorTests.cs +++ b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/BaseTermValidatorTests.cs @@ -2,6 +2,7 @@ using Streetcode.BLL.DTO.Streetcode.TextContent; using Streetcode.BLL.Validators.Streetcode.Text.Term; using Streetcode.XUnitTest.Mocks; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Xunit; namespace Streetcode.XUnitTest.Validators.Streetcode.Text.Term @@ -109,9 +110,9 @@ public void ShouldReturnValidationError_WhenTitleAndDescriptionExceedMaxLength() result.ShouldHaveValidationErrorFor(x => x.Description).WithErrorMessage(expectedDescriptionError); } - public static TermCreateDTO GetValidTermCreateDto() + public static TermCreateDto GetValidTermCreateDto() { - return new TermCreateDTO() + return new TermCreateDto() { Title = "Title Test", Description = "Description Test", diff --git a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/CreateTermValidatorTests.cs b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/CreateTermValidatorTests.cs index 25aaba0e3..edfd687aa 100644 --- a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/CreateTermValidatorTests.cs +++ b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/CreateTermValidatorTests.cs @@ -4,6 +4,7 @@ using FluentValidation; using Streetcode.BLL.DTO.Streetcode.TextContent; using FluentValidation.Results; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.MediatR.Streetcode.Term.Create; using Xunit; @@ -21,14 +22,14 @@ public CreateTermValidatorTests() _mockValidationLocalizer = new MockFailedToValidateLocalizer(); _mockBaseValidator = new Mock(_mockValidationLocalizer, _mockNamesLocalizer); - _mockBaseValidator.Setup(x => x.Validate(It.IsAny>())) + _mockBaseValidator.Setup(x => x.Validate(It.IsAny>())) .Returns(new ValidationResult()); } [Fact] public void ShouldCallBaseValidator() { - var query = new CreateTermCommand(new TermCreateDTO + var query = new CreateTermCommand(new TermCreateDto { Title = "Test Title", Description = "Test Description", @@ -38,7 +39,7 @@ public void ShouldCallBaseValidator() createValidator.Validate(query); - _mockBaseValidator.Verify(x => x.Validate(It.IsAny>()), Times.Once); + _mockBaseValidator.Verify(x => x.Validate(It.IsAny>()), Times.Once); } } } diff --git a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/UpdateTermValidatorTests.cs b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/UpdateTermValidatorTests.cs index 33382d286..92d8cde48 100644 --- a/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/UpdateTermValidatorTests.cs +++ b/Streetcode/Streetcode.XUnitTest/Validators/Streetcode/Text/Term/UpdateTermValidatorTests.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Query; using Moq; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.BLL.Validators.Streetcode.Text.Term; using TermEntity = Streetcode.DAL.Entities.Streetcode.TextContent.Term; using Streetcode.DAL.Repositories.Interfaces.Base; @@ -253,7 +253,7 @@ private void SetupRepositoryWrapper(int id, string title, string description) public UpdateTermCommand GetValidUpdateTermCommand() { - return new UpdateTermCommand(new TermDTO + return new UpdateTermCommand(new TermDto { Id = 1, Title = "Valid title",