public async Task ValidateKey_NoTargetApplication_ReturnFalse() { var applicationCode = "1"; var targetApplicationCode = "2"; var authKeyValue = "qwerty"; // реп приложений настраиваем, чтобы он не находил целевое приложение var repoMock = new Mock <IApplicationRepository>(); repoMock.Setup(x => x.GetApplicationByCodeAsync(applicationCode, default)) .Returns(() => Task.FromResult( new KeyApplication(applicationCode, Guid.NewGuid()))); repoMock.Setup(x => x.GetApplicationByCodeAsync(targetApplicationCode, default)) .Returns(() => Task.FromResult(KeyApplication.NoApplication)); // реп ключей к этому моменту не должен вызываться, так как мы вылетели раньше var keyRepoMock = new Mock <IKeyRepository>(); keyRepoMock.Setup(x => x.GetApplicationForKeyAsync(It.IsAny <ApplicationWithKey>(), default)) .Throws(new Exception("Мы не должны доходить до проверки ключа")); var validator = _commonHelper.InitValidator(repoMock.Object, keyRepoMock.Object); var requestModel = new ApplicationCodeAuthKeyValidateRequest(applicationCode, targetApplicationCode, authKeyValue); var result = await validator.ValidateKeyAsync(requestModel); Assert.True(result is false); }
private async Task ExecuteTestSequenceAsync() { // тесты самого сервиса var result = await _keyValidator.GetAllKnownApplicationsAsync(); var isValid = await _keyValidator.GetPermittedApplicationsAsync("Tort"); var request = new ApplicationCodeAuthKeyValidateRequest("Nep", "Tort", "1"); var validateKey = await _keyValidator.ValidateKeyAsync(request); //тесты апи var apiRequest = new ValidateKeyRequest("Nep", "Tort", "1"); var isValidFromApi = await _keyCheckerApiClient.ValidateApplicationKey(apiRequest); if (isValidFromApi) { Console.WriteLine("Апи сработало. Ну и отлично."); } }
/// <summary> /// Проверяет что предоставленный ключ от приложения делающего запрос /// существует целевого приложения /// </summary> public async ValueTask <bool> ValidateKeyAsync( ApplicationCodeAuthKeyValidateRequest request, CancellationToken token = default) { if (request is null) { _logger?.LogError(requestBodyIsNull); throw new ArgumentNullException(nameof(request), requestBodyIsNull); } var application = await _applicationRepository.GetApplicationByCodeAsync(request.RequestingApplicationCode, token); if (application is NoKeyApplication) { _logger?.LogWarning( $"Не смогли найти запрашивающее приложение по ключу {request.RequestingApplicationCode}"); return(false); } var targetApplication = await _applicationRepository.GetApplicationByCodeAsync(request.TargetApplicationCode, token); if (targetApplication is NoKeyApplication) { _logger?.LogWarning( $"Не смогли найти целевое приложение, " + $"код приложения {request.TargetApplicationCode}"); return(false); } var applicationKeyValidate = new ApplicationWithKey(application, targetApplication, request.Key); var authResult = await _keyRepository.GetApplicationForKeyAsync(applicationKeyValidate, token); return(authResult switch { NoAuthKey _ => false, ExistingAuthKey key => key.Enabled, _ => throw new Exception("Не знаю как обработать ключ") });
public async Task ValidateKey_KeyFound(bool keyIsEnabled) { // ARRANGE var applicationCode = "1"; var application = new KeyApplication(applicationCode, Guid.NewGuid()); var targetApplicationCode = "2"; var targetApplication = new KeyApplication(targetApplicationCode, Guid.NewGuid()); var authKeyValue = "qwerty"; // реп приложений настраиваем, чтобы он находил все приложения var repoMock = new Mock <IApplicationRepository>(); repoMock.Setup(x => x.GetApplicationByCodeAsync(applicationCode, default)) .Returns(() => Task.FromResult(application)); repoMock.Setup(x => x.GetApplicationByCodeAsync(targetApplicationCode, default)) .Returns(() => Task.FromResult(targetApplication)); // реп ключей должен не находить такого ключа var keyRepoMock = new Mock <IKeyRepository>(); keyRepoMock.Setup(x => x.GetApplicationForKeyAsync(It.IsAny <ApplicationWithKey>(), default)) .Returns(() => Task.FromResult <AuthKey>( new ExistingAuthKey(authKeyValue, keyIsEnabled, application, targetApplication))); var validator = _commonHelper.InitValidator(repoMock.Object, keyRepoMock.Object); // ACT var requestModel = new ApplicationCodeAuthKeyValidateRequest(applicationCode, targetApplicationCode, authKeyValue); var result = await validator.ValidateKeyAsync(requestModel); // ASSERT Assert.Equal(keyIsEnabled, result); }