public void ParseXML_shouldReturnCurrentWeatherObjectIfInputInvalid() { // Arrange string inputXML = "THIS IS SOME INVALID TEXT"; // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); // Assert Assert.Throws <System.Xml.XmlException>(() => parser.ParseXML(inputXML)); }
public async Task <CurrentWeather> Get(string locationcode) { if (validateLocationCode(locationcode)) { return(EnvCanadaCurrentWeatherParser.ParseXML(await _httpClient.GetStringAsync($"https://weather.gc.ca/rss/city/{locationcode}_e.xml"))); } else { return(new CurrentWeather()); } }
public void ParseXML_shouldReturnCurrentWeatherObjectIfXMLFormattedDifferently() { // Arrange string inputXML = "<root><child></child><child attribute=\"value\"/></root>"; // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); // Assert Assert.Throws <UnexpectedXMLFormatException>(() => parser.ParseXML(inputXML)); }
public void ParseXML_shouldReturnCurrentWeatherObjectIfOnlyBareRootElement() { // Arrange string inputXML = "<root></root>"; // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); // Assert Assert.Throws <UnexpectedXMLFormatException>(() => parser.ParseXML(inputXML)); }
public void ParseXML_shouldReturnCurrentWeatherObjectIfInputNull() { // Arrange string inputXML = null; // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); // Assert Assert.Throws <UnexpectedXMLFormatException>(() => parser.ParseXML(inputXML)); }
public void ParseXML_shouldNotReturnCurrentWeatherObjectIfXMLDifferent(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); // Assert Assert.Throws <UnexpectedXMLFormatException>(() => parser.ParseXML(inputXML)); }
public void ParseXML_shouldReturnCurrentWeatherObjectWithTestXMLFile(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); var result = parser.ParseXML(inputXML); // Assert Assert.IsType <CurrentWeather>(result); }
public void ParseXML_ShouldReturnAValidSourceURL(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); CurrentWeather result = parser.ParseXML(inputXML); // Assert Assert.True(!string.IsNullOrEmpty(result.SourceURL)); }
public void ParseXML_ShouldReturnAValidLocationID(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); CurrentWeather result = parser.ParseXML(inputXML); // Assert Assert.True(EnvCanadaLocationValidator.validateLocationCode(result.LocationId)); }
public void ParseXML_ParseXMLShouldParseFrenchFilesSuccessfully(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); CurrentWeather result = parser.ParseXML(inputXML); // Assert Assert.NotNull(result); }
public void ParseXML_ReturnedObjectShouldNotContainHTTPInLocationID(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); CurrentWeather result = parser.ParseXML(inputXML); // Assert Assert.DoesNotContain("http://", result.LocationId); }
public void ParseXML_ShouldReturnAValidLastUpdatedTime(string filename) { // Arrange StreamReader reader = new StreamReader("./TestXMLFiles/" + filename); string inputXML = reader.ReadToEnd(); // Act EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); CurrentWeather result = parser.ParseXML(inputXML); // Assert Assert.True(result.LastUpdated != new DateTime()); Assert.True(result.LastUpdated > DateTime.MinValue); Assert.True(result.LastUpdated < DateTime.MaxValue); }
static void Main(string[] args) { List <string> validLocations = new List <string>(); string timestamp = DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + "-" + DateTime.Now.Hour + "-" + DateTime.Now.Minute + "-" + DateTime.Now.Second; List <string> _validLocationPrefixes = new List <string>() { "AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT" }; Random random = new Random(DateTime.Now.Millisecond); EnvCanadaCurrentWeatherParser parser = new EnvCanadaCurrentWeatherParser(); List <CurrentWeather> results = new List <CurrentWeather>(); using (HttpClient _httpClient = new HttpClient()) { foreach (string provinceCode in _validLocationPrefixes) { for (int x = 00; x <= 200; x++) { string locationCode = provinceCode.ToLower() + "-" + x.ToString(); string url = "https://weather.gc.ca/rss/city/" + locationCode + "_e.xml"; Console.Write(url + ": "); try { string rawXML = getXMLFeed(url, _httpClient).Result; CurrentWeather thisWeather = parser.ParseXML(rawXML); if (thisWeather != null) { try { if (!Directory.Exists(timestamp)) { Directory.CreateDirectory(timestamp); } StreamWriter rawXMLStreamWriter = new StreamWriter(timestamp + "/" + locationCode + ".xml"); rawXMLStreamWriter.Write(rawXML); rawXMLStreamWriter.Flush(); } catch (Exception ex) { Console.WriteLine("ERROR WRITING XML FILE: " + ex.Message); } Console.WriteLine(" [SUCCESS]"); results.Add(thisWeather); validLocations.Add(locationCode); } } catch { Console.WriteLine(" [FAIL]"); } // Wait so we don't overwhelm the server System.Threading.Thread.Sleep(random.Next(100, 500)); } } } results.Add(new CurrentWeather() { LocationId = "TEST" }); string filename = "output-" + timestamp + ".csv"; Console.WriteLine("Successes: " + results.Count); Console.WriteLine("Writing file"); StreamWriter csvStreamWriter = new StreamWriter(filename); csvStreamWriter.WriteLine("\"locationID\",\"locationName\",\"lastupdated\",\"tempC\",\"tempF\",\"tempK\",\"Conditions\",\"Pressure\",\"Humidity\",\"DewPointC\",\"DewPointF\",\"Wind\",\"AirQualityIndex\",\"ObservedAt\",\"SourceURL\",\"WindChillC\",\"WindChillF\""); foreach (CurrentWeather weather in results) { csvStreamWriter.WriteLine(toCSVLine(weather)); } csvStreamWriter.Flush(); StreamWriter validLocationStreamWriter = new StreamWriter("valid_location_codes-" + timestamp + ".txt"); foreach (string loc in validLocations) { validLocationStreamWriter.WriteLine(loc); } validLocationStreamWriter.Flush(); }