Explorar el Código

Added logger and serilog

pull/68/head
Safet Purkovic hace 3 años
padre
commit
017a68d17a
Se han modificado 25 ficheros con 523 adiciones y 325 borrados
  1. 72
    14
      Diligent.WebAPI.Business/Services/AdService.cs
  2. 58
    35
      Diligent.WebAPI.Business/Services/ApplicantService.cs
  3. 22
    10
      Diligent.WebAPI.Business/Services/AuthenticationService.cs
  4. 10
    6
      Diligent.WebAPI.Business/Services/CommentService.cs
  5. 15
    14
      Diligent.WebAPI.Business/Services/Emailer.cs
  6. 9
    2
      Diligent.WebAPI.Business/Services/HttpClientService.cs
  7. 2
    2
      Diligent.WebAPI.Business/Services/Interfaces/IApplicantService.cs
  8. 0
    4
      Diligent.WebAPI.Business/Services/Interfaces/ISelectionProcessService.cs
  9. 0
    4
      Diligent.WebAPI.Business/Services/Interfaces/ITechnologyService.cs
  10. 39
    10
      Diligent.WebAPI.Business/Services/SelectionLevelService.cs
  11. 30
    53
      Diligent.WebAPI.Business/Services/SelectionProcessService.cs
  12. 20
    25
      Diligent.WebAPI.Business/Services/TechnologyService.cs
  13. 24
    23
      Diligent.WebAPI.Business/Services/UserService.cs
  14. 7
    0
      Diligent.WebAPI.Business/Usings.cs
  15. 1
    1
      Diligent.WebAPI.Host/Diligent.WebAPI.Host.csproj.user
  16. 36
    9
      Diligent.WebAPI.Host/Program.cs
  17. 24
    0
      Diligent.WebAPI.Host/appsettings.Development.json
  18. 24
    0
      Diligent.WebAPI.Host/appsettings.json
  19. 14
    12
      Diligent.WebAPI.Tests/Services/AdServiceTests.cs
  20. 70
    67
      Diligent.WebAPI.Tests/Services/ApplicantServiceTests.cs
  21. 3
    1
      Diligent.WebAPI.Tests/Services/CommentServiceTests.cs
  22. 6
    4
      Diligent.WebAPI.Tests/Services/SelectionLevelsServiceTests.cs
  23. 21
    19
      Diligent.WebAPI.Tests/Services/SelectionProcessServiceTests.cs
  24. 8
    5
      Diligent.WebAPI.Tests/Services/TechnologyServiceTests.cs
  25. 8
    5
      Diligent.WebAPI.Tests/Services/UserServiceTests.cs

+ 72
- 14
Diligent.WebAPI.Business/Services/AdService.cs Ver fichero

@@ -1,15 +1,16 @@
using Diligent.WebAPI.Business.Extensions;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class AdService : IAdService
{
private readonly ILogger<AdService> _logger;
private readonly DatabaseContext _context;
private readonly IMapper _mapper;
private readonly ITechnologyService _technologyService;

public AdService(DatabaseContext context, IMapper mapper, ITechnologyService technologyService)

public AdService(DatabaseContext context, IMapper mapper, ITechnologyService technologyService, ILogger<AdService> logger)
{
_logger = logger;
_context = context;
_mapper = mapper;
_technologyService = technologyService;
@@ -17,83 +18,140 @@ namespace Diligent.WebAPI.Business.Services

public async Task<List<AdResponseDto>> GetAllAsync()
{
_logger.LogInformation("Start getting all Ads");
var today = DateTime.Now;
return _mapper.Map<List<AdResponseDto>>(await _context.Ads.Include(x => x.Technologies).Where(x => x.ExpiredAt > today).ToListAsync());
_logger.LogInformation("Getting data from DB");
var fromDb = await _context.Ads.Include(x => x.Technologies).Where(x => x.ExpiredAt > today).ToListAsync();
_logger.LogInformation($"Received {fromDb.Count} ads from db.");
_logger.LogInformation($"Mapping received ads to AdResponseDto");
var result = _mapper.Map<List<AdResponseDto>>(fromDb);
_logger.LogInformation($"Ads has been mapped and received to client: {result.Count} mapped ads");
return result;
}

public async Task<AdResponseDto> GetByIdAsync(int id)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var ad = await _context.Ads.FindAsync(id);

if(ad is null)
if (ad is null)
{
_logger.LogError($"Ad with id = {id} not found");
throw new EntityNotFoundException("Ad not found");
}


return _mapper.Map<AdResponseDto>(ad);
_logger.LogInformation($"Mapping Ad with id = {id}");
AdResponseDto result = _mapper.Map<AdResponseDto>(ad);
_logger.LogInformation($"Ad with id = {id} mapped successfully");
return result;

}

public async Task<AdDetailsResponseDto> GetAdDetailsByIdAsync(int id)
{
_logger.LogInformation($"Start finding Ad with id = {id} with applicants");
var ad = await _context.Ads.Include(x => x.Applicants).Where(x => x.Id == id).FirstOrDefaultAsync();

if (ad is null)
{
_logger.LogError($"Ad with id = {id} not found");
throw new EntityNotFoundException("Ad not found");
}

return _mapper.Map<AdDetailsResponseDto>(ad);
_logger.LogInformation($"Mapping Ad with id = {id}");
AdDetailsResponseDto result = _mapper.Map<AdDetailsResponseDto>(ad);
_logger.LogInformation($"Ad with id = {id} mapped successfully");

return result;
}

public async Task<List<AdResponseDto>> GetArchiveAds()
{
_logger.LogInformation("Start getting all Archived Ads");
var today = DateTime.Now;
_logger.LogInformation("Getting data from DB");
var archiveAds = await _context.Ads.Where(x => x.ExpiredAt < today).ToListAsync();
_logger.LogInformation($"Received {archiveAds.Count} ads from db.");

return _mapper.Map<List<AdResponseDto>>(archiveAds);
_logger.LogInformation($"Mapping received ads to AdResponseDto");
List<AdResponseDto> result = _mapper.Map<List<AdResponseDto>>(archiveAds);
_logger.LogInformation($"Ads has been mapped and received to client: {result.Count} mapped ads");
return result;
}

public async Task<List<AdResponseDto>> GetFilteredAdsAsync(AdFilterDto filters)
{
_logger.LogInformation($"Start getting all filtered Ads");
_logger.LogInformation("Getting data from DB");
var filteredAds = await _context.Ads.Include(x => x.Technologies).ToListAsync();
_logger.LogInformation($"Received {filteredAds.Count} ads from db.");

return _mapper.Map<List<AdResponseDto>>(filteredAds.Filter(filters));
_logger.LogInformation($"Mapping received ads to AdResponseDto");
List<AdResponseDto> result = _mapper.Map<List<AdResponseDto>>(filteredAds.Filter(filters));
_logger.LogInformation($"Ads has been mapped and received to client: {result.Count} mapped ads");
return result;
}

public async Task CreateAsync(AdCreateDto adCreateDto)
{
_logger.LogInformation($"Start creating Ad");
var ad = _mapper.Map<Ad>(adCreateDto);
_logger.LogInformation($"Ad created successfully");

_logger.LogInformation($"Start adding technologies to Ad");
for (int i = 0; i < adCreateDto.TechnologiesIds.Count; i++)
{
var technology = await _technologyService.GetEntityByIdAsync(adCreateDto.TechnologiesIds[i]);
ad.Technologies.Add(technology);
_logger.LogInformation($"Technology with id {technology.TechnologyId} added to Ad");
}
_logger.LogInformation($"Finished adding techonologies");

await _context.Ads.AddAsync(ad);

await _context.SaveChangesAsync();
_logger.LogInformation($"Saving Ad to db...");
var result = _context.SaveChangesAsync();
_logger.LogInformation($"Ad saved to DB");
await result;
}

public async Task UpdateAsync(int id, AdUpdateDto adUpdateDto)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var ad = await _context.Ads.FindAsync(id);

if (ad is null)
{
_logger.LogError($"Ad with id = {id} not found");
throw new EntityNotFoundException("Ad not found");
}

_logger.LogInformation($"Mapping Ad with id = {id}");
_mapper.Map(adUpdateDto, ad);
_logger.LogInformation($"Ad with id = {id} mapped successfully");

_context.Entry(ad).State = EntityState.Modified;
await _context.SaveChangesAsync();

var result = _context.SaveChangesAsync();
_logger.LogInformation($"Ad saved to DB");
await result;
}

