From b98c28a022ba788bf7f1ce55f24218e75cb2d37c Mon Sep 17 00:00:00 2001 From: Michael-Kolpakov Date: Mon, 17 Mar 2025 22:24:43 +0200 Subject: [PATCH 1/4] Work was done with the GetAllTerms and GetAllStreetcodesShortHandler handlers so that they can support pagination --- .../DTO/Partners/PartnerCreateUpdateDto.cs | 15 +- .../Streetcode.BLL/DTO/Partners/PartnerDTO.cs | 12 +- .../Streetcode/GetAllStreetcodesShortDto.cs | 8 + .../DTO/Streetcode/StreetcodeShortDTO.cs | 8 - .../DTO/Streetcode/StreetcodeShortDto.cs | 8 + .../TextContent/Term/GetAllTermsDto.cs | 8 + .../TextContent/Term/TermCreateDto.cs | 8 + .../{TermDTO.cs => Term/TermDto.cs} | 8 +- .../Streetcode/TextContent/TermCreateDTO.cs | 8 - .../Mapping/Streetcode/StreetcodeProfile.cs | 2 +- .../Streetcode/TextContent/TermProfile.cs | 6 +- .../GetAllPublished/GetAllPublishedHandler.cs | 6 +- .../GetAllPublished/GetAllPublishedQuery.cs | 2 +- .../GetAllStreetcodesShortHandler.cs | 28 ++- .../GetAllStreetcodesShortQuery.cs | 3 +- .../GetStreetcodeShortByIdHandler.cs | 6 +- .../GetStreetcodeShortByIdQuery.cs | 2 +- .../Term/Create/CreateTermCommand.cs | 6 +- .../Term/Create/CreateTermHandler.cs | 8 +- .../Term/GetAll/GetAllTermsHandler.cs | 15 +- .../Term/GetAll/GetAllTermsQuery.cs | 6 +- .../Term/GetById/GetTermByIdHandler.cs | 8 +- .../Term/GetById/GetTermByIdQuery.cs | 4 +- .../Term/Update/UpdateTermCommand.cs | 4 +- .../Streetcode/StreetcodeController.cs | 10 +- .../Streetcode/TextContent/TermController.cs | 16 +- .../StreetcodeQueriesControllerTests.cs | 10 +- .../TextContent/TermControllerTests.cs | 17 +- .../Terms/ExtractCreateTestTermAttribute.cs | 6 +- .../Terms/ExtractUpdateTestTermAttribute.cs | 6 +- .../StreetCode/TextContent/TermClient.cs | 8 +- .../Partners/CreatePartnerTest.cs | 8 +- .../Streetcode/GetAllPublishedHandlerTests.cs | 6 +- .../GetAllStreetcodesShortHandlerTests.cs | 224 +++++++++++++----- .../GetStreetcodeShortByIdHandlerTests.cs | 8 +- .../StreetCode/Terms/CreateTermTest.cs | 18 +- .../StreetCode/Terms/GetAllTermsTest.cs | 173 +++++++++----- .../StreetCode/Terms/GetTermByIdTest.cs | 10 +- .../StreetCode/Terms/UpdateTermTest.cs | 10 +- .../Streetcode.XUnitTest/Mocks/MockHelpers.cs | 44 +++- .../Partner/BasePartnersValidatorTests.cs | 2 +- 41 files changed, 510 insertions(+), 255 deletions(-) create mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/GetAllStreetcodesShortDto.cs delete mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDTO.cs create mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/StreetcodeShortDto.cs create mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/GetAllTermsDto.cs create mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/Term/TermCreateDto.cs rename Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/{TermDTO.cs => Term/TermDto.cs} (61%) delete mode 100644 Streetcode/Streetcode.BLL/DTO/Streetcode/TextContent/TermCreateDTO.cs 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 index 9151ba484..3e24d1b0b 100644 --- a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs +++ b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs @@ -6,12 +6,20 @@ namespace Streetcode.BLL.DTO.Partners; 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(); +} 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/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/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/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 64d0da743..68cbc75a7 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortHandler.cs @@ -9,8 +9,8 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllShort; -public class GetAllStreetcodesShortHandler : IRequestHandler>> +public class GetAllStreetcodesShortHandler + : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -29,17 +29,25 @@ public GetAllStreetcodesShortHandler( _stringLocalizerNo = stringLocalizerNo; } - public async Task>> Handle(GetAllStreetcodesShortQuery request, CancellationToken cancellationToken) + public Task> Handle( + GetAllStreetcodesShortQuery request, + CancellationToken cancellationToken) { - var streetcodes = await _repositoryWrapper.StreetcodeRepository.GetAllAsync(); + var paginatedStreetcodesShort = _repositoryWrapper.StreetcodeRepository.GetAllPaginated(request.page, request.pageSize); - if (streetcodes.Any()) + if (!paginatedStreetcodesShort.Entities.Any()) { - return Result.Ok(_mapper.Map>(streetcodes)); + var errorMsg = _stringLocalizerNo["NoStreetcodesExistNow"].Value; + _logger.LogError(request, errorMsg); + return Task.FromResult(Result.Fail(errorMsg)); } - var errorMsg = _stringLocalizerNo["NoStreetcodesExistNow"].Value; - _logger.LogError(request, errorMsg); - return Result.Fail(errorMsg); + var getAllStreetcodeShortDto = new GetAllStreetcodesShortDto() + { + TotalAmount = paginatedStreetcodesShort.TotalItems, + StreetcodesShort = _mapper.Map>(paginatedStreetcodesShort.Entities), + }; + + return Task.FromResult(Result.Ok(getAllStreetcodeShortDto)); } -} \ 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 92d8029c8..d118d28c9 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetAllShort/GetAllStreetcodesShortQuery.cs @@ -4,4 +4,5 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetAllShort; -public record GetAllStreetcodesShortQuery : IRequest>>; \ No newline at end of file +public record GetAllStreetcodesShortQuery(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 d6825a8c7..fcb0d321d 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdHandler.cs @@ -9,7 +9,7 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetShortById; -public class GetStreetcodeShortByIdHandler : IRequestHandler> +public class GetStreetcodeShortByIdHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repository; @@ -28,10 +28,10 @@ public GetStreetcodeShortByIdHandler( _stringLocalizerCannotMap = stringLocalizerCannotMap; } - public async Task> Handle(GetStreetcodeShortByIdQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetStreetcodeShortByIdQuery request, CancellationToken cancellationToken) { var streetcode = await _repository.StreetcodeRepository.GetFirstOrDefaultAsync(st => st.Id == request.Id); - 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 20824b732..c03810dc4 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Streetcode/GetShortById/GetStreetcodeShortByIdQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Streetcode.Streetcode.GetShortById; public record GetStreetcodeShortByIdQuery(int Id) - : 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 d94522da2..8654d1ec9 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsHandler.cs @@ -1,12 +1,12 @@ using AutoMapper; using FluentResults; using MediatR; -using Streetcode.BLL.DTO.Streetcode.TextContent; +using Streetcode.BLL.DTO.Streetcode.TextContent.Term; using Streetcode.DAL.Repositories.Interfaces.Base; namespace Streetcode.BLL.MediatR.Streetcode.Term.GetAll; -public class GetAllTermsHandler : IRequestHandler>> +public class GetAllTermsHandler : IRequestHandler> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -17,10 +17,15 @@ public GetAllTermsHandler(IRepositoryWrapper repositoryWrapper, IMapper mapper) _mapper = mapper; } - public async Task>> Handle(GetAllTermsQuery request, CancellationToken cancellationToken) + public Task> Handle(GetAllTermsQuery request, CancellationToken cancellationToken) { - var terms = await _repositoryWrapper.TermRepository.GetAllAsync(); + var paginatedTerms = _repositoryWrapper.TermRepository.GetAllPaginated(request.page, request.pageSize); + var getAllTermsDto = new GetAllTermsDto() + { + TotalAmount = paginatedTerms.TotalItems, + Terms = _mapper.Map>(paginatedTerms.Entities), + }; - return Result.Ok(_mapper.Map>(terms)); + return Task.FromResult(Result.Ok(getAllTermsDto)); } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Streetcode/Term/GetAll/GetAllTermsQuery.cs index 006ba2d0b..f3bbecf25 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 - : IRequest>>; +public record GetAllTermsQuery(ushort? page = null, ushort? pageSize = null) + : IRequest>; 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.WebApi/Controllers/Streetcode/StreetcodeController.cs b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/StreetcodeController.cs index f2cef6edf..b1453ed64 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())); + return HandleResult(await Mediator.Send(new GetAllStreetcodesShortQuery(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))); diff --git a/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs b/Streetcode/Streetcode.WebApi/Controllers/Streetcode/TextContent/TermController.cs index a4153fc83..919b1f321 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))] - public async Task GetAll() + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable))] + public async Task GetAll([FromQuery] ushort? page, [FromQuery] ushort? pageSize) { - return HandleResult(await Mediator.Send(new GetAllTermsQuery())); + return HandleResult(await Mediator.Send(new GetAllTermsQuery(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/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 e6ac9a4d9..d40470653 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs @@ -1,5 +1,5 @@ using System.Net; -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; @@ -29,11 +29,12 @@ public async Task GetAll_ShouldReturnSuccessStatusCode_WhenTermsReceived() { // Act var response = await this.Client.GetAllAsync(); - var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize>(response.Content); + var returnedValue = CaseIsensitiveJsonDeserializer.Deserialize(response.Content); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(returnedValue); + Assert.NotEmpty(returnedValue.Terms); } [Fact] @@ -44,7 +45,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); @@ -63,7 +64,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); @@ -79,7 +80,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); @@ -99,7 +100,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(0, (int)response.StatusCode); @@ -115,7 +116,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); @@ -131,7 +132,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 c9c1f4d6e..038cecda5 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs @@ -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/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 227a66b18..28e602a12 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetAllStreetcodesShortHandlerTests.cs @@ -1,9 +1,13 @@ -using AutoMapper; +using System.Linq.Expressions; +using AutoMapper; +using FluentAssertions; +using Microsoft.EntityFrameworkCore.Query; using Moq; 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.Helpers; using Streetcode.DAL.Repositories.Interfaces.Base; using Streetcode.XUnitTest.Mocks; using Xunit; @@ -12,88 +16,202 @@ namespace Streetcode.XUnitTest.MediatRTests.StreetCode.Streetcode; public class GetAllStreetcodesShortHandlerTests { - private readonly Mock _repositoryMock; - private readonly Mock _mapperMock; - private readonly Mock _loggerMock; - private readonly MockNoSharedResourceLocalizer _mockLocalizer; + private readonly Mock _mockRepository; + private readonly Mock _mockMapper; + private readonly Mock _mockLogger; + private readonly MockNoSharedResourceLocalizer _mockNoSharedResourceLocalizer; private readonly GetAllStreetcodesShortHandler _handler; public GetAllStreetcodesShortHandlerTests() { - _repositoryMock = new Mock(); - _mapperMock = new Mock(); - _loggerMock = new Mock(); - _mockLocalizer = new MockNoSharedResourceLocalizer(); - + _mockRepository = new Mock(); + _mockMapper = new Mock(); + _mockLogger = new Mock(); + _mockNoSharedResourceLocalizer = new MockNoSharedResourceLocalizer(); _handler = new GetAllStreetcodesShortHandler( - _repositoryMock.Object, - _mapperMock.Object, - _loggerMock.Object, - _mockLocalizer); + _mockRepository.Object, + _mockMapper.Object, + _mockLogger.Object, + _mockNoSharedResourceLocalizer); } [Fact] - public async Task Handle_WhenStreetcodesExist_ReturnsStreetcodeShortDTOs() + public async Task ShouldGetAllSuccessfully_WhenStreetcodesExist() { // Arrange - var testStreetcodes = GetTestStreetcodes(3); + const int objectsNumber = 2; + var (streetcodeContentsPaginated, streetcodeShortDtoList) = GetStreetcodeObjects(objectsNumber); + var request = GetRequest(); - SetupRepositoryMock(testStreetcodes); + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, streetcodeContentsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + streetcodeShortDtoList, + streetcodeContentsPaginated.Entities); // Act - var result = await _handler.Handle(new GetAllStreetcodesShortQuery(), CancellationToken.None); + var result = await _handler.Handle(request, CancellationToken.None); // Assert - Assert.Multiple(() => - { - Assert.True(result.IsSuccess); - Assert.Equal(testStreetcodes.Count, result.Value.Count()); - _repositoryMock.Verify(repo => repo.StreetcodeRepository.GetAllAsync(null, null), Times.Once); - _mapperMock.Verify(m => m.Map>(testStreetcodes), Times.Once); - }); + var initialTermsList = streetcodeContentsPaginated.Entities.ToList(); + result.IsSuccess.Should().BeTrue(); + result.Value.StreetcodesShort.Should().SatisfyRespectively( + first => first.Id.Should().Be(initialTermsList[0].Id), + second => second.Id.Should().Be(initialTermsList[1].Id)); + result.Value.TotalAmount.Should().Be(objectsNumber); + VerifyGetAllPaginatedAndMockingOperationsExecution(streetcodeContentsPaginated.Entities); } [Fact] - public async Task Handle_WhenNoStreetcodesExist_ReturnsError() + public async Task ShouldGetAllSuccessfully_WithCorrectDataType() { // Arrange - const string expectedErrorKey = "NoStreetcodesExistNow"; - string expectedErrorValue = _mockLocalizer[expectedErrorKey]; - var query = new GetAllStreetcodesShortQuery(); + const int objectsNumber = 2; + var (termsPaginated, termDtoList) = GetStreetcodeObjects(objectsNumber); + var request = GetRequest(); - SetupRepositoryMock(new List()); + MockHelpers.SetupMockStreetcodeRepositoryGetAllPaginated(_mockRepository, termsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + termDtoList, + termsPaginated.Entities); // Act - var result = await _handler.Handle(query, CancellationToken.None); + var result = await _handler.Handle(request, CancellationToken.None); // Assert - Assert.Multiple(() => - { - Assert.False(result.IsSuccess); - Assert.Contains(expectedErrorValue, result.Errors.Single().Message); - _loggerMock.Verify(logger => logger.LogError(query, expectedErrorValue), Times.Once); - }); + result.IsSuccess.Should().BeTrue(); + result.ValueOrDefault.Should().BeOfType(); } - private static List GetTestStreetcodes(int count) + [Fact] + public async Task ShouldGetAllFailingly_WhenStreetcodesNotExist() { - return Enumerable.Range(1, count) - .Select(i => new StreetcodeContent { Id = i }) + // Arrange + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyStreetcodeObjects(); + var request = GetRequest(); + 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); + } + + [Fact] + public async Task ShouldGetAllSuccessfully_WithCorrectPageSize() + { + // Arrange + const ushort pageNumber = 1; + const ushort pageSize = 2; + var (termsPaginated, termDtoList) = GetStreetcodeObjects(pageSize); + var request = GetRequest(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(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(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(ushort? page = null, ushort? pageSize = null) + { + return new GetAllStreetcodesShortQuery(page, pageSize); } - private void SetupRepositoryMock(List? streetcodes) + private void VerifyGetAllPaginatedAndMockingOperationsExecution(IEnumerable streetcodeContentList) { - _repositoryMock - .Setup(repo => repo.StreetcodeRepository.GetAllAsync(null, null)) - .ReturnsAsync(streetcodes!); - - _mapperMock - .Setup(m => m.Map>(It.IsAny>())) - .Returns((IEnumerable src) => - src.Select(s => new StreetcodeShortDTO() - { - Id = s.Id, - }).ToList()); + _mockRepository.Verify( + x => x.StreetcodeRepository.GetAllPaginated( + It.IsAny(), + It.IsAny(), + It.IsAny>?>(), + It.IsAny>?>(), + It.IsAny, IIncludableQueryable>?>(), + It.IsAny>?>(), + It.IsAny>?>()), + Times.Once); + _mockMapper.Verify(x => x.Map>(streetcodeContentList), Times.Once); } -} \ 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 d19180e66..4ac3b0570 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Streetcode/GetStreetcodeShortByIdHandlerTests.cs @@ -39,7 +39,7 @@ public async Task Handle_WhenStreetcodeExists_ReturnsStreetcodeShortDTO() // Arrange var request = new GetStreetcodeShortByIdQuery(Id: 1); var testStreetcode = new StreetcodeContent { Id = request.Id }; - var expectedDto = new StreetcodeShortDTO { Id = request.Id }; + var expectedDto = new StreetcodeShortDto { Id = request.Id }; SetupRepositoryMock(testStreetcode); SetupMapperMock(); @@ -65,7 +65,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); @@ -89,7 +89,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 31f341563..0e4d235f1 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/StreetCode/Terms/GetAllTermsTest.cs @@ -3,9 +3,10 @@ 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.Helpers; using Streetcode.DAL.Repositories.Interfaces.Base; using Streetcode.XUnitTest.Mocks; using Xunit; @@ -29,107 +30,173 @@ public GetAllTermsTest() public async Task ShouldGetAllSuccessfully_WhenTermsExist() { // Arrange - var (termsList, termDtoList) = GetTermObjectsLists(); + const int objectsNumber = 2; + var (termsPaginated, termDtoList) = GetTermObjects(objectsNumber); var request = GetRequest(); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper, List>(_mockMapper, termDtoList, termsList); + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_mockRepository, termsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + termDtoList, + termsPaginated.Entities); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert + var initialTermsList = termsPaginated.Entities.ToList(); result.IsSuccess.Should().BeTrue(); - result.Value.Should().SatisfyRespectively( - first => first.Id.Should().Be(termsList[0].Id), - second => second.Id.Should().Be(termsList[1].Id)); - result.Value.Should().HaveCount(2); - VerifyGetAllAsyncAndMockingOperationsExecution(termsList); + result.Value.Terms.Should().SatisfyRespectively( + first => first.Id.Should().Be(initialTermsList[0].Id), + second => second.Id.Should().Be(initialTermsList[1].Id)); + result.Value.TotalAmount.Should().Be(objectsNumber); + VerifyGetAllPaginatedAndMockingOperationsExecution(termsPaginated.Entities); } [Fact] public async Task ShouldGetAllSuccessfully_WithCorrectDataType() { // Arrange - var (termsList, termDtoList) = GetTermObjectsLists(); + const int objectsNumber = 2; + var (termsPaginated, termDtoList) = GetTermObjects(objectsNumber); var request = GetRequest(); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper, List>(_mockMapper, termDtoList, termsList); + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_mockRepository, termsPaginated); + MockHelpers.SetupMockMapper, IEnumerable>( + _mockMapper, + termDtoList, + termsPaginated.Entities); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert result.IsSuccess.Should().BeTrue(); - result.ValueOrDefault.Should().BeOfType>(); + result.ValueOrDefault.Should().BeOfType(); } [Fact] public async Task ShouldGetAllSuccessfully_WhenTermsNotExist() { // Arrange - var (termsList, termDtoList) = GetEmptyTermObjectsLists(); + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyTermObjects(); var request = GetRequest(); - MockHelpers.SetupMockTermRepositoryGetAllAsync(_mockRepository, termsList); - MockHelpers.SetupMockMapper(_mockMapper, termDtoList, termsList); + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); // Act var result = await _handler.Handle(request, CancellationToken.None); // Assert result.IsSuccess.Should().BeTrue(); - result.Value.Should().BeEmpty(); - result.ValueOrDefault.Should().BeAssignableTo>(); - VerifyGetAllAsyncAndMockingOperationsExecution(termsList); + result.Value.Terms.Should().BeEmpty(); + result.ValueOrDefault.Should().BeAssignableTo(); + VerifyGetAllPaginatedAndMockingOperationsExecution(emptyTermsPaginated.Entities); } - private static (List, List) GetTermObjectsLists() + [Fact] + public async Task ShouldGetAllSuccessfully_WithCorrectPageSize() + { + // Arrange + const ushort pageNumber = 1; + const ushort pageSize = 2; + var (termsPaginated, termDtoList) = GetTermObjects(pageSize); + var request = GetRequest(pageNumber, pageSize); + + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_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.Terms.Should().NotBeEmpty(); + result.Value.TotalAmount.Should().Be(pageSize); + } + + [Fact] + public async Task ShouldGetAllPaginatedSuccessfully_WhenPageNumberIsTooBig() + { + // Arrange + const ushort pageNumber = 99; + const ushort pageSize = 2; + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyTermObjects(); + var request = GetRequest(pageNumber, pageSize); + + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); + + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsSuccess.Should().BeTrue(); + result.Value.Terms.Should().BeEmpty(); + } + + [Theory] + [InlineData(0, 1)] + [InlineData(1, 0)] + public async Task ShouldGetAllPaginatedSuccessfully_WhenPageNumberOrSizeIsZero(ushort pageNumber, ushort pageSize) + { + // Arrange + var (emptyTermsPaginated, emptyTermDtoList) = GetEmptyTermObjects(); + var request = GetRequest(pageNumber, pageSize); + + MockHelpers.SetupMockTermRepositoryGetAllPaginated(_mockRepository, emptyTermsPaginated); + MockHelpers.SetupMockMapper(_mockMapper, emptyTermDtoList, emptyTermsPaginated.Entities); + + // Act + var result = await _handler.Handle(request, CancellationToken.None); + + // Assert + result.IsSuccess.Should().BeTrue(); + result.Value.Terms.Should().BeEmpty(); + } + + private static (PaginationResponse, List) GetTermObjects(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); + var termsList = Enumerable + .Range(0, count) + .Select(i => new Term() { Id = i }) + .ToList(); + var termsPaginated = PaginationResponse.Create(termsList.AsQueryable()); + + var termDtoList = Enumerable + .Range(0, count) + .Select(i => new TermDto() { Id = termsList[i].Id }) + .ToList(); + + return (termsPaginated, termDtoList); } - private static (List, List) GetEmptyTermObjectsLists() + private static (PaginationResponse, List) GetEmptyTermObjects() { - return (new List(), new List()); + return (PaginationResponse.Create(new List().AsQueryable()), new List()); } - private static GetAllTermsQuery GetRequest() + private static GetAllTermsQuery GetRequest(ushort? page = null, ushort? pageSize = null) { - return new GetAllTermsQuery(); + return new GetAllTermsQuery(page, pageSize); } - private void VerifyGetAllAsyncAndMockingOperationsExecution(List termsList) + private void VerifyGetAllPaginatedAndMockingOperationsExecution(IEnumerable termsList) { _mockRepository.Verify( - x => x.TermRepository.GetAllAsync( - It.IsAny>>(), - It.IsAny, IIncludableQueryable>>()), + x => x.TermRepository.GetAllPaginated( + It.IsAny(), + It.IsAny(), + It.IsAny>?>(), + It.IsAny>?>(), + It.IsAny, IIncludableQueryable>?>(), + It.IsAny>?>(), + It.IsAny>?>()), Times.Once); - _mockMapper.Verify(x => x.Map>(termsList), Times.Once); + _mockMapper.Verify(x => x.Map>(termsList), Times.Once); } } 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 43879d5a0..26d633c2a 100644 --- a/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs +++ b/Streetcode/Streetcode.XUnitTest/Mocks/MockHelpers.cs @@ -10,6 +10,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; @@ -141,17 +142,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) @@ -163,6 +153,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 901ec404c..b42bcd41b 100644 --- a/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs +++ b/Streetcode/Streetcode.XUnitTest/Validators/Partner/BasePartnersValidatorTests.cs @@ -271,7 +271,7 @@ private PartnerCreateUpdateDto GetValidPartner() TargetUrl = "http://test.com", }, }, - Streetcodes = new List() + Streetcodes = new List() { new () { Id = 1 }, new () { Id = 3 }, From 8f77feeb630bfcd9a2e3fe05fbdbfe03b0375215 Mon Sep 17 00:00:00 2001 From: Michael-Kolpakov Date: Mon, 17 Mar 2025 23:49:50 +0200 Subject: [PATCH 2/4] Solved problem with absent logo fields in request response --- .../DTO/Partners/GetAllPartnersDto.cs | 8 + .../DTO/Partners/GetAllPartnersResponseDTO.cs | 14 -- .../Partners/{PartnerDTO.cs => PartnerDto.cs} | 5 +- .../Mapping/Partners/PartnerProfile.cs | 2 +- .../Partners/Create/CreatePartnerHandler.cs | 8 +- .../Partners/Create/CreatePartnerQuery.cs | 2 +- .../Partners/Delete/DeletePartnerHandler.cs | 6 +- .../Partners/Delete/DeletePartnerQuery.cs | 2 +- .../Partners/GetAll/GetAllPartnersHandler.cs | 58 +++--- .../Partners/GetAll/GetAllPartnersQuery.cs | 2 +- .../Partners/GetById/GetPartnerByIdHandler.cs | 6 +- .../Partners/GetById/GetPartnerByIdQuery.cs | 2 +- .../GetPartnersByIsKeyPartnerHandler.cs | 6 +- .../GetPartnersByIsKeyPartnerQuery.cs | 2 +- .../GetPartnersByStreetcodeIdHandler.cs | 8 +- .../GetPartnersByStreetcodeIdQuery.cs | 2 +- ...etPartnersToUpdateByStreetcodeIdHandler.cs | 8 +- .../GetPartnersToUpdateByStreetcodeIdQuery.cs | 2 +- .../Partners/Update/UpdatePartnerHandler.cs | 6 +- .../Partners/Update/UpdatePartnerQuery.cs | 3 +- .../Partners/PartnersController.cs | 16 +- .../Partners/PartnersControllerTests.cs | 7 +- .../Partners/CreatePartnerTest.cs | 10 +- .../Partners/DeletePartnerTest.cs | 9 +- .../Partners/GetAllPartnersTest.cs | 180 +++++++++--------- .../Partners/GetParnerByStreetcodeIdTest.cs | 17 +- .../Partners/GetPartnerByIdTest.cs | 15 +- 27 files changed, 204 insertions(+), 202 deletions(-) create mode 100644 Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersDto.cs delete mode 100644 Streetcode/Streetcode.BLL/DTO/Partners/GetAllPartnersResponseDTO.cs rename Streetcode/Streetcode.BLL/DTO/Partners/{PartnerDTO.cs => PartnerDto.cs} (85%) 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/PartnerDTO.cs b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs similarity index 85% rename from Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs rename to Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs index 3e24d1b0b..97168fdf0 100644 --- a/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDTO.cs +++ b/Streetcode/Streetcode.BLL/DTO/Partners/PartnerDto.cs @@ -1,9 +1,10 @@ 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; } @@ -22,4 +23,6 @@ public class PartnerDTO public List PartnerSourceLinks { get; set; } = new List(); public List Streetcodes { get; set; } = new List(); + + public ImageDTO? Logo { get; set; } } 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/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 c79cd86cb..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) @@ -39,7 +39,7 @@ public async Task> Handle(DeletePartnerQuery request, Cancell try { _repositoryWrapper.SaveChanges(); - return Result.Ok(_mapper.Map(partner)); + 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 46b48113a..a37d93b85 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersHandler.cs @@ -2,57 +2,63 @@ using FluentResults; using MediatR; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Localization; using Streetcode.BLL.DTO.Partners; -using Streetcode.BLL.Interfaces.Logging; -using Streetcode.BLL.SharedResource; +using Streetcode.BLL.Interfaces.BlobStorage; 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; 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) + public GetAllPartnersHandler( + IRepositoryWrapper repositoryWrapper, + IMapper mapper, + IBlobService blobService) { _repositoryWrapper = repositoryWrapper; _mapper = mapper; - _logger = logger; - _stringLocalizeCannotFind = stringLocalizeCannotFind; + _blobService = blobService; } - public Task> Handle(GetAllPartnersQuery request, CancellationToken cancellationToken) + public Task> Handle(GetAllPartnersQuery request, CancellationToken cancellationToken) { - PaginationResponse paginationResponse = _repositoryWrapper + var paginationResponse = _repositoryWrapper .PartnersRepository .GetAllPaginated( request.page, request.pageSize, include: partnersCollection => partnersCollection - .Include(pl => pl.PartnerSourceLinks) - .Include(p => p.Streetcodes)); + .Include(x => x.PartnerSourceLinks) + .Include(x => x.Streetcodes) + .Include(x => x.Logo!)); - if (paginationResponse is null) - { - string errorMsg = _stringLocalizeCannotFind["CannotFindAnyPartners"].Value; - _logger.LogError(request, errorMsg); - return Task.FromResult(Result.Fail(new Error(errorMsg))); - } - - GetAllPartnersResponseDTO getAllPartnersResponseDTO = new GetAllPartnersResponseDTO() + var partnersDtos = MapToPartnerDtos(paginationResponse.Entities); + var getAllPartnersDto = new GetAllPartnersDto() { TotalAmount = paginationResponse.TotalItems, - Partners = _mapper.Map>(paginationResponse.Entities), + Partners = partnersDtos, }; - return Task.FromResult(Result.Ok(getAllPartnersResponseDTO)); + return Task.FromResult(Result.Ok(getAllPartnersDto)); + } + + private IEnumerable MapToPartnerDtos(IEnumerable partnerEntities) + { + var partnerDtosList = _mapper.Map>(partnerEntities).ToList(); + + foreach (var partnerDto in partnerDtosList) + { + if (partnerDto.Logo is not null) + { + partnerDto.Logo.Base64 = _blobService.FindFileInStorageAsBase64(partnerDto.Logo.BlobName); + } + } + + return partnerDtosList; } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetAll/GetAllPartnersQuery.cs index a8b1e0197..e6ba80d37 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) - : 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 6be5609be..17b602b33 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdHandler.cs @@ -10,7 +10,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeId; -public class GetPartnersByStreetcodeIdHandler : IRequestHandler>> +public class GetPartnersByStreetcodeIdHandler : IRequestHandler>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -25,7 +25,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) { var partners = await _repositoryWrapper.PartnersRepository .GetAllAsync( @@ -36,9 +36,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)); } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs index fe677b058..6022677a7 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetByStreetcodeId/GetPartnersByStreetcodeIdQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeId; public record GetPartnersByStreetcodeIdQuery(int StreetcodeId) - : IRequest>>; + : IRequest>>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs index d48d5104e..26e85e77e 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdHandler.cs @@ -10,7 +10,7 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeIdToUpdate { - public class GetPartnersToUpdateByStreetcodeIdHandler : IRequestHandler>> + public class GetPartnersToUpdateByStreetcodeIdHandler : IRequestHandler>> { private readonly IMapper _mapper; private readonly IRepositoryWrapper _repositoryWrapper; @@ -25,7 +25,7 @@ public GetPartnersToUpdateByStreetcodeIdHandler(IMapper mapper, IRepositoryWrapp _stringLocalizerCannotFind = stringLocalizerCannotFind; } - public async Task>> Handle(GetPartnersToUpdateByStreetcodeIdQuery request, CancellationToken cancellationToken) + public async Task>> Handle(GetPartnersToUpdateByStreetcodeIdQuery request, CancellationToken cancellationToken) { var partners = await _repositoryWrapper.PartnersRepository .GetAllAsync( @@ -37,10 +37,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)); } } } diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs index 0bf0bfd57..91932a84a 100644 --- a/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs +++ b/Streetcode/Streetcode.BLL/MediatR/Partners/GetToUpdateByStreetcodeId/GetPartnersToUpdateByStreetcodeIdQuery.cs @@ -5,4 +5,4 @@ namespace Streetcode.BLL.MediatR.Partners.GetByStreetcodeIdToUpdate; public record class GetPartnersToUpdateByStreetcodeIdQuery(int StreetcodeId) - : IRequest>>; + : IRequest>>; diff --git a/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs b/Streetcode/Streetcode.BLL/MediatR/Partners/Update/UpdatePartnerHandler.cs index dcef045f2..60d247c2b 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); @@ -65,7 +65,7 @@ public async Task> Handle(UpdatePartnerQuery request, Cancell } _repositoryWrapper.SaveChanges(); - var dbo = _mapper.Map(partner); + 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.WebApi/Controllers/Partners/PartnersController.cs b/Streetcode/Streetcode.WebApi/Controllers/Partners/PartnersController.cs index 670b97f5e..4933b426a 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) { return HandleResult(await Mediator.Send(new GetAllPartnersQuery(page, pageSize))); @@ -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))); @@ -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))); @@ -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.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 async Task СreatePartner_ReturnBadRequest_WhenValidationFailed() 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.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/CreatePartnerTest.cs index 038cecda5..b81ca8f1c 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() this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(testPartner); - this.mockMapper.Setup(x => x.Map(It.IsAny())) + this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDto()); this.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() this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(testPartner); - this.mockMapper.Setup(x => x.Map(It.IsAny())) + this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDto()); this.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, diff --git a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs index 3e75602db..a12ec3294 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/DeletePartnerTest.cs @@ -7,7 +7,6 @@ using Streetcode.BLL.MediatR.Partners.Delete; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; -using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Repositories.Interfaces.Base; using Xunit; @@ -34,7 +33,7 @@ public async Task ShouldDeleteSuccessfully() // Arrange var testPartner = GetPartner(); - this.mockMapper.Setup(x => x.Map(It.IsAny())) + this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDTO()); this.mockRepository.Setup(x => x.PartnersRepository.GetFirstOrDefaultAsync(It.IsAny>>(), null)) @@ -84,7 +83,7 @@ public async Task ShouldThrowExeption_SaveChangesAsyncIsNotSuccessful() var testPartner = GetPartner(); var expectedError = "The partner wasn`t added"; - this.mockMapper.Setup(x => x.Map(It.IsAny())) + this.mockMapper.Setup(x => x.Map(It.IsAny())) .Returns(GetPartnerDTO()); this.mockRepository.Setup(x => x.PartnersRepository.GetFirstOrDefaultAsync(It.IsAny>>(), null)) @@ -109,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 e623bbcb5..6d1cacee8 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetAllPartnersTest.cs @@ -1,17 +1,11 @@ using System.Linq.Expressions; using AutoMapper; using Microsoft.EntityFrameworkCore.Query; -using Microsoft.Extensions.Localization; using Moq; -using Streetcode.BLL.DTO.AdditionalContent; using Streetcode.BLL.DTO.Partners; -using Streetcode.BLL.Interfaces.Logging; -using Streetcode.BLL.MediatR.AdditionalContent.Tag.GetAll; +using Streetcode.BLL.Interfaces.BlobStorage; using Streetcode.BLL.MediatR.Partners.GetAll; -using Streetcode.BLL.SharedResource; -using Streetcode.DAL.Entities.AdditionalContent; using Streetcode.DAL.Entities.Partners; -using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Helpers; using Streetcode.DAL.Repositories.Interfaces.Base; using Xunit; @@ -20,137 +14,142 @@ 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; 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(); + _handler = new GetAllPartnersHandler( + _mockRepository.Object, + _mockMapper.Object, + _mockBlobService.Object); } [Fact] public async Task ShouldReturnSuccessfully_CorrectType() { // Arrange - this.SetupPaginatedRepository(GetPartnerList()); - this.SetupMapper(GetListPartnerDTO()); - - var handler = new GetAllPartnersHandler(this.mockRepository.Object, this.mockMapper.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); + SetupPaginatedRepository(GetPartnerList()); + SetupBlobService(); + 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)); } [Fact] public async Task ShouldReturnSuccessfully_CountMatch() { // Arrange - this.SetupPaginatedRepository(GetPartnerList()); - this.SetupMapper(GetListPartnerDTO()); - - var handler = new GetAllPartnersHandler(this.mockRepository.Object, this.mockMapper.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); + SetupPaginatedRepository(GetPartnerList()); + SetupBlobService(); + 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.Equal(GetPartnerList().Count(), result.Value.Partners.Count()) - ); + () => Assert.Equal(GetPartnerList().Count(), result.Value.Partners.Count())); } [Fact] public async Task Handler_Returns_Correct_PageSize() { // Arrange - ushort pageSize = 3; - this.SetupPaginatedRepository(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); + const ushort pageSize = 3; + var partnersList = GetPartnerList() + .Take(pageSize); + var partnersDtoList = GetListPartnerDto() + .Take(pageSize) + .ToList(); + SetupPaginatedRepository(partnersList); + SetupBlobService(); + SetupMapper(partnersDtoList); // Act - var result = await handler.Handle(new GetAllPartnersQuery(page: 1, pageSize: pageSize), CancellationToken.None); + var result = await _handler.Handle(new GetAllPartnersQuery(1, pageSize), CancellationToken.None); // Assert Assert.Multiple( - () => Assert.IsType>(result.Value.Partners), + () => Assert.IsType>(result.Value.Partners), () => Assert.Equal(pageSize, result.Value.Partners.Count())); } private static IEnumerable GetPartnerList() { - var partners = new List - { - new Partner - { - Id = 1, - }, - new Partner - { - Id = 2, - }, - new Partner - { - Id = 3, - }, - new Partner - { - Id = 4, - }, - new Partner + var partners = new List() { - Id = 5, - }, - }; + new Partner() + { + Id = 1, + }, + new Partner() + { + Id = 2, + }, + new Partner() + { + Id = 3, + }, + new Partner() + { + Id = 4, + }, + new Partner() + { + Id = 5, + }, + }; return partners; } - private static List GetListPartnerDTO() + private static List GetListPartnerDto() { - var partnersDTO = new List - { - new PartnerDTO - { - Id = 1, - }, - new PartnerDTO - { - Id = 2, - }, - new PartnerDTO - { - Id = 3, - }, - new PartnerDTO - { - Id = 4, - }, - new PartnerDTO + var partnersDto = new List() { - Id = 5, - }, - }; - - return partnersDTO; + new PartnerDto() + { + Id = 1, + }, + new PartnerDto() + { + Id = 2, + }, + new PartnerDto() + { + Id = 3, + }, + new PartnerDto() + { + Id = 4, + }, + new PartnerDto() + { + Id = 5, + }, + }; + + return partnersDto; } private void SetupPaginatedRepository(IEnumerable returnList) { - this.mockRepository.Setup(repo => repo.PartnersRepository.GetAllPaginated( + _mockRepository.Setup(repo => repo.PartnersRepository.GetAllPaginated( It.IsAny(), It.IsAny(), It.IsAny>?>(), @@ -161,10 +160,17 @@ private void SetupPaginatedRepository(IEnumerable returnList) .Returns(PaginationResponse.Create(returnList.AsQueryable())); } - private void SetupMapper(IEnumerable returnList) + private void SetupBlobService() + { + _mockBlobService + .Setup(x => x.FindFileInStorageAsBase64(It.IsAny())) + .Returns(_testBase64String); + } + + 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 06560cb6f..d426b4b0d 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetParnerByStreetcodeIdTest.cs @@ -10,7 +10,6 @@ using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; using Streetcode.DAL.Entities.Streetcode; -using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Repositories.Interfaces.Base; using Xunit; @@ -52,7 +51,7 @@ public async Task ShouldReturnSuccessfully_ExistingId() this.mockMapper .Setup(x => x - .Map>(It.IsAny>())) + .Map>(It.IsAny>())) .Returns(GetPartnerDTOList()); var handler = new GetPartnersByStreetcodeIdHandler(this.mockMapper.Object, this.mockRepository.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); @@ -87,7 +86,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() this.mockMapper .Setup(x => x - .Map>(It.IsAny>())) + .Map>(It.IsAny>())) .Returns(GetPartnerDTOList()); var handler = new GetPartnersByStreetcodeIdHandler(this.mockMapper.Object, this.mockRepository.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); @@ -99,7 +98,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() Assert.Multiple( () => Assert.NotNull(result), () => Assert.True(result.IsSuccess), - () => Assert.IsType>(result.ValueOrDefault)); + () => Assert.IsType>(result.ValueOrDefault)); } [Fact] @@ -128,8 +127,8 @@ public async Task ShouldReturnSuccessfully_EmptyList() // Asset Assert.Multiple( - () => Assert.IsType>>(result), - () => Assert.IsAssignableFrom>(result.Value), + () => Assert.IsType>>(result), + () => Assert.IsAssignableFrom>(result.Value), () => Assert.Empty(result.Value)); } @@ -160,11 +159,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 d6c7b3642..72e2d73bb 100644 --- a/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs +++ b/Streetcode/Streetcode.XUnitTest/MediatRTests/Partners/GetPartnerByIdTest.cs @@ -8,7 +8,6 @@ using Streetcode.BLL.MediatR.Partners.GetById; using Streetcode.BLL.SharedResource; using Streetcode.DAL.Entities.Partners; -using Streetcode.DAL.Entities.Streetcode.TextContent; using Streetcode.DAL.Repositories.Interfaces.Base; using Xunit; @@ -44,7 +43,7 @@ public async Task ShouldReturnSuccessfully_ExistingId() this.mockMapper .Setup(x => x - .Map(It.IsAny())) + .Map(It.IsAny())) .Returns(GetPartnerDTO()); var handler = new GetPartnerByIdHandler(this.mockRepository.Object, this.mockMapper.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); @@ -84,7 +83,7 @@ public async Task ShouldReturnErrorResponse_NotExistingId() this.mockMapper .Setup(x => x - .Map(It.IsAny())) + .Map(It.IsAny())) .Returns(GetPartnerDTOWithNotExistingId()); var handler = new GetPartnerByIdHandler(this.mockRepository.Object, this.mockMapper.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); @@ -113,7 +112,7 @@ public async Task ShouldReturnSuccessfully_CorrectType() this.mockMapper .Setup(x => x - .Map(It.IsAny())) + .Map(It.IsAny())) .Returns(GetPartnerDTO()); var handler = new GetPartnerByIdHandler(this.mockRepository.Object, this.mockMapper.Object, this.mockLogger.Object, this.mockLocalizerCannotFind.Object); @@ -124,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() @@ -140,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; } From 61e35988e20f4d14a28c5d1d1d89dc254236e7e1 Mon Sep 17 00:00:00 2001 From: ZhmudAnastasiia Date: Thu, 8 May 2025 18:17:08 +0300 Subject: [PATCH 3/4] changed assembly reference for terms tests --- .../Streetcode/TextContent/TermControllerTests.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs index 0a4d804a8..15a9d1fcd 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,7 +35,7 @@ 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); From 74bae2e8884be15dde9f0d6a5cd3911279e94869 Mon Sep 17 00:00:00 2001 From: ZhmudAnastasiia Date: Thu, 8 May 2025 18:26:50 +0300 Subject: [PATCH 4/4] fixed integration tests for terms --- .../Streetcode/TextContent/TermControllerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs index 15a9d1fcd..b2e511151 100644 --- a/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs +++ b/Streetcode/Streetcode.XIntegrationTest/ControllerTests/Streetcode/TextContent/TermControllerTests.cs @@ -40,7 +40,7 @@ public async Task GetAll_ShouldReturnSuccessStatusCode_WhenTermsReceived() // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(returnedValue); - Assert.NotEmpty(returnedValue.Terms); + Assert.NotEmpty(returnedValue); } [Fact]