public async Task <RaceResultDTO> GetResultByIdAsync(int id) { RaceResultDTO result = new RaceResultDTO(); var race = await this._raceRepository.GetSingleAsync(this._raceQuery.ById(id)); var raceType = await this._raceTypeRepository.GetSingleAsync(this._raceTypeQuery.ById(race.RaceTypeId)); var results = await this._driverResultRepository.ListAsync(this._driverResultQuery.ByRace(id)); var winner = results.First(); //TODO - não há critério de desempate. Como proceder ? var bestLap = results.OrderBy(x => x.BestLap).ThenBy(x => x.Position).Select(x => new BestLapDTO() { Driver = $"{x.DriverNumber} - {x.DriverName}", Time = x.BestLap }).First(); result.RaceId = race.Id; result.RaceDescription = race.Description; result.TotalLaps = race.TotalLaps; result.RaceDate = race.Date; result.UploadDate = race.UploadDate; result.Uploader = race.Uploader.Login; result.Winner = $"{winner.DriverNumber} - {winner.DriverName}"; result.BestLap = bestLap; result.Results = results.Map <DriverResult, DriverResultDTO>(this._mapper); result.RaceTypeDescription = raceType.Name; return(result); }
public async Task Testar_GetResultById() { //Arrange. int raceId = 1; RaceResultDTO raceResultMock = new RaceResultDTO() { BestLap = new BestLapDTO() { Driver = "10 - Test Driver", Time = TimeSpan.FromSeconds(60) }, RaceDate = DateTime.Now.AddDays(-1), RaceDescription = "TestRace", RaceId = raceId, TotalLaps = 10, UploadDate = DateTime.Now.Date, Uploader = "yagohf", Winner = "10 - Test Driver", Results = new List <DriverResultDTO>() { new DriverResultDTO() { AverageSpeed = 40, BestLap = TimeSpan.FromSeconds(60), DriverName = "Test Driver", DriverNumber = 10, Gap = null, Laps = 10, Position = 1, TotalRaceTime = TimeSpan.FromMinutes(15) }, new DriverResultDTO() { AverageSpeed = 38, BestLap = TimeSpan.FromSeconds(70), DriverName = "Test Driver 2", DriverNumber = 15, Gap = TimeSpan.FromSeconds(60), Laps = 10, Position = 2, TotalRaceTime = TimeSpan.FromMinutes(16) } } }; this._raceServiceMock .Setup(srv => srv.GetResultByIdAsync(raceId)) .Returns(Task.FromResult(raceResultMock)); //Act. var result = await this._racesController.GetResultById(raceId); var okResult = result as OkObjectResult; //Assert. Assert.IsNotNull(okResult); Assert.IsInstanceOfType(okResult.Value, typeof(RaceResultDTO)); Assert.AreEqual(raceResultMock, okResult.Value as RaceResultDTO); }
public async Task <IActionResult> Post([FromForm] CreateRaceDTO model, [FromForm] IFormFile file) { FileDTO fileDTO = new FileDTO(); if (file != null && file.Length > 0) { fileDTO.Extension = file.FileName.Split('.').Last(); fileDTO.ContentType = file.ContentType; fileDTO.Content = new MemoryStream(); await file.CopyToAsync(fileDTO.Content); } RaceResultDTO raceResult = await this._raceService.AnalyseAsync(model, fileDTO, this.GetLoggedUser()); return(CreatedAtAction(nameof(GetResultById), new { id = raceResult.RaceId }, raceResult)); }
public async Task Test_Post() { //Arrange. CreateRaceDTO createRaceMock = new CreateRaceDTO() { Date = DateTime.Now.AddDays(-1), Description = "2019 F-1 Racing", RaceTypeId = 1, TotalLaps = 10 }; //Arrange. int raceId = 1; RaceResultDTO raceResultMock = new RaceResultDTO() { BestLap = new BestLapDTO() { Driver = "10 - Test Driver", Time = TimeSpan.FromSeconds(60) }, RaceDate = DateTime.Now.AddDays(-1), RaceDescription = "2019 F-1 Racing", RaceId = raceId, TotalLaps = 10, UploadDate = DateTime.Now.Date, Uploader = "yagohf", Winner = "10 - Test Driver", Results = new List <DriverResultDTO>() { new DriverResultDTO() { AverageSpeed = 40, BestLap = TimeSpan.FromSeconds(60), DriverName = "Test Driver", DriverNumber = 10, Gap = null, Laps = 10, Position = 1, TotalRaceTime = TimeSpan.FromMinutes(15) }, new DriverResultDTO() { AverageSpeed = 38, BestLap = TimeSpan.FromSeconds(70), DriverName = "Test Driver 2", DriverNumber = 15, Gap = TimeSpan.FromSeconds(60), Laps = 10, Position = 2, TotalRaceTime = TimeSpan.FromMinutes(16) } } }; //Mockar arquivo. Mock <IFormFile> fileMock = new Mock <IFormFile>(); string fileName = "NO-ERRORS.txt"; string fileAssemblyPath = $"Yagohf.Gympass.RaceAnalyser.UnitTests.Embedded.{fileName}"; using (var fileAssemblyStream = Assembly.GetAssembly(typeof(RacesControllerTests)).GetManifestResourceStream(fileAssemblyPath)) { fileAssemblyStream.Position = 0; fileMock.Setup(x => x.OpenReadStream()).Returns(fileAssemblyStream); fileMock.Setup(x => x.FileName).Returns(fileName); fileMock.Setup(x => x.Length).Returns(fileAssemblyStream.Length); fileMock.Setup(x => x.ContentType).Returns("text/plain"); } //Mockar usuário logado. var claims = new List <Claim>() { new Claim(ClaimTypes.Name, "yagohf"), }; var identity = new ClaimsIdentity(claims); var claimsPrincipal = new ClaimsPrincipal(identity); var principalMock = new Mock <IPrincipal>(); principalMock.Setup(x => x.Identity).Returns(identity); var mockHttpContext = new Mock <HttpContext>(); mockHttpContext.Setup(m => m.User).Returns(claimsPrincipal); this._racesController.ControllerContext.HttpContext = mockHttpContext.Object; this._raceServiceMock .Setup(srv => srv.AnalyseAsync(It.IsAny <CreateRaceDTO>(), It.IsAny <FileDTO>(), It.IsAny <string>())) .Returns(Task.FromResult(raceResultMock)); //Act. var result = await this._racesController.Post(createRaceMock, fileMock.Object); var createdAtResult = result as CreatedAtActionResult; //Assert. Assert.IsNotNull(createdAtResult); Assert.IsInstanceOfType(createdAtResult.Value, typeof(RaceResultDTO)); Assert.AreEqual(raceResultMock, createdAtResult.Value as RaceResultDTO); //Testar URL de redirecionamento. Assert.AreEqual(createdAtResult.ActionName, nameof(this._racesController.GetResultById)); Assert.AreEqual(createdAtResult.RouteValues["id"], raceResultMock.RaceId); }