コード例 #1
0
        public void Question_CannotBeAnsweredBySameUserMoreThanOnce_Throws()
        {
            // Arrange
            var target       = new QuestionBuilder().SetupValidQuestion().Build();
            var firstAnswer  = new AnswerBuilder().SetupValidAnswer(target, new Guid("00000000-0000-0000-0000-000000000001")).Build();
            var secondAnswer = new AnswerBuilder().SetupValidAnswer(target, new Guid("00000000-0000-0000-0000-000000000001")).Build();

            target.Answer(firstAnswer);

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.Answer(secondAnswer));
        }
コード例 #2
0
        public void Question_MoreThanOneAcceptedAnswer_Throws()
        {
            // Arrange
            var target       = new QuestionBuilder().SetupValidQuestion().Build();
            var firstAnswer  = new AnswerBuilder().SetupValidAnswer(target).Build();
            var secondAnswer = new AnswerBuilder().SetupAnotherValidAnswer(target).Build();

            target.Answer(firstAnswer);
            target.Answer(secondAnswer);
            target.AcceptAnswer(firstAnswer);

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.AcceptAnswer(secondAnswer));
        }
コード例 #3
0
        public void Question_CanBeAnsweredBySameUserOnlyOnce_Sucessfully()
        {
            // Arrange
            var target       = new QuestionBuilder().SetupValidQuestion().Build();
            var firstAnswer  = new AnswerBuilder().SetupValidAnswer(target).Build();
            var secondAnswer = new AnswerBuilder().SetupAnotherValidAnswer(target).Build();

            // Act
            target.Answer(firstAnswer);
            target.Answer(secondAnswer);

            // Assert
            Assert.Equal(2, target.Answers.Count());
            Assert.Contains(firstAnswer, target.Answers);
            Assert.Contains(secondAnswer, target.Answers);
        }
コード例 #4
0
        public void Question_NonExistingAnswerCannotBeAccepted_Throws()
        {
            // Arrange
            var limits       = new LimitsBuilder().Build();
            var target       = new QuestionBuilder().SetupValidQuestion().Build();
            var firstAnswer  = new AnswerBuilder().SetupValidAnswer(target).Build();
            var secondAnswer = new AnswerBuilder().SetupAnotherValidAnswer(target).Build();

            target.Answer(firstAnswer);

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.AcceptAnswer(secondAnswer));
        }
コード例 #5
0
        public void Question_OnAnswered_SetHasAcceptedAnswer()
        {
            // Arrange
            var target = new QuestionBuilder().SetupValidQuestion().Build();
            var answer = new AnswerBuilder().SetupValidAnswer(target).Build();

            target.Answer(answer);

            // Act
            target.AcceptAnswer(answer);

            // Assert
            Assert.True(target.HasAcceptedAnswer);
        }
コード例 #6
0
        public void Question_UndoAcceptedAnswerOutsideDeadline_Throws()
        {
            // Arrange
            var limits = new LimitsBuilder().Build();
            var target = new QuestionBuilder().SetupValidQuestion().Build();
            var answer = new AnswerBuilder().SetupValidAnswer(target).Build();

            target.Answer(answer);
            target.AcceptAnswer(answer);
            // 1 minute past deadline
            answer.SetProperty(
                nameof(answer.AcceptedOn),
                DateTime.UtcNow.AddMinutes(-1 - limits.AcceptAnswerDeadline.Minutes));

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.UndoAcceptAnswer(answer, limits));
        }
コード例 #7
0
        public void Question_UndoAcceptedAnswerWithinDeadline_Successfully()
        {
            // Arrange
            var limits = new LimitsBuilder().Build();
            var target = new QuestionBuilder().SetupValidQuestion().Build();
            var answer = new AnswerBuilder().SetupValidAnswer(target).Build();

            target.Answer(answer);
            target.AcceptAnswer(answer);

            // Act
            target.UndoAcceptAnswer(answer, limits);

            // Assert
            Assert.False(target.HasAcceptedAnswer);
            Assert.False(answer.IsAcceptedAnswer);
            Assert.Null(answer.AcceptedOn);
        }