public async Task DeleteAsync(int id)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var ad = await _context.Ads.FindAsync(id);

if (ad is null)
{
_logger.LogError($"Ad with id = {id} not found");
throw new EntityNotFoundException("Ad not found");
}

_context.Ads.Remove(ad);
await _context.SaveChangesAsync();
var result = _context.SaveChangesAsync();
_logger.LogInformation($"Ad saved to DB");
await result;
}
}
}

+ 58
- 35
Diligent.WebAPI.Business/Services/ApplicantService.cs Ver fichero

@@ -1,22 +1,22 @@
using Diligent.WebAPI.Business.Extensions;
using Microsoft.AspNetCore.Http;
using static Diligent.WebAPI.Data.Entities.Applicant;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class ApplicantService : IApplicantService
{
private readonly DatabaseContext _context;
private readonly IMapper _mapper;
private readonly ILogger<ApplicantService> _logger;

public ApplicantService(DatabaseContext context, IMapper mapper)
public ApplicantService(DatabaseContext context, IMapper mapper, ILogger<ApplicantService> logger)
{
_context = context;
_mapper = mapper;
_logger = logger;
}

public async Task<QueryResultDto<ApplicantViewDto>> GetFilteredApplicants(ApplicantFilterDto applicantFilterDto)
{
_logger.LogInformation("Start getting filtered applicants");
_logger.LogInformation("Getting data from DB and filter");
var filteredApplicants = (await _context.Applicants
.Include(c => c.Ads)
.Include(x => x.TechnologyApplicants)
@@ -24,6 +24,7 @@ namespace Diligent.WebAPI.Business.Services
.FilterApplicants(applicantFilterDto);

int totalNumberOfItems = filteredApplicants.Count;
_logger.LogInformation($"Got {totalNumberOfItems} applicants");

filteredApplicants = PaginationExtension.ApplyPagging(filteredApplicants, new Pagination
{
@@ -31,6 +32,7 @@ namespace Diligent.WebAPI.Business.Services
PageSize = applicantFilterDto.PageSize
});

_logger.LogInformation($"Return list of applicants");
return new QueryResultDto<ApplicantViewDto>
{
Items = _mapper.Map<List<ApplicantViewDto>>(filteredApplicants),
@@ -40,6 +42,7 @@ namespace Diligent.WebAPI.Business.Services

public async Task<ApplicantViewDto> GetById(int id)
{
_logger.LogInformation($"Start searching Applicant with id = {id}");
var applicant = await _context.Applicants
.Include(x => x.Ads)
.ThenInclude(x => x.Technologies)
@@ -50,43 +53,51 @@ namespace Diligent.WebAPI.Business.Services
.FirstOrDefaultAsync(x => x.ApplicantId == id);

if (applicant is null)
{
_logger.LogError($"Applicant with id = {id} not found");
throw new EntityNotFoundException("Applicant not found");

return _mapper.Map<ApplicantViewDto>(applicant);
}
_logger.LogInformation($"Mapping Applicant with id = {id}");
var result = _mapper.Map<ApplicantViewDto>(applicant);
_logger.LogInformation($"Applicant with id = {id} mapped successfully");
return result;
}
public async Task CreateApplicant(ApplicantCreateDto applicantCreateDto)
{
var applicant = _mapper.Map<Applicant>(applicantCreateDto);
await _context.Applicants.AddAsync(applicant);

await _context.SaveChangesAsync();
}

public async Task DeleteApplicant(int id)
public async Task<ApplicantViewDto> GetApplicantWithSelectionProcessesById(int id)
{
var applicant = await _context.Applicants.FindAsync(id);
var applicant = await _context.Applicants
.Include(a => a.SelectionProcesses).ThenInclude(sp => sp.SelectionLevel)
.Include(a => a.SelectionProcesses).ThenInclude(sp => sp.Scheduler)
.FirstOrDefaultAsync(a => a.ApplicantId == id);

if (applicant is null)
throw new EntityNotFoundException("Applicant not found");

_context.Applicants.Remove(applicant);
await _context.SaveChangesAsync();
return _mapper.Map<ApplicantViewDto>(applicant);
}

public async Task UpdateApplicant(int id, ApplicantUpdateDto applicantUpdateDto)
public async Task DeleteApplicant(int id)
{
_logger.LogInformation($"Start searching Applicant with id = {id}");
var applicant = await _context.Applicants.FindAsync(id);

if (applicant is null)
{
_logger.LogError($"Applicant with id = {id} not found");
throw new EntityNotFoundException("Applicant not found");
}

_mapper.Map(applicantUpdateDto, applicant);

_context.Entry(applicant).State = EntityState.Modified;
await _context.SaveChangesAsync();
_logger.LogError($"Removing Applicant with id = {id}");
_context.Applicants.Remove(applicant);
var result = _context.SaveChangesAsync();
_logger.LogError($"Applicant with id = {id} is removed successfully");
await result;
}

public async Task<List<AdApplicantsViewDto>> GetAllAdsApplicants(ApplicantFilterDto applicantFilterDto)
{
_logger.LogInformation("Start getting filtered applicants");
_logger.LogInformation("Getting data from DB and filter");
var adsApplicants = (await _context.Ads
.Include(a => a.Applicants)
.ThenInclude(a => a.TechnologyApplicants)
@@ -94,20 +105,32 @@ namespace Diligent.WebAPI.Business.Services
.ToListAsync())
.FilterAdApplicants(applicantFilterDto);

return _mapper.Map<List<AdApplicantsViewDto>>(adsApplicants);
_logger.LogInformation($"Got {adsApplicants.Count} ads");

var result = _mapper.Map<List<AdApplicantsViewDto>>(adsApplicants);
return result;
}

public async Task<ApplicantViewDto> GetApplicantWithSelectionProcessesById(int id)
{
var applicant = await _context.Applicants
.Include(a => a.SelectionProcesses).ThenInclude(sp => sp.SelectionLevel)
.Include(a => a.SelectionProcesses).ThenInclude(sp => sp.Scheduler)
.FirstOrDefaultAsync(a => a.ApplicantId == id);
//public async Task CreateApplicant(ApplicantCreateDto applicantCreateDto)
//{
// var applicant = _mapper.Map<Applicant>(applicantCreateDto);
// await _context.Applicants.AddAsync(applicant);

if (applicant is null)
throw new EntityNotFoundException("Applicant not found");
// await _context.SaveChangesAsync();
//}


//public async Task UpdateApplicant(int id, ApplicantUpdateDto applicantUpdateDto)
//{
// var applicant = await _context.Applicants.FindAsync(id);
// if (applicant is null)
// throw new EntityNotFoundException("Applicant not found");

// _mapper.Map(applicantUpdateDto, applicant);

// _context.Entry(applicant).State = EntityState.Modified;
// await _context.SaveChangesAsync();
//}

return _mapper.Map<ApplicantViewDto>(applicant);
}
}
}

+ 22
- 10
Diligent.WebAPI.Business/Services/AuthenticationService.cs Ver fichero

@@ -1,7 +1,4 @@
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;
using System.Net;
using System.Web;

namespace Diligent.WebAPI.Business.Services
{
@@ -34,11 +31,13 @@ namespace Diligent.WebAPI.Business.Services
public async Task<ServiceResponseDTO<AuthenticateResponseDto>> Authenticate(AuthenticateRequestDto model)
{
_logger.LogError($"Checking credentials for user: {model.Username}");
var user = await _userManager.FindByNameAsync(model.Username);

// return null if user not found
if (user == null)
{
_logger.LogError($"User with username = {model.Username} not found");
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
@@ -51,6 +50,7 @@ namespace Diligent.WebAPI.Business.Services
// return null if user is disabled
if (user.IsEnabled == false)
{
_logger.LogError($"User: {model.Username} is not enabled");
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
@@ -60,6 +60,7 @@ namespace Diligent.WebAPI.Business.Services
// password is not correct
if (!result)
{
_logger.LogError($"Password for user: {model.Username} is not correct");
await _userManager.AccessFailedAsync(user);

return new ServiceResponseDTO<AuthenticateResponseDto>
@@ -68,26 +69,30 @@ namespace Diligent.WebAPI.Business.Services
ErrorMessage = "Password is not correct"
};
}

return await GenerateToken(user);
var token = await GenerateToken(user);
_logger.LogError($"Successfull login token: {token}");
return token;
}

public async Task<ServiceResponseDTO<AuthenticateResponseDto>> Authenticate(GoogleApiModel model)
{
_logger.LogError($"Checking token for google login {model.Token}");
if (!(await _httpClient.IsTokenValid(model.Token)))
{
_logger.LogError($"Token is not valid");
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
ErrorMessage = "Invalid Google Api Token"
};
}
_logger.LogError($"Checking if user exists in Db with email : {model.User.email}");
var user = await _userManager.FindByEmailAsync(model.User.email);

// return null if user not found
if (user == null)
{
_logger.LogError($"User does not exist in Db");
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
@@ -97,13 +102,16 @@ namespace Diligent.WebAPI.Business.Services

if (user.IsEnabled == false)
{
_logger.LogError($"User is not enabled");
return new ServiceResponseDTO<AuthenticateResponseDto>
{
IsError = true,
ErrorMessage = $"User with email {model.User.email} has no permission to log in."
};
}
return await GenerateToken(user);
var token = await GenerateToken(user);
_logger.LogInformation($"Successfull login. Token :{token}");
return token;
}

private async Task<ServiceResponseDTO<AuthenticateResponseDto>> GenerateToken(User user)
@@ -117,8 +125,6 @@ namespace Diligent.WebAPI.Business.Services
ErrorMessage = "The account is locked out"
};



// authentication successful so generate jwt token
var token = await GenerateJwtToken(user, true);

@@ -190,7 +196,7 @@ namespace Diligent.WebAPI.Business.Services
}

await _databaseContext.SaveChangesAsync();
_logger.LogInformation($"JWTToken : {writedToken}");
return writedToken;
}

@@ -262,6 +268,7 @@ namespace Diligent.WebAPI.Business.Services
var user = await _userManager.FindByIdAsync(validatedToken.Claims.Single(x => x.Type == "id").Value);

var token = await GenerateJwtToken(user);
_logger.LogInformation($"Refresh token : {model.Token}");

return new RefreshTokenResultDto
{
@@ -299,6 +306,7 @@ namespace Diligent.WebAPI.Business.Services
ErrorMessage = "Problem with saving changes into database"
};

_logger.LogInformation($"Delted refresh token : {refreshToken}");
return new ServiceResponseDTO<string>
{
Data = null
@@ -359,6 +367,7 @@ namespace Diligent.WebAPI.Business.Services

public async Task<ServiceResponseDTO<object>> GetForgotPasswordUrlAsync(string email)
{
_logger.LogInformation($"Sending forgot password email for : {email}");
var user = await _userManager.FindByEmailAsync(email);
if (user == null)
{
@@ -374,6 +383,7 @@ namespace Diligent.WebAPI.Business.Services

await _emailer.SendEmailAndWriteToDbAsync(email, "Reset password", HTMLHelper.RenderForgotPasswordPage($"{_frontEndSettings.BaseUrl}/reset-password?token={token}&email={email}"), isHtml: true);

_logger.LogInformation($"Reset password email is sent");
return new ServiceResponseDTO<object>
{
Data = new { code = token, email = email }
@@ -382,6 +392,7 @@ namespace Diligent.WebAPI.Business.Services

public async Task<ServiceResponseDTO<object>> PasswordResetAsync(string email, string code, string password)
{
_logger.LogInformation($"User with email : {email} changes password");
var user = await _userManager.FindByEmailAsync(email);
if (user == null)
{
@@ -396,6 +407,7 @@ namespace Diligent.WebAPI.Business.Services
IdentityResult resetResult = await _userManager.ResetPasswordAsync(user, passwordResetToken, password);
if (resetResult.Succeeded)
{
_logger.LogInformation($"Password for user : {email} changed successfully");
return new ServiceResponseDTO<object> { Data = true };
}


+ 10
- 6
Diligent.WebAPI.Business/Services/CommentService.cs Ver fichero

@@ -1,26 +1,30 @@
using Diligent.WebAPI.Contracts.DTOs.Comment;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class CommentService : ICommentService
{
private readonly DatabaseContext _context;
private readonly IMapper _mapper;
private readonly ILogger<CommentService> _logger;

public CommentService(DatabaseContext context, IMapper mapper)
public CommentService(DatabaseContext context, IMapper mapper, ILogger<CommentService> logger)
{
_context = context;
_mapper = mapper;
_logger = logger;
}
public async Task CreateComment(CommentCreateDto commentCreateDto)
{
_logger.LogInformation("Start creating comment");
var comment = _mapper.Map<Comment>(commentCreateDto);

comment.DateOfSending = DateTime.Now;
_logger.LogInformation($"Comment created successfully in {comment.DateOfSending}");

_logger.LogInformation($"Saving comment in Db");
await _context.Comments.AddAsync(comment);

await _context.SaveChangesAsync();
var result = _context.SaveChangesAsync();
_logger.LogInformation($"Comment saved in Db");
await result;
}
}
}

+ 15
- 14
Diligent.WebAPI.Business/Services/Emailer.cs Ver fichero

@@ -1,6 +1,5 @@
using System.Net.Mail;
using System.Net;
using Diligent.WebAPI.Contracts.Models;

namespace Diligent.WebAPI.Business.Services
{
@@ -10,20 +9,12 @@ namespace Diligent.WebAPI.Business.Services
public class Emailer : IEmailer
{
private readonly MailSettings _settings;
private readonly ILogger<Emailer> _logger;

public Emailer(IOptions<MailSettings> mailSettings)
public Emailer(IOptions<MailSettings> mailSettings, ILogger<Emailer> logger)
{
_settings = mailSettings.Value;
//_settings = new AuthorizationSettings
//{
// SmtpServer = "smtp.mailtrap.io",
// SmtpPort = 2525,
// SmtpUseSSL = true,
// SmtpUsername = "460e3c49f02e37",
// SmtpPassword = "66443869eaad55",
// SmtpFrom = "noreply@hrcenter.net",
// SmtpFromName = "HRCenter Team"
//};
_logger = logger;
}

/// <summary>
@@ -41,8 +32,10 @@ namespace Diligent.WebAPI.Business.Services
/// <returns></returns>
public async Task<bool> SendEmailAndWriteToDbAsync(List<string> to, string subject, string body, bool isHtml = false, List<string> cc = null)
{
_logger.LogInformation($"Start sending email to {to}");
var emailResult = await SendEmailAsync(to, subject, body, isHtml, cc);

//_logger.LogInformation("Create email entity for save in db");
var email = CreateEmail(to, subject, body, isHtml);

if (emailResult)
@@ -50,7 +43,9 @@ namespace Diligent.WebAPI.Business.Services
email.SentTime = DateTime.UtcNow;
}

//_logger.LogInformation("Save email in db");
//var dbResult = await WriteEmailToDbAsync(email);
//_logger.LogInformation("Email is saved in db.");

return emailResult; // && dbResult > 0;
}
@@ -150,21 +145,27 @@ namespace Diligent.WebAPI.Business.Services
{
try
{
_logger.LogInformation("Getting SMTP client settings from appsettings file");
using (var smtp = GetSmtpClient())
{
_logger.LogInformation("Create mail message");
var message = GetMailMessage(to, subject, body, isHtml, cc);

_logger.LogInformation("Message created.");
_logger.LogInformation("Sending message to client");
await smtp.SendMailAsync(message);
_logger.LogInformation("Email message sent.");

return true;
}
}
catch (ArgumentException)
catch (ArgumentException ex)
{
_logger.LogInformation($"Error in arguments {ex}");
throw;
}
catch (Exception e)
{
_logger.LogInformation($"Error {e}");
throw new Exception("Failed to send email message.", e);
}
}

+ 9
- 2
Diligent.WebAPI.Business/Services/HttpClientService.cs Ver fichero

@@ -7,23 +7,29 @@ namespace Diligent.WebAPI.Business.Services
private const string GoogleApiTokenInfoUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";
private string[] SupportedClientsIds = { "" };
private readonly AuthorizationSettings _authSettings;
private readonly ILogger<HttpClientService> _logger;

public HttpClientService(IOptions<AuthorizationSettings> authSettings)
public HttpClientService(IOptions<AuthorizationSettings> authSettings, ILogger<HttpClientService> logger)
{
_authSettings = authSettings.Value;
_logger = logger;
}
public async Task<bool> IsTokenValid(string providerToken)
{
_logger.LogInformation($"Start checking is token valid: {providerToken}");
var httpClient = new HttpClient();
var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken));

_logger.LogInformation("Initilazing http call to googleapi");
HttpResponseMessage httpResponseMessage;
try
{
_logger.LogInformation("Calling googleapi HTTPGet method");
httpResponseMessage = httpClient.GetAsync(requestUri).Result;
}
catch
catch(Exception ex)
{
_logger.LogInformation($"Error in call: {ex.Message}");
return false;
}

@@ -34,6 +40,7 @@ namespace Diligent.WebAPI.Business.Services

var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
var googleApiTokenInfo = JsonConvert.DeserializeObject<GoogleApiTokenInfo>(response);
_logger.LogInformation($"Call pass and it received: {googleApiTokenInfo}");

//if (!SupportedClientsIds.Contains(googleApiTokenInfo.aud))
if (googleApiTokenInfo.aud != _authSettings.GoogleClientId)

+ 2
- 2
Diligent.WebAPI.Business/Services/Interfaces/IApplicantService.cs Ver fichero

@@ -7,8 +7,8 @@ namespace Diligent.WebAPI.Business.Services.Interfaces
Task<List<AdApplicantsViewDto>> GetAllAdsApplicants(ApplicantFilterDto applicantFilterDto);
Task<ApplicantViewDto> GetById(int id);
Task<ApplicantViewDto> GetApplicantWithSelectionProcessesById(int id);
Task CreateApplicant(ApplicantCreateDto applicantCreateDto);
//Task CreateApplicant(ApplicantCreateDto applicantCreateDto);
Task DeleteApplicant(int id);
Task UpdateApplicant(int id, ApplicantUpdateDto applicantUpdateDto);
//Task UpdateApplicant(int id, ApplicantUpdateDto applicantUpdateDto);
}
}

+ 0
- 4
Diligent.WebAPI.Business/Services/Interfaces/ISelectionProcessService.cs Ver fichero

@@ -5,11 +5,7 @@ namespace Diligent.WebAPI.Business.Services.Interfaces
{
public interface ISelectionProcessService
{
Task CreateAsync(SelectionProcessCreateDto model);
Task DeleteAsync(int id);
Task<List<SelectionProcessResposneDto>> GetAllAsync();
Task<SelectionProcessResposneDto> GetByIdAsync(int id);
Task<bool> FinishSelectionProcess(SelectionProcessCreateDto model);
Task UpdateAsync(int id, SelectionProcessCreateDto model);
}
}

+ 0
- 4
Diligent.WebAPI.Business/Services/Interfaces/ITechnologyService.cs Ver fichero

@@ -4,11 +4,7 @@ namespace Diligent.WebAPI.Business.Services.Interfaces
public interface ITechnologyService
{
Task<List<TechnologyResponseDto>> GetAllAsync();
Task<List<TechnologyApplicantViewDto>> GetAllAsync2();

Task<TechnologyResponseDto> GetByIdAsync(int id);
Task<TechnologyApplicantViewDto> GetByIdAsync2(int id);

Task<Technology> GetEntityByIdAsync(int id);
}
}

+ 39
- 10
Diligent.WebAPI.Business/Services/SelectionLevelService.cs Ver fichero

@@ -1,38 +1,67 @@
using Diligent.WebAPI.Business.Extensions;
using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class SelectionLevelService : ISelectionLevelService
{
private readonly DatabaseContext _context;
private readonly IMapper _mapper;
private readonly ILogger<SelectionLevelService> _logger;

public SelectionLevelService(DatabaseContext context, IMapper mapper)
public SelectionLevelService(DatabaseContext context, IMapper mapper, ILogger<SelectionLevelService> logger)
{
_context = context;
_mapper = mapper;
_logger = logger;
}

public async Task<List<SelectionLevelResponseWithDataDto>> GetAllAsync() =>
_mapper.Map<List<SelectionLevelResponseWithDataDto>>(await _context.SelectionLevels.Include(sl => sl.SelectionProcesses).ThenInclude(sp => sp.Applicant).ToListAsync());
public async Task<List<SelectionLevelResponseWithDataDto>> GetAllAsync()
{
_logger.LogInformation("Start getting all selection levels");
_logger.LogInformation("Getting data from DB");
var fromDb = await _context.SelectionLevels
.Include(sl => sl.SelectionProcesses)
.ThenInclude(sp => sp.Applicant)
.ToListAsync();

_logger.LogInformation($"Received {fromDb.Count} levels from db.");
_logger.LogInformation($"Mapping received ads to SelectionLevelResponseWithDataDto");
var result = _mapper.Map<List<SelectionLevelResponseWithDataDto>>(fromDb);
_logger.LogInformation($"Levels has been mapped and received to client: {result.Count} mapped levels");

return result;
}
public async Task<SelectionLevelResposneDto> GetByIdAsync(int id)
{
_logger.LogInformation($"Start searching Level with id = {id}");
var sl = await _context.SelectionLevels.FindAsync(id);

if (sl is null)
{
_logger.LogError($"Level with id = {id} not found");
throw new EntityNotFoundException("Selection level not found");
}

return _mapper.Map<SelectionLevelResposneDto>(sl);
_logger.LogInformation($"Mapping Level with id = {id} to SelectionLevelResposneDto");
var result = _mapper.Map<SelectionLevelResposneDto>(sl);
_logger.LogInformation($"Level with id = {id} mapped successfully");
return result;

}

public List<SelectionLevelResponseWithDataDto> GetFilteredLevelsAsync(SelectionProcessFilterDto filters)
{
var filteredLevels = _context.SelectionLevels.Include(x => x.SelectionProcesses).ThenInclude(sp => sp.Applicant).ToList().FilterLevels(filters);
_logger.LogInformation("Start getting filtered selection levels");
_logger.LogInformation("Getting data from DB and filter it");
var filteredLevels = _context.SelectionLevels
.Include(x => x.SelectionProcesses)
.ThenInclude(sp => sp.Applicant).ToList()
.FilterLevels(filters);

_logger.LogInformation($"Received {filteredLevels.Count} levels from db.");
_logger.LogInformation($"Mapping received ads to SelectionLevelResponseWithDataDto");
var result = _mapper.Map<List<SelectionLevelResponseWithDataDto>>(filteredLevels);
_logger.LogInformation($"Levels has been mapped and received to client: {result.Count} mapped levels");

return _mapper.Map<List<SelectionLevelResponseWithDataDto>>(filteredLevels);
return result;
}
}
}

+ 30
- 53
Diligent.WebAPI.Business/Services/SelectionProcessService.cs Ver fichero

@@ -1,78 +1,53 @@
using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
using static System.Net.Mime.MediaTypeNames;
using System.Collections.Generic;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class SelectionProcessService : ISelectionProcessService
{
private readonly DatabaseContext _context;
private readonly IMapper _mapper;
private readonly ILogger<SelectionProcessService> _logger;

public SelectionProcessService(DatabaseContext context, IMapper mapper)
public SelectionProcessService(DatabaseContext context, IMapper mapper, ILogger<SelectionProcessService> logger)
{
_context = context;
_mapper = mapper;
_logger = logger;
}

public async Task<List<SelectionProcessResposneDto>> GetAllAsync() =>
_mapper.Map<List<SelectionProcessResposneDto>>(await _context.SelectionProcesses.ToListAsync());

public async Task<SelectionProcessResposneDto> GetByIdAsync(int id)
{
var sp = await _context.SelectionProcesses.FindAsync(id);

if (sp is null)
throw new EntityNotFoundException("Selection process not found");

return _mapper.Map<SelectionProcessResposneDto>(sp);

}

public async Task CreateAsync(SelectionProcessCreateDto model)
{
await _context.SelectionProcesses.AddAsync(_mapper.Map<SelectionProcess>(model));

await _context.SaveChangesAsync();
}

public async Task UpdateAsync(int id, SelectionProcessCreateDto model)
{
var sp = await _context.SelectionProcesses.FindAsync(id);

if (sp is null)
throw new EntityNotFoundException("Selection process not found");

_mapper.Map(model, sp);

_context.Entry(sp).State = EntityState.Modified;
await _context.SaveChangesAsync();
}

public async Task DeleteAsync(int id)
public async Task<List<SelectionProcessResposneDto>> GetAllAsync()
{
var sp = await _context.SelectionProcesses.FindAsync(id);

if (sp is null)
throw new EntityNotFoundException("Selection process not found");

_context.SelectionProcesses.Remove(sp);
await _context.SaveChangesAsync();
_logger.LogInformation("Start getting all Selection Processes");
_logger.LogInformation("Getting data from DB");
var fromDB = await _context.SelectionProcesses.ToListAsync();
_logger.LogInformation($"Received {fromDB.Count} processes from db.");
_logger.LogInformation($"Mapping received ads to SelectionProcessResposneDto");
var result = _mapper.Map<List<SelectionProcessResposneDto>>(fromDB);
_logger.LogInformation($"Processes has been mapped and received to client: {result.Count} mapped processes");
return result;
}

public async Task<bool> FinishSelectionProcess(SelectionProcessCreateDto model)
{
_logger.LogInformation($"Start finishing selection process with {model.Id}");
var sp = await _context.SelectionProcesses.FindAsync(model.Id);

if (sp is null)
{
_logger.LogError($"Process with id = {model.Id} not found");
throw new EntityNotFoundException("Selection process not found");
}

_logger.LogError($"Changing status for {model.Id}");
sp.Status = "Odrađen";

var nextLevel = _context.SelectionLevels.AsEnumerable().SkipWhile(obj => obj.Id != sp.SelectionLevelId).Skip(1).First();
_logger.LogError($"Skipping throught levels to come to next level");
var nextLevel = _context.SelectionLevels.AsEnumerable()
.SkipWhile(obj => obj.Id != sp.SelectionLevelId)
.Skip(1).First();

if (nextLevel is null)
throw new EntityNotFoundException("Candidate came to last selection level");
{
_logger.LogError($"Applicant is in the last selection level");
throw new EntityNotFoundException("Candidate came to the last selection level");
}

SelectionProcess newProcess = new SelectionProcess
{
@@ -83,8 +58,10 @@ namespace Diligent.WebAPI.Business.Services
SchedulerId = model.SchedulerId
};
_context.SelectionProcesses.Add(newProcess);

return await _context.SaveChangesAsync() > 0;
_logger.LogError($"Create and add new selection process");
var result = await _context.SaveChangesAsync() > 0;
_logger.LogError($"Saved changes to db");
return result;
}
}
}

+ 20
- 25
Diligent.WebAPI.Business/Services/TechnologyService.cs Ver fichero

@@ -1,56 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{
public class TechnologyService : ITechnologyService
{
private readonly DatabaseContext _context;
private readonly ILogger<TechnologyService> _logger;
private readonly IMapper _mapper;

public TechnologyService(IMapper mapper, DatabaseContext context)
public TechnologyService(IMapper mapper, DatabaseContext context, ILogger<TechnologyService> logger)
{
_mapper = mapper;
_context = context;
_logger = logger;
}

public async Task<List<TechnologyResponseDto>> GetAllAsync() =>
_mapper.Map<List<TechnologyResponseDto>>(await _context.Technologies.ToListAsync());

public async Task<List<TechnologyApplicantViewDto>> GetAllAsync2() =>
_mapper.Map<List<TechnologyApplicantViewDto>>(await _context.Technologies.ToListAsync());

public async Task<TechnologyResponseDto> GetByIdAsync(int id)
public async Task<List<TechnologyResponseDto>> GetAllAsync()
{
var technology = await _context.Technologies.FindAsync(id);

if (technology is null)
throw new EntityNotFoundException("Technology not found");

return _mapper.Map<TechnologyResponseDto>(technology);
return _mapper.Map<List<TechnologyResponseDto>>(await _context.Technologies.ToListAsync());
}

public async Task<TechnologyApplicantViewDto> GetByIdAsync2(int id)
public async Task<TechnologyResponseDto> GetByIdAsync(int id)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var technology = await _context.Technologies.FindAsync(id);

if (technology is null)
{
_logger.LogError($"Technology with id = {id} not found");
throw new EntityNotFoundException("Technology not found");

return _mapper.Map<TechnologyApplicantViewDto>(technology);
}
_logger.LogInformation($"Mapping Technology with id = {id}");
var result = _mapper.Map<TechnologyResponseDto>(technology);
_logger.LogInformation($"Technology with id = {id} mapped successfully");
return result;
}

public async Task<Technology> GetEntityByIdAsync(int id)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var technology = await _context.Technologies.FindAsync(id);

if (technology is null)
{
_logger.LogError($"Technology with id = {id} not found");
throw new EntityNotFoundException("Technology not found");
}

_logger.LogInformation($"Technology with id = {id} found successfully");
return technology;
}
}

