public async Task GetById_WithCorrectId_ShouldReturnCrew()
        {
            var authService = new Mock <IAuthorizationHelper>();

            using (var context = provider.GetService <TimingSiteContext>())
                using (var controller = new HeadRaceTimingSite.Api.Controllers.CrewController(authService.Object, mapper, context))
                {
                    Competition competition = new Competition();
                    Crew        dbCrew      = new Crew
                    {
                        BroeCrewId  = 1,
                        Competition = competition
                    };
                    competition.Crews.Add(dbCrew);
                    competition.TimingPoints.Add(new TimingPoint());
                    context.Competitions.Add(competition);
                    context.SaveChanges();
                    var result = await controller.GetById(1).ConfigureAwait(false);

                    var okResult = result as OkObjectResult;

                    Assert.IsNotNull(okResult, "Should be Ok Object");
                    Assert.AreEqual(200, okResult.StatusCode);
                    HeadRaceTimingSite.Api.Resources.Crew crew = okResult.Value as HeadRaceTimingSite.Api.Resources.Crew;
                    Assert.IsNotNull(crew, "Should be Crew");
                    Assert.AreEqual(1, crew.Id);
                }
        }
        public async Task Put_WithExistingCrew_ShouldUpdateCrew()
        {
            var authService = new Mock <IAuthorizationHelper>();

            authService.Setup(x => x.AuthorizeAsync(It.IsAny <ClaimsPrincipal>(), It.IsAny <object>(), It.IsAny <string>()))
            .ReturnsAsync(AuthorizationResult.Success());

            using (var context = provider.GetService <TimingSiteContext>())
                using (var controller = new HeadRaceTimingSite.Api.Controllers.CrewController(authService.Object, mapper, context))
                {
                    Competition competition = new Competition {
                        CompetitionId = 1
                    };
                    context.Competitions.Add(competition);
                    Crew dbCrew = new Crew
                    {
                        BroeCrewId    = 123456,
                        BoatClass     = BoatClass.SingleScull,
                        ClubCode      = "ABC",
                        IsTimeOnly    = false,
                        Name          = "Another BC",
                        StartNumber   = 5,
                        Status        = Crew.ResultStatus.Dsq,
                        CompetitionId = competition.CompetitionId,
                        Competition   = competition
                    };
                    competition.Crews.Add(dbCrew);
                    context.SaveChanges();

                    HeadRaceTimingSite.Api.Resources.Crew crew = new HeadRaceTimingSite.Api.Resources.Crew
                    {
                        Id            = 123456,
                        BoatClass     = BoatClass.Eight,
                        ClubCode      = "LDR",
                        IsTimeOnly    = true,
                        Name          = "Leander A",
                        StartNumber   = 1,
                        Status        = Crew.ResultStatus.Dns,
                        CompetitionId = competition.CompetitionId
                    };

                    var result = await controller.Put(1, 123456, crew).ConfigureAwait(false);

                    var noContentResult = result as NoContentResult;
                    Assert.IsNotNull(noContentResult, "Should be No Content");
                    Assert.AreEqual(204, noContentResult.StatusCode);
                    Assert.AreEqual(1, competition.Crews.Count, "Should be one crew");
                    Assert.AreEqual(123456, competition.Crews[0].BroeCrewId);
                    Assert.AreEqual(BoatClass.Eight, competition.Crews[0].BoatClass);
                    Assert.AreEqual("LDR", competition.Crews[0].ClubCode);
                    Assert.AreEqual(true, competition.Crews[0].IsTimeOnly);
                    Assert.AreEqual("Leander A", competition.Crews[0].Name);
                    Assert.AreEqual(1, competition.Crews[0].StartNumber);
                    Assert.AreEqual(Crew.ResultStatus.Dns, competition.Crews[0].Status);
                }
        }