/// <summary>
        /// Creates a new competition entrant.
        /// </summary>
        /// <param name="item">
        /// The item.
        /// </param>
        /// <returns>
        /// The <see cref="HttpResponseMessage"/>.
        /// </returns>
        /// <remarks>
        /// POST competitions/enter
        /// </remarks>
        public HttpResponseMessage Post(PostEnterCompetition item)
        {
            var entrant = _mapper.Map<PostEnterCompetition, Entrant>(item);

            if (entrant.IsValid)
            {
                var competition = _competitionDataMapper.FindByCompetitionKey(item.CompetitionKey);
                competition.AddEntrant(entrant);
                _competitionDataMapper.Update(competition);

                return Request.CreateResponse(HttpStatusCode.Created, item);
            }

            return Request.CreateResponse(HttpStatusCode.BadRequest, entrant.ValidationErrors);
        }
        public void Enter_Competition_Returns_OK_Status()
        {
            // #1 Create Competition
            var competition = new PostCompetition()
                {
                    Answers = new[] { "Man Utd", "Man City", "Chelsea", "Arsenal" }, 
                    ClosingDate = DateTime.Now.AddMonths(1), 
                    CompetitionKey = RandomGenerator.GetRandomString(10), 
                    CorrectAnswerKey = 1, 
                    Question = "Who won the 2012 Premier League?"
                };

            Assert.AreEqual(
                HttpStatusCode.Created, 
                Client.PostAsJsonAsync(Resources.Competitions, competition).Result.StatusCode, 
                "POSTCompetition not OK.");

            // #2 Enter Competition
            var enterCompetition = new PostEnterCompetition()
                {
                    CompetitionKey = competition.CompetitionKey, 
                    ContactType = "Sms", 
                    Answer = "A", 
                    Contact = "00000111222", 
                    Source = "Sms"
                };

            Assert.AreEqual(
                HttpStatusCode.Created, 
                Client.PostAsJsonAsync(Resources.EnterCompetition, enterCompetition).Result.StatusCode, 
                "POST EnterCompetition not OK.");

            // #3 Close Competition
            var response = Client.PutAsJsonAsync(string.Format("{0}/{1}", Resources.CloseCompetition, competition.CompetitionKey.ToLower()), new { }).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "PUT CloseCompetition not OK.");
        }