Example #1
0
        public async Task Test_ClientController_FindAsync_Happy()
        {
            var query = new FindClientRequest()
            {
                Name = "test"
            };

            int expectedClientId = 123;

            A.CallTo(() => fakeClientQueryHelper.QueryResource(A <FindClientRequest> .Ignored))
            .Returns(Task.FromResult(new ResourceQueryHelperResult <FindClientResult>()
            {
                Results = new[]
                {
                    new FindClientResult()
                    {
                        ClientId = expectedClientId
                    }
                }
            }));

            var result = await clientController.FindAsync(query);

            Assert.IsInstanceOf <OkObjectResult>(result);

            var viewResult = (result as OkObjectResult).Value as FindClientResponse;

            Assert.NotNull(viewResult);
            Assert.AreEqual(expectedClientId, viewResult.Clients.First().ClientId);
        }
Example #2
0
        public async Task <IActionResult> FindAsync([FromQuery] FindClientRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ErrorResponse()
                {
                    Messages = ModelState.Values
                               .SelectMany(_value => _value.Errors.Select(_error => _error.ErrorMessage)).ToArray()
                }));
            }

            try
            {
                var results = await _clientQueryHelper.QueryResource(request);

                return(Ok(new FindClientResponse
                {
                    TotalFoundClients = results.TotalResultCount,
                    Clients = results.Results
                }));
            }

            catch (Exception e)
            {
                _logger.LogWarning(e, "Failed to retrieve clients with query - {@request}", request);

                return(StatusCode(StatusCodes.Status500InternalServerError, new ErrorResponse()
                {
                    Messages = new[] { e.Message }
                }));
            }
        }
Example #3
0
        public async Task Test_ClientController_FindAsync_InvalidModelState()
        {
            var query = new FindClientRequest();

            clientController.ModelState.AddModelError("test", "test");
            var result = await clientController.FindAsync(query);

            Assert.IsInstanceOf <BadRequestObjectResult>(result);
            clientController.ModelState.Clear();
        }
Example #4
0
        public async Task Test_ClientController_FindAsync_Exception()
        {
            string expectedExceptionMessage = "failure";
            int    expectedStatusCode       = 500;
            var    query = new FindClientRequest();

            A.CallTo(() => fakeClientQueryHelper.QueryResource(A <FindClientRequest> .Ignored))
            .Throws(new Exception(expectedExceptionMessage));

            var result = await clientController.FindAsync(query);

            Assert.IsInstanceOf <ObjectResult>(result);

            var statusResult = (result as ObjectResult);

            Assert.AreEqual(expectedStatusCode, statusResult.StatusCode);
            //Assert.IsTrue((statusResult.Value as ErrorResponse).Messages.Contains(expectedExceptionMessage));
        }
Example #5
0
        public async Task Test_QueryClientResource_SortDirection()
        {
            var firstClient = ClientGenerators.CreateBasicClient(null);

            firstClient.ClientId       = 0;
            firstClient.NetworkId      = -1;
            firstClient.LastConnection = DateTime.Now.AddHours(-1);
            firstClient.Name           = "test";
            var secondClient = ClientGenerators.CreateBasicClient(null);

            secondClient.ClientId       = 0;
            secondClient.NetworkId      = -2;
            secondClient.LastConnection = DateTime.Now;
            secondClient.Name           = firstClient.Name;

            var query = new FindClientRequest()
            {
                Name = firstClient.Name
            };

            using var context = contextFactory.CreateContext();

            context.Clients.Add(firstClient);
            context.Clients.Add(secondClient);
            await context.SaveChangesAsync();

            var result = await clientService.QueryResource(query);

            Assert.IsNotEmpty(result.Results);
            Assert.AreEqual(secondClient.NetworkId.ToString("X"), result.Results.First().Xuid);
            Assert.AreEqual(firstClient.NetworkId.ToString("X"), result.Results.Last().Xuid);

            query.Direction = SortDirection.Ascending;
            result          = await clientService.QueryResource(query);

            Assert.IsNotEmpty(result.Results);
            Assert.AreEqual(firstClient.NetworkId.ToString("X"), result.Results.First().Xuid);
            Assert.AreEqual(secondClient.NetworkId.ToString("X"), result.Results.Last().Xuid);

            context.Clients.Remove(firstClient);
            context.Clients.Remove(secondClient);
            await context.SaveChangesAsync();
        }
