public void NotAnswerTheQuestionMoreThanOnceForTheSameUser()
        {
            Guid           userId          = Guid.NewGuid();
            MeetingService service         = CreateService();
            Meeting        meeting         = service.CreateMeeting(facilitatorId);
            Question       currentQuestion = meeting.CurrentQuestion;

            service.JoinTheMeeting(meeting.Id, userId);
            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);


            service.AnswerTheCurrentQuestion(meeting.Id, userId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, userId, Answer.Green, annotation: null);


            Assert.That(currentQuestion.GetCountOfTheAnswer(Answer.Green), Is.EqualTo(1));
        }
        public void DispatchEventWhenAllUsersAnswerTheQuestion()
        {
            Guid           firstUserId  = Guid.NewGuid();
            Guid           secondUserId = Guid.NewGuid();
            MeetingService service      = CreateService();
            Meeting        meeting      = service.CreateMeeting(facilitatorId);

            service.JoinTheMeeting(meeting.Id, firstUserId);
            service.JoinTheMeeting(meeting.Id, secondUserId);
            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);


            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, secondUserId, Answer.Green, annotation: null);


            Assert.True(FakeHandler.MeetingWasNotified(meeting.Id));
        }
        public void DisableAnswersOfTheQuestionWhenAllUsersAnswerIt()
        {
            Guid           firstUserId     = Guid.NewGuid();
            Guid           secondUserId    = Guid.NewGuid();
            MeetingService service         = CreateService();
            Meeting        meeting         = service.CreateMeeting(facilitatorId);
            Question       currentQuestion = meeting.CurrentQuestion;

            service.JoinTheMeeting(meeting.Id, firstUserId);
            service.JoinTheMeeting(meeting.Id, secondUserId);
            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);


            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, secondUserId, Answer.Green, annotation: null);


            Assert.False(currentQuestion.IsUpForAnswer);
        }
        public void NotDefineTheCurrentQuestionWhenAllUsersAnswerTheLastQuestion()
        {
            Guid           firstUserId  = Guid.NewGuid();
            Guid           secondUserId = Guid.NewGuid();
            MeetingService service      = CreateService();
            Meeting        meeting      = service.CreateMeeting(facilitatorId);

            service.JoinTheMeeting(meeting.Id, firstUserId);
            service.JoinTheMeeting(meeting.Id, secondUserId);

            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);
            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, secondUserId, Answer.Green, annotation: null);

            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);
            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, secondUserId, Answer.Green, annotation: null);


            Assert.IsNull(meeting.CurrentQuestion);
        }
        public void ChangeTheCurrentQuestionWhenAllUsersAnswerTheQuestion()
        {
            Guid           firstUserId   = Guid.NewGuid();
            Guid           secondUserId  = Guid.NewGuid();
            MeetingService service       = CreateService();
            Meeting        meeting       = service.CreateMeeting(facilitatorId);
            Question       priorQuestion = meeting.CurrentQuestion;

            service.JoinTheMeeting(meeting.Id, firstUserId);
            service.JoinTheMeeting(meeting.Id, secondUserId);
            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);


            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);
            service.AnswerTheCurrentQuestion(meeting.Id, secondUserId, Answer.Green, annotation: null);


            Assert.That(priorQuestion, Is.Not.EqualTo(meeting.CurrentQuestion));
            Assert.True(meeting.CurrentQuestion.IsTheCurrent);
            Assert.False(priorQuestion.IsTheCurrent);
        }
        public void NotAnswerTheQuestionWhenTheQuestionsIsNotUpForAnswer()
        {
            Guid           firstUserId     = Guid.NewGuid();
            MeetingService service         = CreateService();
            Meeting        meeting         = service.CreateMeeting(facilitatorId);
            Question       currentQuestion = meeting.CurrentQuestion;

            service.JoinTheMeeting(meeting.Id, firstUserId);


            service.AnswerTheCurrentQuestion(meeting.Id, firstUserId, Answer.Green, annotation: null);


            Assert.False(currentQuestion.HasAnyAnswer());
        }
        public void NotAnswerTheQuestionWhenTheUserIsNotInThemeeting()
        {
            Guid           userId          = Guid.NewGuid();
            MeetingService service         = CreateService();
            Meeting        meeting         = service.CreateMeeting(facilitatorId);
            Question       currentQuestion = meeting.CurrentQuestion;

            service.EnableAnswersOfTheCurrentQuestion(meeting.Id, facilitatorId);


            service.AnswerTheCurrentQuestion(meeting.Id, userId, Answer.Red, annotation: null);


            Assert.False(currentQuestion.HasAnyAnswer());
        }