+ 24
- 23
Diligent.WebAPI.Business/Services/UserService.cs Ver fichero

@@ -1,13 +1,4 @@
using Diligent.WebAPI.Business.Services.Interfaces;
using Diligent.WebAPI.Business.Settings;
using Diligent.WebAPI.Contracts.DTOs.User;
using Diligent.WebAPI.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;
using System.Web;

namespace Diligent.WebAPI.Business.Services
namespace Diligent.WebAPI.Business.Services
{

public class UserService : IUserService
@@ -17,35 +8,45 @@ namespace Diligent.WebAPI.Business.Services
private readonly IMapper _mapper;
private readonly DatabaseContext _databaseContext;
private readonly IEmailer _emailer;
//private readonly AuthorizationSettings _authSettings;
//private readonly ILogger<UserService> _logger;
//private const string GoogleApiTokenInfoUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";
//private string[] SupportedClientsIds = { "" };
private readonly ILogger<UserService> _logger;

public UserService(IOptions<FrontEndSettings> frontEndSettings, UserManager<User> userManager, IMapper mapper, DatabaseContext databaseContext, IEmailer emailer)
public UserService(IOptions<FrontEndSettings> frontEndSettings, UserManager<User> userManager, IMapper mapper, DatabaseContext databaseContext, IEmailer emailer, ILogger<UserService> logger)
{
_frontEndSettings = frontEndSettings.Value;
_userManager = userManager;
_mapper = mapper;
_databaseContext = databaseContext;
_emailer = emailer;
//_authSettings = authSettings.Value;
//_logger = logger;
_logger = logger;
}

public async Task<IEnumerable<User?>> GetAll() =>
await _userManager.Users.ToListAsync();

public async Task<User?> GetById(int id) =>
await _userManager.FindByIdAsync(id.ToString());
public async Task<IEnumerable<User?>> GetAll()
{
_logger.LogInformation("Start getting all users");
_logger.LogInformation("Getting data from DB");
var fromDb = await _userManager.Users.ToListAsync();
_logger.LogInformation($"Received {fromDb.Count} ads from db.");
return fromDb;
}
#region REFACTORING CODE HERE TO CHECK IF USER IS NULL
public async Task<User?> GetById(int id)
{
_logger.LogInformation($"Start searching Ad with id = {id}");
var result = await _userManager.FindByIdAsync(id.ToString());
return result;
}
public async Task<User?> GetByEmail(string email) =>
await _userManager.FindByEmailAsync(email);

#endregion
public async Task CreateUser(CreateUserRequestDto model)
{
_logger.LogInformation($"Start creating user");
var user = _mapper.Map<User>(model);
_logger.LogInformation($"User created successfully");

_logger.LogInformation($"Saving user to db...");
await _userManager.CreateAsync(user, model.Password);
_logger.LogInformation($"User saved to DB");
}
public async Task RemoveUser(User user)
{

+ 7
- 0
Diligent.WebAPI.Business/Usings.cs Ver fichero

@@ -10,14 +10,19 @@ global using Diligent.WebAPI.Contracts.DTOs.InsurancePolicy;
global using Diligent.WebAPI.Contracts.DTOs.Insurer;
global using Diligent.WebAPI.Contracts.DTOs.WebhookDefinition;
global using Diligent.WebAPI.Contracts.DTOs.WebhookSubscription;
global using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
global using Diligent.WebAPI.Contracts.DTOs.Ad;
global using Diligent.WebAPI.Contracts.DTOs.Auth;
global using Diligent.WebAPI.Contracts.DTOs.User;
global using Diligent.WebAPI.Contracts.DTOs;
global using Diligent.WebAPI.Contracts.Exceptions;
global using Diligent.WebAPI.Contracts.Models;
global using Diligent.WebAPI.Contracts.DTOs.Applicant;
global using Diligent.WebAPI.Contracts.DTOs.Technology;
global using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;
global using Diligent.WebAPI.Contracts.DTOs.Comment;

global using Diligent.WebAPI.Business.Extensions;
global using Microsoft.EntityFrameworkCore;
global using Microsoft.Extensions.Options;
global using Microsoft.IdentityModel.Tokens;
@@ -29,5 +34,7 @@ global using System.Text;
global using Newtonsoft.Json;
global using RestSharp;
global using AutoMapper;
global using System.Web;

global using Microsoft.AspNetCore.Identity;
global using Microsoft.Extensions.Logging;

+ 1
- 1
Diligent.WebAPI.Host/Diligent.WebAPI.Host.csproj.user Ver fichero

@@ -3,7 +3,7 @@
<PropertyGroup>
<Controller_SelectedScaffolderID>ApiControllerWithActionsScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
<ActiveDebugProfile>IIS Express</ActiveDebugProfile>
<ActiveDebugProfile>Diligent.WebAPI.Host</ActiveDebugProfile>
<NameOfLastUsedPublishProfile>IISProfile</NameOfLastUsedPublishProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 36
- 9
Diligent.WebAPI.Host/Program.cs Ver fichero

@@ -1,12 +1,39 @@
var builder = WebApplication.CreateBuilder(args);
using Serilog;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateBootstrapLogger();
try
{
Log.Information("Starting web host");

builder.ConfigureHost();
builder.ConfigureData();
builder.ConfigureBusiness();
var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();
app.ConfigureHost();
app.ConfigureData();
app.ConfigureBusiness();
builder.Host.UseSerilog((context, services, configuration) => configuration.ReadFrom.Configuration(context.Configuration).ReadFrom.Services(services).Enrich.FromLogContext());

app.Run();


builder.ConfigureHost();
builder.ConfigureData();
builder.ConfigureBusiness();

var app = builder.Build();
app.ConfigureHost();
app.ConfigureData();
app.ConfigureBusiness();

app.Run();

}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}

return 0;

+ 24
- 0
Diligent.WebAPI.Host/appsettings.Development.json Ver fichero

@@ -1,4 +1,28 @@
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": { "path": "Logs/log.txt" }
},
{
"Name": "Seq",
"Args": { "ServerUrl": "http://localhost:5341" }
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WtihThreadId", "WithExceptionDetails" ]
},
"ConnectionStrings": {
"WebApi": "Server=192.168.88.105;Database=HRCenter;User Id=hrcentar;Password="
},

