using System; using System.Net.Http; using System.Threading.Tasks; using System.Linq; using Xunit; using SuccessfulCodeTools.LowLevelHttpClient; using Newtonsoft.Json; namespace BritishHorseRacingApi.Tests { public class ApiClientTests { public static string _cookie = "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utmc=36595059; bha-ie-test=true; D_ZID=3F37C446-48FB-3F85-B8D2-66FC90A17473; D_ZUID=27B27203-7708-3F5E-8C01-86A8BF3A21DD; D_HID=BC00CAA4-06EE-39E0-8579-A00DCFA20171; catAccCookies=1; __utma=36595059.34208775.1583064856.1586764803.1586767732.29; bha_token=%7B%22token%22%3A%22MDI2ZDNjOWQ1YzlkNjg3NzY0NThhMzgwNTlmOTAyMGE%3D%22%2C%22timestamp%22%3A1586771830669%7D; __utmt=1; __utmb=36595059.21.10.1586767732"; [Fact] public async Task GetToken() { //Arrange var client = new ApiClient(); //Act var token = await client.GetNewToken(); //Assert Assert.False(String.IsNullOrWhiteSpace(token)); } private const string _userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"; [Fact] public async Task Test() { //Arrange var client = new CustomHttpClient(13718); var message = new CustomHttpRequestMessage(HttpMethod.Get, "http://www.britishhorseracing.com/feeds/v1/token/request"); message.Headers.Add("Accept", "application/json, text/plain, */*"); message.Headers.Add("User-Agent", _userAgent); message.Headers.Add("Host", "www.britishhorseracing.com"); message.Headers.Add("Connection", "close"); message.Headers.Add("accept-encoding", "gzip, deflate"); var result = await client.SendAsync(message); Assert.NotNull(result); } [Fact] public async Task GetRaceResult() { //Arrange var client = new ApiClient(); var token = await client.GetNewToken(); //Act var result = await client.GetRaceResults(2018, 42638, 0); //Assert Assert.Equal(6, result.Total); Assert.Equal(6, result.Data.Length); Assert.Equal(42638, result.Data[0].RaceId); } [Fact] public async Task GetFixtures() { //Arrange var client = new ApiClient(); var token = await client.GetNewToken(); //Act var result = await client.GetFixtures(2019, 2); //Assert Assert.Equal(111, result.Total); Assert.Equal(10, result.Data.Length); Assert.Equal(18142, result.Data[0].FixtureId); } [Fact] public async Task GetAllFixturesForDay() { //Arrange var client = new ApiClient(); var token = await client.GetNewToken(); //Act var results = await client.GetAllFixturesForDay(2019, 2, 28); //Assert Assert.True(results.All(e => e.FixtureDate.Day == 28)); } [Fact] public async Task GetAllRacesForDay() { var client = new ApiClient(); var token = await client.GetNewToken(); var results = await client.GetAllRacesForDay(2019, 2, 28); Assert.True(results.Count > 0); } [Theory] [InlineData(2020, 31967, 0, 4)] [InlineData(2019, 16974, 0, 18)] public async Task GetRaceRunners(int year, int raceId, int divisionSequence, int expectedRunnerCount) { var client = new ApiClient(cookie: _cookie); var token = await client.GetNewToken(); var results = await client.GetRaceRunners(year, raceId, divisionSequence); Assert.Equal(expectedRunnerCount, results.Data.Length); } [Fact] public async Task GetAllRaceResultsForDay() { var client = new ApiClient(); var token = await client.GetNewToken(); var results = await client.GetAllRaceResultsForDay(2020, 2, 23); Assert.True(results.Count > 0); } [Fact] public async Task GetRaces() { //Arrange var client = new ApiClient(); var token = await client.GetNewToken(); //Act var result = await client.GetRaces(2019, 18188); //Arrange Assert.Equal(6, result.Total); Assert.Equal(6, result.Data.Length); Assert.Equal(46136, result.Data[0].RaceId); } [Fact] public async Task GetRaceCourse() { //Arrange var client = new ApiClient(); var token = await client.GetNewToken(); //Act var result = await client.GetRacecourse(18); //Arrange Assert.Equal(18, result.CourseId); } } }