Example #6
0
        public async Task Test_QueryClientResource_NoMatch()
        {
            var query = new FindClientRequest()
            {
                Name = "test"
            };

            using var context = contextFactory.CreateContext();
            var client = ClientGenerators.CreateBasicClient(null);

            client.Name = "client";
            context.Clients.Add(client);
            await context.SaveChangesAsync();

            var result = await clientService.QueryResource(query);

            Assert.IsEmpty(result.Results);

            context.Clients.Remove(client);
            await context.SaveChangesAsync();
        }
Example #7
0
        public async Task Test_QueryClientResource_NameCaseInsensitivePartial()
        {
            var query = new FindClientRequest()
            {
                Name = "TEST"
            };

            using var context = contextFactory.CreateContext();
            var client = ClientGenerators.CreateBasicClient(null);

            client.Name = "atesticle";
            context.Clients.Add(client);
            await context.SaveChangesAsync();

            var result = await clientService.QueryResource(query);

            Assert.IsNotEmpty(result.Results);
            Assert.IsTrue(result.Results.First().Name.ToUpper().Contains(query.Name));

            context.Clients.Remove(client);
            await context.SaveChangesAsync();
        }
Example #8
0
        public async Task Test_QueryClientResource_Xuid()
        {
            var client = ClientGenerators.CreateBasicClient(null);

            client.NetworkId = -1;

            var query = new FindClientRequest()
            {
                Xuid = client.NetworkId.ToString("X")
            };

            using var context = contextFactory.CreateContext();

            context.Clients.Add(client);
            await context.SaveChangesAsync();

            var result = await clientService.QueryResource(query);

            Assert.IsNotEmpty(result.Results);
            Assert.AreEqual(query.Xuid, result.Results.First().Xuid);

            context.Clients.Remove(client);
            await context.SaveChangesAsync();
        }
 public override void FindClient(IRpcController controller, FindClientRequest request, Action<FindClientResponse> done)
 {
     throw new NotImplementedException();
 }
Example #10
0
 public override void FindClient(IRpcController controller, FindClientRequest request, Action <FindClientResponse> done)
 {
     throw new NotImplementedException();
 }
Example #11
0
 public override void FindClient(IRpcController controller, FindClientRequest request, Action<FindClientResponse> done)
 {
     ProtoOutputBuffer.Write(request.GetType(), request.ToString());
 }
Example #12
0
        /// <summary>
        /// find clients matching the given query
        /// </summary>
        /// <param name="query">query filters</param>
        /// <returns></returns>
        public async Task <ResourceQueryHelperResult <FindClientResult> > QueryResource(FindClientRequest query)
        {
            var result = new ResourceQueryHelperResult <FindClientResult>();

            await using var context = _contextFactory.CreateContext(enableTracking: false);

            IQueryable <Data.Models.Client.EFClient> iqClients = null;

            if (!string.IsNullOrEmpty(query.Xuid))
            {
                var networkId = query.Xuid.ConvertGuidToLong(System.Globalization.NumberStyles.HexNumber);
                iqClients = context.Clients.Where(_client => _client.NetworkId == networkId);
            }

            else if (!string.IsNullOrEmpty(query.Name))
            {
                iqClients = context.Clients
                            .Where(_client =>
                                   EF.Functions.Like(_client.CurrentAlias.Name.ToLower(), $"%{query.Name.ToLower()}%"));
            }

            if (query.Direction == SortDirection.Ascending)
            {
                iqClients = iqClients.OrderBy(_client => _client.LastConnection);
            }

            else
            {
                iqClients = iqClients.OrderByDescending(_client => _client.LastConnection);
            }

            var queryResults = await iqClients
                               .Select(_client => new FindClientResult
            {
                ClientId = _client.ClientId,
                Xuid     = _client.NetworkId.ToString("X"),
                Name     = _client.CurrentAlias.Name
            })
                               .Skip(query.Offset)
                               .Take(query.Count)
                               .ToListAsync();

            result.TotalResultCount = await iqClients.CountAsync();

            result.Results = queryResults;
            result.RetrievedResultCount = queryResults.Count;

            return(result);
        }
Example #13
0
 public override void FindClient(IRpcController controller, FindClientRequest request, Action <FindClientResponse> done)
 {
     ProtoOutputBuffer.Write(request.GetType(), request.ToString());
 }