+ 24
- 0
Diligent.WebAPI.Host/appsettings.json Ver fichero

@@ -1,4 +1,28 @@
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": { "path": "Logs/log.txt" }
},
{
"Name": "Seq",
"Args": { "ServerUrl": "http://localhost:5341" }
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WtihThreadId", "WithExceptionDetails" ]
},
"ConnectionStrings": {
"WebApi": "Server=192.168.88.105;Database=HRCenter;User Id=hrcentar;Password="
},

+ 14
- 12
Diligent.WebAPI.Tests/Services/AdServiceTests.cs Ver fichero

@@ -4,6 +4,7 @@ using Diligent.WebAPI.Business.Services;
using Diligent.WebAPI.Contracts.DTOs.Ad;
using Diligent.WebAPI.Contracts.Exceptions;
using Diligent.WebAPI.Data.Entities;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -18,6 +19,7 @@ namespace Diligent.WebAPI.Tests.Services
private readonly List<Ad> _ads = new List<Ad>();
private readonly Ad _ad;
private ITechnologyService _technologyService = Substitute.For<ITechnologyService>();
private ILogger<AdService> _logger = Substitute.For<ILogger<AdService>>();
private readonly List<Technology> _technologies = new List<Technology>();

public AdServiceTests()
@@ -79,7 +81,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAll_ShouldReturnListOfAds_WhenCalled()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var result = await adService.GetAllAsync();

