public async Task ApiShapeSearch_ValidSearchWithResult_ReturnsOk() { // Arrange var client = _inMemoryHost.GetTestClient(); // Act var payload = new ShapeSearchRequestModel() { SearchBy = "name", Name = "A1" }; var httpContent = new StringContent(JsonSerializer.Serialize(payload), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(Endpoint, httpContent); // Assert Assert.AreEqual(System.Net.HttpStatusCode.OK, response.StatusCode); var responseString = await response.Content.ReadAsStringAsync(); ShapeSearchResultModel responseModel = JsonSerializer.Deserialize <ShapeSearchResultModel>(responseString, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); Assert.AreEqual("A1", responseModel.Name); }
public ShapeSearchResultModel Search(ShapeSearchRequestModel search) { var grid = _gridGenerator.Generate(_appConfig.GridSize); ITriangle result = null; if (search.SearchBy.Equals("name", System.StringComparison.InvariantCultureIgnoreCase)) { result = grid.FindTriangleByName(search.Name); } else if (search.SearchBy.Equals("coordinates", System.StringComparison.InvariantCultureIgnoreCase)) { var searchVertex = new TriangularVertex(new Coordinates(search.Vertex1), new Coordinates(search.Vertex2), new Coordinates(search.Vertex3)); result = grid.FindTriangleByCoordinates(searchVertex); } if (result == null) { return(null); } return(new ShapeSearchResultModel { Name = result.Name, IsBottom = result.IsBottom, Vertex1 = result.Vertices.Vertex1, Vertex2 = result.Vertices.Vertex2, Vertex3 = result.Vertices.Vertex3, ParentCellX = result.ParentCell.Coordinates.X, ParentCellY = result.ParentCell.Coordinates.Y }); }
public IActionResult Search(ShapeSearchRequestModel searchRequestModel) { ShapeSearchResultModel searchResult = _searchService.Search(searchRequestModel); if (searchResult == null) { return(NotFound()); } return(Ok(searchResult)); }
public async Task ApiShapeSearch_ValidSearchNoResult_ReturnsNotFound() { // Arrange var client = _inMemoryHost.GetTestClient(); // Act var payload = new ShapeSearchRequestModel() { SearchBy = "name", Name = "this_does_not_exist" }; var httpContent = new StringContent(JsonSerializer.Serialize(payload), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(Endpoint, httpContent); // Assert Assert.AreEqual(System.Net.HttpStatusCode.NotFound, response.StatusCode); }
public async Task ApiShapeSearch_CoordinateSearchWithMissingCoordinates_ReturnsBadRequest() { // Arrange var client = _inMemoryHost.GetTestClient(); // Act var payload = new ShapeSearchRequestModel() { SearchBy = "coordinates" }; var httpContent = new StringContent(JsonSerializer.Serialize(payload), System.Text.Encoding.UTF8, "application/json"); var response = await client.PostAsync(Endpoint, httpContent); // Assert Assert.AreEqual(System.Net.HttpStatusCode.BadRequest, response.StatusCode); var responseString = await response.Content.ReadAsStringAsync(); StringAssert.Contains("Please specify vertext coordinates.", responseString); }
public void Validate_MissingSearchType_ReturnsError(string searchType) { // Arrange var sut = new ShapeSearchRequestModel() { SearchBy = searchType }; // Act var validationResults = new List <ValidationResult>(); var validationIsSuccess = Validator.TryValidateObject(sut, new ValidationContext(sut), validationResults, true); // Assert Assert.IsFalse(validationIsSuccess); Assert.AreEqual(1, validationResults.Count); var msg = validationResults[0]; Assert.AreEqual("The SearchBy field is required.", msg.ErrorMessage); }