Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
        }
Exemplo n.º 3
0
        /// <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);
        }