@@ -91,7 +93,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldReturnAd_WhenAdExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var result = await adService.GetByIdAsync(1);

@@ -102,7 +104,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldThrowEntityNotFoundException_WhenAdDontExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await adService.GetByIdAsync(1000));
}
@@ -111,7 +113,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAdDetailsById_ShouldReturnAd_WhenAdExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var result = await adService.GetAdDetailsByIdAsync(1);

@@ -122,7 +124,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAdDetailsById_ShouldThrowEntityNotFoundException_WhenAdDontExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await adService.GetAdDetailsByIdAsync(1000));
}
@@ -131,7 +133,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetArchiveAds_ShouldReturnListOfAds_WhenCalled()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var result = await adService.GetArchiveAds();

@@ -143,7 +145,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetFilteredAds_ShouldReturnListOfAds_WhenCalled()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var result = await adService.GetFilteredAdsAsync(new AdFilterDto
{
@@ -164,7 +166,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task CreateAd_ShouldAddAdIntoDatabase_WhenCalled()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);
_technologyService.GetEntityByIdAsync(Arg.Any<int>()).Returns(new Technology
{
TechnologyId = 3,
@@ -196,7 +198,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task UpdateAd_ShouldUpdateAd_WhenAdExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

var updateForAd = new AdUpdateDto
{
@@ -222,7 +224,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task UpdateAd_ShouldThrowEntityNotFoundException_WhenAdDontExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await adService.UpdateAsync(1000, new AdUpdateDto
{
@@ -242,7 +244,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task DeleteAd_ShouldDeleteAdFromDatabase_WhenAdExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

await adService.DeleteAsync(1);

@@ -255,7 +257,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task DeleteAd_ShouldThrowEntityNotFoundException_WhenAdDontExists()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
AdService adService = new(databaseContext, _mapper, _technologyService);
AdService adService = new(databaseContext, _mapper, _technologyService, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await adService.DeleteAsync(1000));
}

+ 70
- 67
Diligent.WebAPI.Tests/Services/ApplicantServiceTests.cs Ver fichero

@@ -1,4 +1,5 @@
using AutoMapper;
using Castle.Core.Logging;
using Diligent.WebAPI.Business.Extensions;
using Diligent.WebAPI.Business.MappingProfiles;
using Diligent.WebAPI.Business.Services;
@@ -7,6 +8,7 @@ using Diligent.WebAPI.Contracts.DTOs.Applicant;
using Diligent.WebAPI.Contracts.Exceptions;
using Diligent.WebAPI.Data.Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using static Diligent.WebAPI.Data.Entities.Applicant;

namespace Diligent.WebAPI.Tests.Services
@@ -14,6 +16,7 @@ namespace Diligent.WebAPI.Tests.Services
public class ApplicantServiceTests
{
private readonly IMapper _mapper;
private ILogger<ApplicantService> _logger = Substitute.For<ILogger<ApplicantService>>();
private readonly HttpContext _httpContext;
private readonly List<Applicant> _applicants;
private readonly List<Ad> _ads;
@@ -40,7 +43,7 @@ namespace Diligent.WebAPI.Tests.Services
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);

ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

var filterDto = new ApplicantFilterDto();

@@ -53,7 +56,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldReturnApplicant_WhenApplicantExist()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

var result = await applicantService.GetById(1);

@@ -64,51 +67,51 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldThrowEntityNotFooundException_WhenApplicantDontExist()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await applicantService.GetById(1000));
}

[Fact]
public async Task CreateApplicant_ShouldAddEntityIntoDatabase_Always()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantCreateDto applicantCreateDto = new()
{
ApplicationChannel = "Facebook",
BitBucketLink = null,
CV = "link",
Email = "some@mail.com",
Experience = 1,
FirstName = "Meris",
LastName = "Ahmatovic",
GithubLink = null,
LinkedlnLink = null,
PhoneNumber = "432424",
Position = ".NET Developer",
TypeOfEmployment = TypesOfEmployment.Intership.ToString()
};
await applicantService.CreateApplicant(applicantCreateDto);
var filterDto = new ApplicantFilterDto
{
CurrentPage = 1,
PageSize = 4
};
var result = await applicantService.GetFilteredApplicants(filterDto);
Assert.Equal(2, result.Total);
}
//[Fact]
//public async Task CreateApplicant_ShouldAddEntityIntoDatabase_Always()
//{
// var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
// ApplicantService applicantService = new(databaseContext, _mapper, _logger);
// ApplicantCreateDto applicantCreateDto = new()
// {
// ApplicationChannel = "Facebook",
// BitBucketLink = null,
// CV = "link",
// Email = "some@mail.com",
// Experience = 1,
// FirstName = "Meris",
// LastName = "Ahmatovic",
// GithubLink = null,
// LinkedlnLink = null,
// PhoneNumber = "432424",
// Position = ".NET Developer",
// TypeOfEmployment = TypesOfEmployment.Intership.ToString()
// };
// await applicantService.CreateApplicant(applicantCreateDto);
// var filterDto = new ApplicantFilterDto
// {
// CurrentPage = 1,
// PageSize = 4
// };
// var result = await applicantService.GetFilteredApplicants(filterDto);
// Assert.Equal(2, result.Total);
//}

[Fact]
public async Task DeleteApplicant_ShouldDeleteApplicant_WhenApplicantExist()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

await applicantService.DeleteApplicant(1);

@@ -123,43 +126,43 @@ namespace Diligent.WebAPI.Tests.Services
public async Task DeleteApplicant_ShouldThrowEntityNotFooundException_WhenApplicantDontExist()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await applicantService.DeleteApplicant(1000));
}

