public async Task Should_return_user_names_starting_with_text()
        {
            var text   = "test'user";
            var filter = $"startswith(userPrincipalName,'{text.Replace("'", "''")}')";

            _queryUrl += $"?$filter={filter}";

            var user = new Microsoft.Graph.User()
            {
                UserPrincipalName = "TestUser"
            };
            var azureAdGraphQueryResponse = new AzureAdGraphQueryResponse <Microsoft.Graph.User>()
            {
                Value = new List <Microsoft.Graph.User> {
                    user
                }
            };

            _secureHttpRequest.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(ApiRequestHelper.CreateHttpResponseMessage(azureAdGraphQueryResponse, HttpStatusCode.OK));

            var response = await _client.GetUsernamesStartingWithAsync(text);

            response.Should().NotBeNull();
            var users = response.ToList();

            users.Count.Should().Be(1);
            users.First().Should().Be("TestUser");
            _secureHttpRequest.Verify(x => x.GetAsync(_graphApiSettings.Object.AccessToken, _queryUrl), Times.Once);
        }
        public async Task Should_filter_users_and_return_null_if_no_users()
        {
            AzureAdGraphQueryResponse = new AzureAdGraphQueryResponse <AzureAdGraphUserResponse>();
            var serialised = JsonConvert.SerializeObject(AzureAdGraphQueryResponse);
            var response   = new HttpResponseMessage();

            response.StatusCode = HttpStatusCode.OK;
            response.Content    = new StringContent(serialised);
            response.Content.Headers.Clear();
            response.Content.Headers.Add("Content-Type", "application/json");
            SecureHttpRequest.Setup(x => x.GetAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(response);

            var result = await Service.GetUserByFilterAsync("*****@*****.**");

            Assert.IsNull(result);
        }
        public void Setup()
        {
            SecureHttpRequest = new Mock <ISecureHttpRequest>();

            _settings = new Settings {
                IsLive  = true, ReformEmail = Domain.Replace("@", ""),
                AdGroup = new AdGroup
                {
                    Administrator = "Admin",
                }
            };

            var azureAdConfig = new AzureAdConfiguration()
            {
                ClientId     = "TestClientId",
                ClientSecret = "TestSecret",
                Authority    = "https://Test/Authority",
            };
            var tokenProvider = new Mock <ITokenProvider>();

            GraphApiSettings         = new GraphApiSettings(tokenProvider.Object, azureAdConfig);
            IdentityServiceApiClient = new Mock <IIdentityServiceApiClient>();

            AzureAdGraphUserResponse = new AzureAdGraphUserResponse()
            {
                ObjectId          = "1",
                DisplayName       = "T Tester",
                GivenName         = "Test",
                Surname           = "Tester",
                OtherMails        = new List <string>(),
                UserPrincipalName = "TestUser"
            };
            AzureAdGraphQueryResponse = new AzureAdGraphQueryResponse <AzureAdGraphUserResponse> {
                Value = new List <AzureAdGraphUserResponse> {
                    AzureAdGraphUserResponse
                }
            };

            var additionalData = new Dictionary <string, object>();

            var jobject = new JObject
            {
                new JProperty("@odata.type", "#microsoft.graph.group"),
                new JProperty("startDateTime", DateTime.UtcNow),
                new JProperty("endDateTime", DateTime.UtcNow.AddYears(1)),
                new JProperty("secretText", "The passwords must be 16-64 characters in length"),
                new JProperty("keyId", Guid.NewGuid().ToString()),
                new JProperty("hint", "something")
            };

            additionalData.Add("value", new List <JObject> {
                jobject
            });
            DirectoryObject = new DirectoryObject
            {
                Id             = "1",
                AdditionalData = additionalData,
                ODataType      = "@odata.type"
            };

            DistributedCache = new Mock <ICache>();

            Service = new UserApi.Services.UserAccountService(SecureHttpRequest.Object, GraphApiSettings, IdentityServiceApiClient.Object, _settings, DistributedCache.Object);
        }