public void ConstructorTests() { var mockGraphClient = new Mock <IGraphServiceClient>().Object; var mockLoggingRepository = new Mock <ILoggingRepository>().Object; var mockServiceAttemptValue = new Mock <IGraphServiceAttemptsValue>().Object; Assert.Throws <ArgumentNullException>(() => new GraphUserRepository(null, mockGraphClient, mockServiceAttemptValue)); Assert.Throws <ArgumentNullException>(() => new GraphUserRepository(mockLoggingRepository, null, mockServiceAttemptValue)); var repo = new GraphUserRepository(mockLoggingRepository, mockGraphClient, mockServiceAttemptValue); Assert.NotNull(repo); }
public async Task GetProfilesTest() { var mockBaseClient = new Mock <IBaseClient>(); mockBaseClient.Setup(c => c.AuthenticationProvider).Returns(new Mock <IAuthenticationProvider>().Object); var requestMessage = new HttpRequestMessage { RequestUri = new Uri("https://graph.contoso.com/v1/fakerequest") }; var mockRequest = new Mock <IGraphServiceUsersCollectionRequest>(); mockRequest.Setup(r => r.Filter(It.IsAny <string>())).Returns(mockRequest.Object); mockRequest.Setup(r => r.Select(It.IsAny <string>())).Returns(mockRequest.Object); mockRequest.Setup(r => r.MiddlewareOptions).Returns(new Dictionary <string, IMiddlewareOption>()); mockRequest.Setup(r => r.Client).Returns(mockBaseClient.Object); mockRequest.Setup(r => r.GetHttpRequestMessage()).Returns(requestMessage); var mockUsers = new Mock <IGraphServiceUsersCollectionRequestBuilder>(); mockUsers.Setup(o => o.Request()).Returns(mockRequest.Object); var mockAuthProvider = new Mock <IAuthenticationProvider>(); mockAuthProvider.Setup(p => p.AuthenticateRequestAsync(It.IsAny <HttpRequestMessage>())).Returns(Task.CompletedTask); StringContent content; using (var reader = System.IO.File.OpenText(HTTP_CONTENT_PATH)) { content = new StringContent(reader.ReadToEnd()); } var response = new HttpResponseMessage(HttpStatusCode.ServiceUnavailable) { Content = content }; response.Headers.RetryAfter = new RetryConditionHeaderValue(DateTimeOffset.UtcNow.AddSeconds(10)); var mockHttpProvider = new Mock <IHttpProvider>(); int retryCount = 0; mockHttpProvider.Setup(p => p.SendAsync(It.IsAny <HttpRequestMessage>())).Callback <HttpRequestMessage>(request => { if (retryCount++ == 3) { response.StatusCode = HttpStatusCode.OK; } }).Returns(Task.FromResult(response)); var httpProvider = mockHttpProvider.Object; var mockGraphClient = new Mock <IGraphServiceClient>(); mockGraphClient.Setup(c => c.Users).Returns(mockUsers.Object); mockGraphClient.Setup(c => c.AuthenticationProvider).Returns(mockAuthProvider.Object); mockGraphClient.Setup(c => c.HttpProvider).Returns(httpProvider); var mockLoggingRepository = new Mock <ILoggingRepository>(); var mockServiceAttemptValue = new Mock <IGraphServiceAttemptsValue>(); mockServiceAttemptValue.SetupGet(x => x.MaxRetryAfterAttempts).Returns(5); var repo = new GraphUserRepository(mockLoggingRepository.Object, mockGraphClient.Object, mockServiceAttemptValue.Object); var personnelNumbers = new List <string> { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13" }; await repo.GetAzureADObjectIdsAsync(personnelNumbers, Guid.NewGuid()); mockHttpProvider.Verify(x => x.SendAsync(It.IsAny <HttpRequestMessage>()), Times.Exactly(4)); // 1st time actual call + 3 retries }
/// <summary> /// (Required) Entry method of your Lambda function. /// </summary> /// <param name="lambdaEvent">Type returned from CodeMash</param> /// <param name="context">Context data of a function (function config)</param> /// <returns></returns> public async Task <GraphUser> Handler(CustomEventRequest <BasicInput> lambdaEvent, ILambdaContext context) { string displayName, password, email; if (lambdaEvent.Input.Data != null) { ProcessDTO items = JsonConvert.DeserializeObject <ProcessDTO>(lambdaEvent.Input.Data); displayName = items.DisplayName; email = items.Email; password = items.Password; if (items.ApiKey != null) { HrApp.Settings.ApiKey = items.ApiKey; } } else { displayName = Environment.GetEnvironmentVariable("displayName"); email = Environment.GetEnvironmentVariable("email"); password = Environment.GetEnvironmentVariable("password"); if (Environment.GetEnvironmentVariable("apiKey") != null) { HrApp.Settings.ApiKey = Environment.GetEnvironmentVariable("apiKey"); } } if (HrApp.Settings.ApiKey == null) { throw new BusinessException("ApiKey not set"); } if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(displayName) || string.IsNullOrEmpty(password)) { throw new BusinessException("All fields must be filled with data"); } try { var addr = new System.Net.Mail.MailAddress(email); if (addr.Address != email) { throw new BusinessException("Your email is invalid"); } } catch { throw new BusinessException("Your email is invalid"); } if (password.Length < 8) { throw new BusinessException("Password must contain at least 8 characters"); } if (!password.Any(char.IsUpper)) { throw new BusinessException("Password must contain at least one upper char"); } if (!password.Any(char.IsDigit)) { throw new BusinessException("Password must contain at least one digit"); } var user = new GraphUser { AccountEnabled = true, DisplayName = displayName, UserPrincipalName = email, MailNickname = email.Split('@')[0], PasswordProfile = new PasswordProfile { ForceChangePasswordNextSignIn = true, Password = password } }; GraphUserRepository graphUserRepo = new GraphUserRepository(); var createdUser = await graphUserRepo.CreateGraphUser(user); return(createdUser); }