[Fact]
public async Task UpdateApplicant_ShouldUpdateApplicant_WhenApplicantExist()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantUpdateDto applicantUpdateDto = new()
{
ApplicationChannel = "Instagram",
BitBucketLink = null,
CV = "link",
Email = "some@mail.com",
Experience = 1,
FirstName = "Dzenis",
LastName = "Hadzifejzovic",
GithubLink = null,
LinkedlnLink = null,
PhoneNumber = "432424",
Position = "React Developer"
};
await applicantService.UpdateApplicant(1, applicantUpdateDto);
var applicant = await applicantService.GetById(1);
Assert.Equal(applicant.Position, applicantUpdateDto.Position);
}
//[Fact]
//public async Task UpdateApplicant_ShouldUpdateApplicant_WhenApplicantExist()
//{
// var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
// ApplicantService applicantService = new(databaseContext, _mapper, _logger);
// ApplicantUpdateDto applicantUpdateDto = new()
// {
// ApplicationChannel = "Instagram",
// BitBucketLink = null,
// CV = "link",
// Email = "some@mail.com",
// Experience = 1,
// FirstName = "Dzenis",
// LastName = "Hadzifejzovic",
// GithubLink = null,
// LinkedlnLink = null,
// PhoneNumber = "432424",
// Position = "React Developer"
// };
// await applicantService.UpdateApplicant(1, applicantUpdateDto);
// var applicant = await applicantService.GetById(1);
// Assert.Equal(applicant.Position, applicantUpdateDto.Position);
//}

