Example #1
0
        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);
        }
Example #3
0
        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);
        }