public async Task Then_The_Postcode_API_Is_Called_With_Query_And_Count( string query, PostcodeData postcode, [Frozen] Mock <IPostcodeApiService> postcodeApiService, PostcodeService postcodeService) { //Arrange postcodeApiService.Setup(x => x.GetPostcodeData(query)) .ReturnsAsync(postcode); //Act var actual = await postcodeService.GetPostcodeByFullPostcode(query); //Assert actual.Should().Be(postcode); }
public async Task Then_The_Postcode_Service_Is_Called( GetPostcodeQuery query, PostcodeData postcode, [Frozen] Mock <IPostcodeService> service, GetPostcodeQueryHandler handler ) { //Arrange service.Setup(x => x.GetPostcodeByFullPostcode(query.Postcode)).ReturnsAsync(postcode); //Act var actual = await handler.Handle(query, CancellationToken.None); //Assert actual.Postcode.Should().Be(postcode); }
public void CheckValidPostcodeData() { string postcode = Postcode.ValidPostcode; Console.WriteLine("Step 1. Get a request data"); RequestData requestData = RequestData.GetRequestData(RequestType.PostcodeData, Postcode.ValidPostcode); Console.WriteLine($"Resource: '{ResourceUrl}/{requestData.Resource}'. Method: '{requestData.Method}'"); Console.WriteLine($"Step 2. Send the request to check that postcode '{postcode}' is valid"); PostcodeData response = ExecuteRequest <PostcodeData>(URL.ResourceUrl, requestData); Console.WriteLine($"Step 3. Check that response Status Code = {(int)ExpectedStatusCode}"); string str = $"Expected: {(int)ExpectedStatusCode}. Actual from response: {response.Status}"; Console.WriteLine(str); if ((int)ExpectedStatusCode != response.Status) { throw new Exception($"Response Status Code is incorrect. " + str); } Console.WriteLine($"Step 4. Check that details of the area are returned"); //Get amount Of Null Or Empty Properties for response.Result int amountOfNullOrEmptyProperties1 = CheckResponseData(response.Result); //Get amount Of Null Or Empty Properties for response.Result.Codes int amountOfNullOrEmptyProperties2 = CheckResponseData(response.Result.Codes); //Verify that amount of Null or Empty field is less than 2 (or other amount allowed) if (amountOfNullOrEmptyProperties1 + amountOfNullOrEmptyProperties2 > 2) { throw new Exception($"{amountOfNullOrEmptyProperties1 + amountOfNullOrEmptyProperties2} fields of response are Empty or Null. " + $"Some details of the area"); } else { Console.WriteLine($"Details of the area are returned in response"); } }
private void SortGeographicalGroups(List <PostcodeData> postcodeData, int gridSquareSize) { //Get Grid Size X & Y postcodeData = postcodeData.OrderBy(grid => grid.eastings).ToList(); int maxX = postcodeData[postcodeData.Count - 1].eastings; postcodeData = postcodeData.OrderBy(grid => grid.northings).ToList(); int maxY = postcodeData[postcodeData.Count - 1].northings; //Break Grid into Columns and Rows Based on Grouping Distance int numOfColumns = (maxX / gridSquareSize) + 1; int numOfRows = (maxY / gridSquareSize) + 1; List <PostcodeData>[,] gridCount = new List <PostcodeData> [numOfColumns, numOfRows]; //Cycle through the postcodes and calculates in which grid square each postcode would be placed and adds them to a 2d array containing lists of postcodes in that square area for (int locationIndex = 0; locationIndex < postcodeData.Count; locationIndex++) { PostcodeData result = postcodeData[locationIndex]; int column = result.eastings / gridSquareSize; int row = result.northings / gridSquareSize; List <PostcodeData> entries = gridCount[column, row]; if (entries == null) { entries = new List <PostcodeData>(); } entries.Add(result); gridCount[column, row] = entries; } List <List <PostcodeData> > sortedPostCodes = new List <List <PostcodeData> >(); //Adds groupings of postcodes to a new master list for (int x = 0; x < numOfColumns; x++) { for (int y = 0; y < numOfRows; y++) { List <PostcodeData> ls = gridCount[x, y]; if (ls != null) { if (ls.Count > 1) { sortedPostCodes.Add(ls); } } } } //Sort the master list by number of postcodes within that area sortedPostCodes = sortedPostCodes.OrderByDescending(ls => ls.Count).ToList(); //Grabs the id associated with the postcode from contact info table so it can then be cross referenced with the ID from the people table //Assumption being made here is that postcodes are unique List <List <int> > postCodeIDs = new List <List <int> >(); for (int i = 0; i < sortedPostCodes.Count; i++) { postCodeIDs.Add(new List <int>()); for (int j = 0; j < sortedPostCodes[i].Count; j++) { SQLiteDataReader reader = m_database.GetDataFromTable("ID", "contactInfo", "postal = @postcode", "postcode", sortedPostCodes[i][j].postcode, false); while (reader.Read()) { long ID = (long)reader["ID"]; postCodeIDs[i].Add((int)ID); } } } //Create worksheet string[] columnNames = new string[] { "First Name", "Last Name", "Post Code" }; m_reportHandler.CreateNewWorkSheet("Geographical Groupings", columnNames); int excelCellRow = 0; //Grabs the details from the people table to put into the report alongside the associated postcodes for (int i = 0; i < postCodeIDs.Count; i++) { for (int j = 0; j < postCodeIDs[i].Count; j++) { SQLiteCommand cmd = new SQLiteCommand(); cmd.Connection = m_dbConnection; cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "Select first_name, last_name FROM people WHERE ID = @ID"; cmd.Parameters.AddWithValue("@ID", postCodeIDs[i][j]); using (SQLiteDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { string firstName = RemoveQuotesFromString(reader["first_name"].ToString()); string secondName = RemoveQuotesFromString(reader["last_name"].ToString()); string postCode = sortedPostCodes[i][j].postcode; m_reportHandler.WriteToCell(excelCellRow + 1, 0, firstName, "Geographical Groupings"); m_reportHandler.WriteToCell(excelCellRow + 1, 1, secondName, "Geographical Groupings"); m_reportHandler.WriteToCell(excelCellRow + 1, 2, postCode, "Geographical Groupings"); } } excelCellRow++; } excelCellRow++; } }