[Fact]
public async Task GetAllAdsApplicants_ShouldReturnListOfAdApplicants_Always()
{
var databaseContext = await Helpers<Ad>.GetDatabaseContext(_ads);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

var filterDto = MockData.GetApplicantFilters();

@@ -172,7 +175,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetApplicantWithSelectionProcessesById_ShouldReturnApplicant_WhenApplicantExists()
{
var databaseContext = await Helpers<Applicant>.GetDatabaseContext(_applicants);
ApplicantService applicantService = new(databaseContext, _mapper);
ApplicantService applicantService = new(databaseContext, _mapper, _logger);

var result = await applicantService.GetApplicantWithSelectionProcessesById(1);
var processes = result.SelectionProcesses;

+ 3
- 1
Diligent.WebAPI.Tests/Services/CommentServiceTests.cs Ver fichero

@@ -4,6 +4,7 @@ using Diligent.WebAPI.Business.Services;
using Diligent.WebAPI.Contracts.DTOs.Comment;
using Diligent.WebAPI.Data.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;

namespace Diligent.WebAPI.Tests.Services
{
@@ -12,6 +13,7 @@ namespace Diligent.WebAPI.Tests.Services
private readonly IMapper _mapper;
private readonly List<Comment> _comments;
private readonly List<Applicant> _applicants;
private ILogger<CommentService> _logger = Substitute.For<ILogger<CommentService>>();
private readonly List<User> _users;
public CommentServiceTests()
{
@@ -32,7 +34,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task CreateComment_ShouldUpdatedListOfComments_Always()
{
var databaseContext = await Helpers<Comment>.GetDatabaseContext(_comments);
CommentService applicantService = new(databaseContext, _mapper);
CommentService applicantService = new(databaseContext, _mapper, _logger);

var commentCreateDto = new CommentCreateDto
{

+ 6
- 4
Diligent.WebAPI.Tests/Services/SelectionLevelsServiceTests.cs Ver fichero

@@ -6,6 +6,7 @@ using Diligent.WebAPI.Contracts.DTOs.Applicant;
using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;
using Diligent.WebAPI.Contracts.Exceptions;
using Diligent.WebAPI.Data.Entities;
using Microsoft.Extensions.Logging;

namespace Diligent.WebAPI.Tests.Services
{
@@ -13,6 +14,7 @@ namespace Diligent.WebAPI.Tests.Services
{
private readonly IMapper _mapper;
private readonly List<SelectionLevel> _levels;
private ILogger<SelectionLevelService> _logger = Substitute.For<ILogger<SelectionLevelService>>();
private readonly SelectionLevel _selectionLevel;
public SelectionLevelsServiceTests()
{
@@ -37,7 +39,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAll_ShouldReturnListOfLevels_Always()
{
var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
SelectionLevelService service = new(databaseContext, _mapper);
SelectionLevelService service = new(databaseContext, _mapper, _logger);

var result = await service.GetAllAsync();

@@ -56,7 +58,7 @@ namespace Diligent.WebAPI.Tests.Services
new SelectionProcess{ Id = 4, Status = "Čeka na zakazivanje", Date = DateTime.Now.AddMonths(-1)},
};

SelectionLevelService service = new(databaseContext, _mapper);
SelectionLevelService service = new(databaseContext, _mapper, _logger);
var filter = new SelectionProcessFilterDto
{
DateStart = DateTime.Now.AddDays(-1),
@@ -74,7 +76,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldReturnLevel_WhenLevelExist()
{
var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
SelectionLevelService service = new(databaseContext, _mapper);
SelectionLevelService service = new(databaseContext, _mapper, _logger);

var result = await service.GetByIdAsync(1);

@@ -85,7 +87,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldThrowEntityNotFooundException_WhenLevelDoesnotExist()
{
var databaseContext = await Helpers<SelectionLevel>.GetDatabaseContext(_levels);
SelectionLevelService service = new(databaseContext, _mapper);
SelectionLevelService service = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetByIdAsync(1000));
}

+ 21
- 19
Diligent.WebAPI.Tests/Services/SelectionProcessServiceTests.cs Ver fichero

@@ -5,6 +5,7 @@ using Diligent.WebAPI.Contracts.DTOs.SelectionLevel;
using Diligent.WebAPI.Contracts.DTOs.SelectionProcess;
using Diligent.WebAPI.Contracts.Exceptions;
using Diligent.WebAPI.Data.Entities;
using Microsoft.Extensions.Logging;

namespace Diligent.WebAPI.Tests.Services
{
@@ -13,6 +14,7 @@ namespace Diligent.WebAPI.Tests.Services
private readonly IMapper _mapper;
private readonly List<SelectionProcess> _processes;
private readonly SelectionProcess _selectionProcess;
private ILogger<SelectionProcessService> _logger = Substitute.For<ILogger<SelectionProcessService>>();
private readonly SelectionProcessCreateDto _selectionProcessCreateDto;
public SelectionProcessServiceTests()
{
@@ -57,32 +59,32 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAll_ShouldReturnListOfProcesses_Always()
{
var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
SelectionProcessService service = new(databaseContext, _mapper);
SelectionProcessService service = new(databaseContext, _mapper, _logger);

var result = await service.GetAllAsync();

result.Should().HaveCount(1);
}

[Fact]
public async Task GetById_ShouldReturnProcess_WhenProcessExist()
{
var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
SelectionProcessService service = new(databaseContext, _mapper);
//[Fact]
//public async Task GetById_ShouldReturnProcess_WhenProcessExist()
//{
// var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
// SelectionProcessService service = new(databaseContext, _mapper, _logger);

var result = await service.GetByIdAsync(1);
// var result = await service.GetByIdAsync(1);

result.Should().BeEquivalentTo(_mapper.Map<SelectionProcessResposneDto>(_selectionProcess));
}
// result.Should().BeEquivalentTo(_mapper.Map<SelectionProcessResposneDto>(_selectionProcess));
//}

[Fact]
public async Task GetById_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
{
var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
SelectionProcessService service = new(databaseContext, _mapper);
//[Fact]
//public async Task GetById_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
//{
// var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
// SelectionProcessService service = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetByIdAsync(1000));
}
// await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.GetByIdAsync(1000));
//}

[Fact]
public async Task FinishSelectionProcess_ShouldReturnTrueAndAddNewSelectionProcess_WhenProcessExists()
@@ -105,7 +107,7 @@ namespace Diligent.WebAPI.Tests.Services
};

var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(processes);
SelectionProcessService service = new(databaseContext, _mapper);
SelectionProcessService service = new(databaseContext, _mapper, _logger);
var result = await service.FinishSelectionProcess(_selectionProcessCreateDto);
var newProcesses = await service.GetAllAsync();
@@ -117,7 +119,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task FinishSelectionProcess_ShouldThrowEntityNotFooundException_WhenProcessDoesnotExist()
{
var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
SelectionProcessService service = new(databaseContext, _mapper);
SelectionProcessService service = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await service.FinishSelectionProcess(new SelectionProcessCreateDto { Id = 1000 }));
}
@@ -126,7 +128,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task FinishSelectionProcess_ShouldThrowEntityNotFooundException_WhenProcessIsInLastLevel()
{
var databaseContext = await Helpers<SelectionProcess>.GetDatabaseContext(_processes);
SelectionProcessService service = new(databaseContext, _mapper);
SelectionProcessService service = new(databaseContext, _mapper, _logger);

await Assert.ThrowsAsync<InvalidOperationException>(async () => await service.FinishSelectionProcess(new SelectionProcessCreateDto { Id = 1, SelectionLevelId = 4 }));
}

+ 8
- 5
Diligent.WebAPI.Tests/Services/TechnologyServiceTests.cs Ver fichero

@@ -1,9 +1,11 @@
using AutoMapper;
using Castle.Core.Logging;
using Diligent.WebAPI.Business.MappingProfiles;
using Diligent.WebAPI.Business.Services;
using Diligent.WebAPI.Contracts.DTOs.Technology;
using Diligent.WebAPI.Contracts.Exceptions;
using Diligent.WebAPI.Data.Entities;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -17,6 +19,7 @@ namespace Diligent.WebAPI.Tests.Services
private readonly IMapper _mapper;
private readonly List<Technology> _technologies = new();
private readonly Technology _technology;
private readonly ILogger<TechnologyService> _logger = Substitute.For<ILogger<TechnologyService>>();

public TechnologyServiceTests()
{
@@ -41,7 +44,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetAll_ShouldReturnListOfTechnologies_WhenCalled()
{
var databaseContext = await Helpers<Technology>.GetDatabaseContext(_technologies);
TechnologyService tehnologyService = new(_mapper, databaseContext);
TechnologyService tehnologyService = new(_mapper, databaseContext, _logger);

var result = await tehnologyService.GetAllAsync();

@@ -52,7 +55,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldReturnTechnology_WhenTechnologyExists()
{
var databaseContext = await Helpers<Technology>.GetDatabaseContext(_technologies);
TechnologyService tehnologyService = new(_mapper, databaseContext);
TechnologyService tehnologyService = new(_mapper, databaseContext, _logger);

var result = await tehnologyService.GetByIdAsync(1);

@@ -63,7 +66,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetById_ShouldThrowEntityNotFoundException_WhenTechnologyDontExists()
{
var databaseContext = await Helpers<Technology>.GetDatabaseContext(_technologies);
TechnologyService tehnologyService = new(_mapper, databaseContext);
TechnologyService tehnologyService = new(_mapper, databaseContext, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await tehnologyService.GetByIdAsync(1000));
}
@@ -72,7 +75,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetEntityById_ShouldReturnTechnology_WhenTechnologyExists()
{
var databaseContext = await Helpers<Technology>.GetDatabaseContext(_technologies);
TechnologyService tehnologyService = new(_mapper, databaseContext);
TechnologyService tehnologyService = new(_mapper, databaseContext, _logger);

var result = await tehnologyService.GetEntityByIdAsync(1);

@@ -83,7 +86,7 @@ namespace Diligent.WebAPI.Tests.Services
public async Task GetEntityById_ShouldThrowEntityNotFoundException_WhenTechnologyDontExists()
{
var databaseContext = await Helpers<Technology>.GetDatabaseContext(_technologies);
TechnologyService tehnologyService = new(_mapper, databaseContext);
TechnologyService tehnologyService = new(_mapper, databaseContext, _logger);

await Assert.ThrowsAsync<EntityNotFoundException>(async () => await tehnologyService.GetEntityByIdAsync(1000));
}

+ 8
- 5
Diligent.WebAPI.Tests/Services/UserServiceTests.cs Ver fichero

@@ -22,11 +22,14 @@ namespace Diligent.WebAPI.Tests.Services
private readonly IMapper _mapper;
private readonly IUserStore<User> _mockStore;
private readonly UserManager<User> _mockUserManager;
private readonly ILogger<UserService> _logger;


public UserServiceTests()
{
_mockStore = Substitute.For<IUserStore<User>>();
_mockUserManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
_logger = Substitute.For<ILogger<UserService>>();

_user = new User
{
@@ -69,7 +72,7 @@ namespace Diligent.WebAPI.Tests.Services
var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
var mailer = Substitute.For<IEmailer>();

var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
var result = await service.GetById(1);
result.Should().Be(_user);
}
@@ -83,7 +86,7 @@ namespace Diligent.WebAPI.Tests.Services
var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
var mailer = Substitute.For<IEmailer>();

var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
var result = await service.GetByEmail("mail");
result.Should().Be(_user);
}
@@ -96,7 +99,7 @@ namespace Diligent.WebAPI.Tests.Services
var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
var mailer = Substitute.For<IEmailer>();

var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);
await service.RemoveUser(_user);

var result = await service.GetById(2);
@@ -109,7 +112,7 @@ namespace Diligent.WebAPI.Tests.Services
var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
var mailer = Substitute.For<IEmailer>();
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);

var result = await service.ToggleEnable(_user);
Assert.Equal(false, result);
@@ -122,7 +125,7 @@ namespace Diligent.WebAPI.Tests.Services
var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
var frontSettings = Substitute.For<IOptions<FrontEndSettings>>();
var mailer = Substitute.For<IEmailer>();
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer);
var service = new UserService(frontSettings, _mockUserManager, _mapper, databaseContext, mailer, _logger);

var result = await service.SendRegistrationLink(new Contracts.DTOs.User.InviteDTO
{

Cargando…
Cancelar
Guardar