| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- using AutoMapper;
- using Diligent.WebAPI.Business.MappingProfiles;
- using Diligent.WebAPI.Business.Services;
- using Diligent.WebAPI.Business.Settings;
- using Diligent.WebAPI.Contracts.DTOs;
- using Diligent.WebAPI.Contracts.DTOs.Auth;
- using Diligent.WebAPI.Contracts.Models;
- using Diligent.WebAPI.Data.Entities;
- using Microsoft.AspNetCore.Identity;
- using Microsoft.AspNetCore.WebUtilities;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using NSubstitute.ReturnsExtensions;
- using System.Text;
-
- namespace Diligent.WebAPI.Tests.Services
- {
- public class AuthenticationServiceTests
- {
- private readonly List<User> _users;
- private readonly List<RefreshToken> _tokens;
- private readonly IUserStore<User> _mockStore;
- private readonly UserManager<User> _mockUserManager;
- private readonly IEmailer _emailer = Substitute.For<IEmailer>();
- private readonly IMapper _mapper;
- private readonly ILogger<AuthenticationService> _logger = Substitute.For<ILogger<AuthenticationService>>();
- private readonly IHttpClientService _httpClient = Substitute.For<IHttpClientService>();
-
- public AuthenticationServiceTests()
- {
- _mockStore = Substitute.For<IUserStore<User>>();
- _mockUserManager = Substitute.For<UserManager<User>>(_mockStore, null, null, null, null, null, null, null, null);
- _tokens = new List<RefreshToken>
- {
- new RefreshToken
- {
- Id = 1,
- CreationDate = DateTime.UtcNow,
- ExpiryDate = DateTime.UtcNow.AddDays(5),
- UserId = 1,
- Invalidated = false,
- JwtId = "string",
- Used = false,
- Token = "refresh"
- },
- new RefreshToken
- {
- Id = 2,
- CreationDate = DateTime.UtcNow,
- ExpiryDate = DateTime.UtcNow.AddDays(5),
- UserId = 2,
- Invalidated = false,
- JwtId = "string",
- Used = false,
- Token = "refresh"
- },
- new RefreshToken
- {
- Id = 3,
- CreationDate = DateTime.UtcNow,
- ExpiryDate = DateTime.UtcNow.AddDays(5),
- UserId = 3,
- Invalidated = false,
- JwtId = "string",
- Used = false,
- Token = "refresh"
- }
- };
-
- _users = new List<User>
- {
- new User
- {
- Id = 1,
- PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
- FirstName = "User",
- LastName = "One",
- UserName = "user1",
- NormalizedUserName = "USER1",
- Email = "user1@dilig.net",
- NormalizedEmail = "USER1@DILIG.NET",
- EmailConfirmed = false,
- IsEnabled = true,
- AccessFailedCount = 0,
- SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- },
- new User
- {
- Id = 2,
- PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
- FirstName = "User",
- LastName = "Two",
- UserName = "user2",
- NormalizedUserName = "USER2",
- Email = "user2@dilig.net",
- NormalizedEmail = "USER2@DILIG.NET",
- EmailConfirmed = false,
- IsEnabled = true,
- AccessFailedCount = 0,
- SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- },
- new User
- {
- Id = 3,
- PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
- FirstName = "User",
- LastName = "Three",
- UserName = "user3",
- NormalizedUserName = "USER3",
- Email = "user3@dilig.net",
- NormalizedEmail = "USER3@DILIG.NET",
- EmailConfirmed = false,
- IsEnabled = false,
- AccessFailedCount = 0,
- SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- },
- new User
- {
- Id = 4,
- PasswordHash = "AQAAAAEAACcQAAAAEJnWVhD/qftzqJq5XOUD0BxEBEwhd7vS46HeDD+9cwEsqO9ev9xEORJVjmFMASUGJg==",
- FirstName = "User",
- LastName = "Four",
- UserName = "user4",
- NormalizedUserName = "USER4",
- Email = "user4@dilig.net",
- NormalizedEmail = "USER4@DILIG.NET",
- EmailConfirmed = false,
- IsEnabled = true,
- AccessFailedCount = 0,
- SecurityStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- ConcurrencyStamp = "2D3XPK2P5MAKO377AWFU3T4ZFFYTSOJX",
- }
- };
-
- // configure mapper
- var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(
- new List<Profile>
- {
- new UserMappingProfile()
- }));
-
- _mapper = new Mapper(configuration);
- }
-
- [Fact]
- public async Task Authenticate_ShouldReturnError_IfInvalidUsername()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).ReturnsNull();
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = "Any",
- Password = "Any"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = "Username is not valid"
- });
- }
-
- [Fact]
- public async Task Authenticate_ShouldCall_CheckPasswordAsync()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = _users[1].Email,
- Password = "Any"
- });
-
- await _mockUserManager.Received(1).CheckPasswordAsync(_users[1], "Any");
-
- }
-
- [Fact]
- public async Task Authenticate_ShouldReturnError_IfUserIsDisabled()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).Returns(_users[2]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = _users[2].Email,
- Password = "Any"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = $"User with email {_users[2].Email} has no permission to log in."
- });
- }
-
- [Fact]
- public async Task Authenticate_ShouldReturnError_IfInvalidPassword()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = _users[1].Email,
- Password = "Any"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = $"Password is not correct"
- });
- }
-
- [Fact]
- public async Task Authenticate_ShouldReturnError_IfUserIsLockedOut()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).Returns(_users[3]);
- _mockUserManager.CheckPasswordAsync(Arg.Any<User>(), Arg.Any<string>()).Returns(true);
- _mockUserManager.IsLockedOutAsync(Arg.Any<User>()).Returns(true);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings {
- Secret = "S1231251WAS124AS"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = _users[3].Email,
- Password = "Nekasifra123!"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = "The account is locked out"
- });
- }
-
- [Fact]
- public async Task Authenticate_ShouldGenerateToken_IfCredsAreValid()
- {
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new Contracts.DTOs.Auth.AuthenticateRequestDto
- {
- Username = _users[1].Email,
- Password = "Nekasifra123!"
- });
-
- Assert.IsType<ServiceResponseDTO<AuthenticateResponseDto>>(result);
- }
-
- [Fact]
- public async Task AuthenticateGoogle_ShouldReturnError_IfInvalidApiToken()
- {
- _httpClient.IsTokenValid(Arg.Any<string>()).Returns(false);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new GoogleApiModel
- {
- Token = "t",
- User = new GoogleApiTokenInfo
- {
- email = "something@dilig.net"
- }
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = "Invalid Google Api Token"
- });
- }
-
- [Fact]
- public async Task AuthenticateGoogle_ShouldReturnError_IfUserDoesntExist()
- {
- _httpClient.IsTokenValid(Arg.Any<string>()).Returns(true);
- _mockUserManager.FindByNameAsync(Arg.Any<string>()).ReturnsNull();
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new GoogleApiModel
- {
- Token = "t",
- User = new GoogleApiTokenInfo
- {
- email = _users[1].Email,
- }
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = $"User with email {_users[1].Email} does not exist in database"
- });
- }
-
- [Fact]
- public async Task AuthenticateGoogle_ShouldReturnError_IfUserIsDisabled()
- {
- _httpClient.IsTokenValid(Arg.Any<string>()).Returns(true);
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[2]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new GoogleApiModel
- {
- Token = "token",
- User = new GoogleApiTokenInfo
- {
- email = _users[2].Email,
- }
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = $"User with email {_users[2].Email} has no permission to log in."
- });
- }
-
- [Fact]
- public async Task AuthenticateGoogle_ShouldGenerateToken()
- {
- _httpClient.IsTokenValid(Arg.Any<string>()).Returns(true);
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings
- {
- Secret = "S1231251WAS124AS"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Authenticate(new GoogleApiModel
- {
- Token = "token",
- User = new GoogleApiTokenInfo
- {
- email = _users[1].Email
- }
- });
-
- Assert.IsType<ServiceResponseDTO<AuthenticateResponseDto>>(result);
- }
-
- [Fact]
- public async Task Register_ShouldReturnError_IfUserNotFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).ReturnsNull();
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.Register(new Contracts.DTOs.User.RegisterDTO
- {
- Token = "token",
- LinkedIn = "Link",
- Confirm = "Password123!",
- Email = _users[1].Email,
- Password = "Password123!",
- Phone = "123",
- Position = "Senior Dev"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<AuthenticateResponseDto>
- {
- IsError = true,
- ErrorMessage = "User not invited."
- });
- }
-
- [Fact]
- public async Task Register_ShouldCreateUser_IfUserExists()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
-
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- _mockUserManager.ResetPasswordAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>()).Returns(IdentityResult.Success);
-
- var result = await service.Register(new Contracts.DTOs.User.RegisterDTO
- {
- Token = "token",
- LinkedIn = "Link",
- Confirm = "Password123!",
- Email = _users[1].Email,
- Password = "Password123!",
- Phone = "123",
- Position = "Senior Dev"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- {
- Data = true,
- });
- }
-
- [Fact]
- public async Task Register_ShouldThrowError_IfUnsuccessfulReset()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
-
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- _mockUserManager.ResetPasswordAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>())
- .Returns(IdentityResult.Failed(
- new IdentityError[] {
- new IdentityError {
- Description= "Failed"
- }
- }
- ));
-
- var result = await service.Register(new Contracts.DTOs.User.RegisterDTO
- {
- Token = "token",
- LinkedIn = "Link",
- Confirm = "Password123!",
- Email = _users[1].Email,
- Password = "Password123!",
- Phone = "123",
- Position = "Senior Dev"
- });
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- {
- IsError = true,
- ErrorMessage = "Failed"
- });
- }
-
- [Fact]
- public async Task PasswordResetAsync_ShouldReturnError_IfUserNotFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).ReturnsNull();
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.PasswordResetAsync(
- email: _users[1].Email,
- code: "code",
- password: "Password123!"
- );
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- {
- IsError = true,
- ErrorMessage = "Email did not find."
- });
- }
-
- [Fact]
- public async Task PasswordResetAsync_ShouldResetToken_IfUserFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- _mockUserManager.ResetPasswordAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>())
- .Returns(IdentityResult.Success);
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.PasswordResetAsync(
- email: _users[1].Email,
- code: "code",
- password: "Password123!"
- );
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- { Data = true }
- );
- }
-
- [Fact]
- public async Task PasswordResetAsync_ShouldReturnError_IfUnsuccessfulReset()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- _mockUserManager.ResetPasswordAsync(Arg.Any<User>(), Arg.Any<string>(), Arg.Any<string>())
- .Returns(IdentityResult.Failed(
- new IdentityError[] {
- new IdentityError {
- Description= "Failed"
- }
- }
- ));
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.PasswordResetAsync(
- email: _users[1].Email,
- code: "code",
- password: "Password123!"
- );
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- {
- IsError = true,
- ErrorMessage = "Failed"
- });
- }
-
- [Fact]
- public async Task GetForgotPasswordUrlAsync_ShouldReturnError_IfUserNotFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).ReturnsNull();
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.GetForgotPasswordUrlAsync(_users[1].Email);
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<object>
- {
- IsError = true,
- ErrorMessage = "Email did not find."
- });
- }
-
- [Fact]
- public async Task GetForgotPasswordUrlAsync_ShouldReturnSuccess_IfUserIsFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- await service.GetForgotPasswordUrlAsync(_users[1].Email);
-
- await _emailer.ReceivedWithAnyArgs(1)
- .SendEmailAndWriteToDbAsync("mail", "reset", "url", true);
- }
-
- [Fact]
- public async Task GetForgotPasswordUrlAsync_ShouldCallEmailer_IfUserIsFound()
- {
- _mockUserManager.FindByEmailAsync(Arg.Any<string>()).Returns(_users[1]);
- var databaseContext = await Helpers<User>.GetDatabaseContext(_users);
-
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var authSettings = Options.Create(new AuthorizationSettings { });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.GetForgotPasswordUrlAsync(_users[1].Email);
-
- result.Should().BeOfType(typeof(ServiceResponseDTO<object>));
- }
-
- [Fact]
- public async Task UpdateRefreshToken_ShouldUpdate()
- {
- var databaseContext = await Helpers<User>.GetDatabaseContextWithRelation(_users, _tokens);
- var authSettings = Options.Create(new AuthorizationSettings { });
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var first = await databaseContext.RefreshTokens.FindAsync(1);
-
- await service.UpdateRefreshToken(first);
- databaseContext.Entry(first).Should().NotBeNull();
- }
-
- [Fact]
- public async Task DeleteRefreshToken_ShouldReturnError_IfTokenDoesNotExist()
- {
- var databaseContext = await Helpers<User>.GetDatabaseContextWithRelation(_users, _tokens);
-
- var authSettings = Options.Create(new AuthorizationSettings { });
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.DeleteRefreshToken(1000); // not existing token
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<string>
- {
- IsError = true,
- ErrorMessage = "There is no refresh token for user"
- });
- }
-
- [Fact]
- public async Task DeleteRefreshToken_ShouldSucceed_IfTokenExists()
- {
- var databaseContext = await Helpers<User>.GetDatabaseContextWithRelation(_users, _tokens);
-
- var authSettings = Options.Create(new AuthorizationSettings { });
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.DeleteRefreshToken(1); // not existing token
-
- result.Should().BeEquivalentTo(new ServiceResponseDTO<string>
- {
- Data = null
- });
- }
-
- [Fact]
- public async Task GetRefreshTokenByUserId_ShouldReturnTokenOrNull()
- {
- var databaseContext = await Helpers<User>.GetDatabaseContextWithRelation(_users, _tokens);
-
- var authSettings = Options.Create(new AuthorizationSettings { });
- var frontEndSettings = Options.Create(new FrontEndSettings
- {
- BaseUrl = "some url"
- });
-
- var service = new AuthenticationService(authSettings, frontEndSettings, _mockUserManager, databaseContext, _emailer, _logger, _httpClient, _mapper);
-
- var result = await service.GetRefreshTokenByUserId(1);
-
- result.Should().BeEquivalentTo(_tokens[0]);
- }
- }
- }
|