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); }
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 } })); } }
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(); }
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)); }
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(); }
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(); }
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(); }
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(); }
public override void FindClient(IRpcController controller, FindClientRequest request, Action <FindClientResponse> done) { throw new NotImplementedException(); }
public override void FindClient(IRpcController controller, FindClientRequest request, Action<FindClientResponse> done) { ProtoOutputBuffer.Write(request.GetType(), request.ToString()); }
/// <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); }
public override void FindClient(IRpcController controller, FindClientRequest request, Action <FindClientResponse> done) { ProtoOutputBuffer.Write(request.GetType(), request.ToString()); }