Esempio n. 1
0
        public void Question_CanBeCreated_Successfully()
        {
            // Arrange
            var    user        = new UserBuilder().BuildValidUser().Build();
            int    tagCount    = 3;
            string title       = "TitleNormal";
            string body        = "BodyNormal";
            var    tags        = new TagBuilder().Build(tagCount);
            var    limits      = new LimitsBuilder().Build();
            var    voteable    = new Voteable();
            var    commentable = new Commentable();

            // Act
            var result = Question.Create(user, title, body, tags, limits);

            // Assert
            Assert.NotEqual(default(Guid), result.Id);
            Assert.Equal(user, result.User);
            Assert.Equal(title, result.Title);
            Assert.Equal(body, result.Body);
            Assert.False(result.HasAcceptedAnswer);
            Assert.True(DateTime.UtcNow - result.CreatedOn < TimeSpan.FromSeconds(1));
            Assert.Empty(result.Answers);
            Assert.Empty(result.Comments);
            Assert.Equal(3, result.QuestionTags.Count());
        }
Esempio n. 2
0
        public void Comment_EditingWithValidDataWithinDeadline_Successfully()
        {
            // Arrange
            var target                 = new CommentBuilder().SetupValidComment().Build();
            var originalId             = target.Id;
            var originalUserId         = target.UserId;
            var originalCreatedOn      = target.CreatedOn;
            var originalParentQuestion = target.ParentQuestion;
            var originalParentAnswer   = target.ParentAnswer;

            var userId  = new Guid("00000000-0000-0000-0000-000000000002");
            var newBody = "NewBodyNormal";
            var limits  = new LimitsBuilder().Build();

            // Act
            target.Edit(target.User, newBody, limits);

            // Assert
            Assert.Equal(originalId, target.Id);
            Assert.Equal(originalUserId, target.UserId);
            Assert.Equal(originalCreatedOn, target.CreatedOn);
            Assert.Equal(originalParentQuestion, target.ParentQuestion);
            Assert.Equal(originalParentAnswer, target.ParentAnswer);
            Assert.Equal(newBody, target.Body);
        }
Esempio n. 3
0
        public void User_CanCreateWithValidData_Successfully(string websiteUrl, string aboutMe)
        {
            // Arrange
            string username = "******";
            string email    = "normal.user.name@some_email.com";
            var    limits   = new LimitsBuilder().Build();

            // Act
            var result = User.Create(limits, Guid.NewGuid(), username, email, websiteUrl, aboutMe);

            // Assert
            var resultWebsiteUrl = result.WebsiteUrl?.ToString();

            Assert.NotNull(result);
            Assert.NotEqual(result.Id, default(Guid));
            Assert.Equal(result.Username, username);
            Assert.Equal(result.Email, email);
            Assert.Equal(resultWebsiteUrl, string.IsNullOrWhiteSpace(websiteUrl) ? null : websiteUrl);
            Assert.Equal(result.AboutMe, aboutMe);
            Assert.True(DateTime.UtcNow - result.CreatedOn < TimeSpan.FromSeconds(1));
            Assert.True(DateTime.UtcNow - result.LastSeen < TimeSpan.FromSeconds(1));
            Assert.Empty(result.Questions);
            Assert.Empty(result.Answers);
            Assert.Empty(result.Comments);
        }
Esempio n. 4
0
        public void Question_EditingWithValidDataWithinDeadline_Successfully()
        {
            // Arrange - Build Question
            var target = new QuestionBuilder().SetupValidQuestion().Build();

            // Arrange - Edit Data
            string editedTitle    = "TitleNormal";
            string editedBody     = "BodyNormal";
            int    editedTagCount = 5;
            var    limits         = new LimitsBuilder().Build();
            var    editedTags     = new TagBuilder().Build(editedTagCount);

            // Act
            target.Edit(target.User, editedTitle, editedBody, editedTags, limits);
            var result = target;

            // Assert
            Assert.NotEqual(default(Guid), result.Id);
            Assert.Equal(editedTitle, result.Title);
            Assert.Equal(editedBody, result.Body);
            Assert.False(result.HasAcceptedAnswer);
            Assert.Empty(result.Answers);
            Assert.Empty(result.Comments);
            Assert.Equal(5, result.QuestionTags.Count());
        }
Esempio n. 5
0
        public void User_CreatingWithInvalidData_Throws(string username, string email, string websiteUrl, string aboutMe)
        {
            // Arrange
            var limits = new LimitsBuilder().Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() => User.Create(limits, Guid.NewGuid(), username, email, websiteUrl, aboutMe));
        }
Esempio n. 6
0
        public void User_EditingWithInvalidData_Throws(string websiteUrl, string aboutMe)
        {
            // Arrange
            var limits = new LimitsBuilder().Build();
            var target = new UserBuilder().BuildValidUser().Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.Edit(websiteUrl, aboutMe, limits));
        }
Esempio n. 7
0
        public void Comment_CreatingWithInvalidData_FailsValidation(string userId, int orderNumber, string body)
        {
            // Arrange
            var limits   = new LimitsBuilder().Build();
            var voteable = new Voteable();
            var user     = new UserBuilder().BuildUser(new Guid(userId)).Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() => Comment.Create(user, body, orderNumber, limits));
        }
Esempio n. 8
0
        public void Comment_EditingWithInvalidData_FailsValidation(string userId, string body)
        {
            // Arrange
            var target = new CommentBuilder().SetupValidComment().Build();
            var limits = new LimitsBuilder().Build();
            var user   = new UserBuilder().BuildUser(new Guid(userId)).Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              target.Edit(user, body, limits));
        }
Esempio n. 9
0
        public void Answer_EditingWithInvalidData_FailsValidation(string userId, string body)
        {
            // Arrange - Build Answer
            var question = new QuestionBuilder().SetupValidQuestion().Build();
            var target   = new AnswerBuilder().SetupValidAnswer(question).Build();
            var limits   = new LimitsBuilder().Build();
            var user     = new UserBuilder().BuildUser(new Guid(userId)).Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              target.Edit(user, body, limits));
        }
Esempio n. 10
0
        public void Question_CreatingWithInvalidData_FailsValidation(string userId, int tagCount, string title, string body)
        {
            // Arrange
            var user        = new UserBuilder().BuildUser(new Guid(userId)).Build();
            var tags        = new TagBuilder().Build(tagCount);
            var limits      = new LimitsBuilder().Build();
            var voteable    = new Voteable();
            var commentable = new Commentable();

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              Question.Create(user, title, body, tags, limits));
        }
Esempio n. 11
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));
        }
Esempio n. 12
0
        public void Voteable_CannotRevokeNonExistingVote_Throws()
        {
            // Arrange
            var target     = new QuestionBuilder().SetupValidQuestion().Build();
            var limits     = new LimitsBuilder().Build();
            var firstVote  = new VoteBuilder(target).SetupValidUpvote().ByOneUser().Build();
            var secondVote = new VoteBuilder(target).SetupValidUpvote().ByAnotherUser().Build();

            target.ApplyVote(firstVote);

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.RevokeVote(secondVote, limits));
        }
Esempio n. 13
0
        public void Answer_CreatingWithInvalidData_FailsValidation(string userId, string body)
        {
            // Arrange
            var question    = new QuestionBuilder().SetupValidQuestion().Build();
            var limits      = new LimitsBuilder().Build();
            var voteable    = new Voteable();
            var commentable = new Commentable();
            var user        = new UserBuilder().BuildUser(new Guid(userId)).Build();

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              Answer.Create(user, body, question, limits));
        }
Esempio n. 14
0
        public void Question_EditingWithInvalidData_FailsValidation(string userId, int tagCount, string title, string body)
        {
            // Arrange - Build Question
            var user   = new UserBuilder().BuildUser(new Guid(userId)).Build();
            var target = new QuestionBuilder().SetupValidQuestion().Build();
            var limits = new LimitsBuilder().Build();

            // Arrange - Edit Data
            var editedTags = new TagBuilder().Build(tagCount);

            // Act
            Assert.Throws <BusinessException>(() =>
                                              target.Edit(user, title, body, editedTags, limits));
        }
Esempio n. 15
0
        public void Voteable_CanRevokeVoteWithinDeadline_Successfully()
        {
            // Arrange
            var target = new QuestionBuilder().SetupValidQuestion().Build();
            var vote   = new VoteBuilder(target).SetupValidUpvote().ByOneUser().Build();
            var limits = new LimitsBuilder().Build();

            target.ApplyVote(vote);

            // Act
            target.RevokeVote(vote, limits);

            // Assert
            Assert.Equal(0, target.VotesSum);
        }
Esempio n. 16
0
        public void Voteable_CannotRevokeVoteOutsideDeadline_Successfully()
        {
            // Arrange
            var target    = new QuestionBuilder().SetupValidQuestion().Build();
            var limits    = new LimitsBuilder().Build();
            var firstVote = new VoteBuilder(target)
                            .SetupValidUpvote()
                            .ByOneUser()
                            .MakeTimeGoBy()
                            .Build();

            target.ApplyVote(firstVote);

            // Act, Assert
            Assert.Throws <BusinessException>(() => target.RevokeVote(firstVote, limits));
        }
Esempio n. 17
0
        public void Comment_EditingOutsideDeadline_Fails()
        {
            // Arrange - Build Question, 1 minute after deadline.
            var limits = new LimitsBuilder().Build();
            var target = new CommentBuilder()
                         .SetupValidComment()
                         .MakeTimeGoBy()
                         .Build();

            // Arrange - Edit Data
            string editedBody = "BodyNormal";

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              target.Edit(target.User, editedBody, limits));
        }
Esempio n. 18
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));
        }
Esempio n. 19
0
        public void Comment_CanGetCreatedWithValidData_Successfully()
        {
            // Arrange
            var user        = new UserBuilder().BuildValidUser().Build();
            var body        = "BodyNormal";
            var orderNumber = 1;
            var limits      = new LimitsBuilder().Build();
            var voteable    = new Voteable();

            // Act
            var result = Comment.Create(user, body, orderNumber, limits);

            // Assert
            Assert.Equal(user, result.User);
            Assert.Equal(body, result.Body);
            Assert.Equal(orderNumber, result.OrderNumber);
        }
Esempio n. 20
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);
        }
Esempio n. 21
0
        public void Question_EditingOutsideDeadline_Fails()
        {
            // Arrange - Build Question, 1 minute after deadline.
            var limits = new LimitsBuilder().Build();
            var target = new QuestionBuilder()
                         .SetupValidQuestion()
                         .MakeTimeGoBy()
                         .Build();

            // Arrange - Edit Data
            string editedTitle    = "TitleNormal";
            string editedBody     = "BodyNormal";
            int    editedTagCount = 5;
            var    editedTags     = new TagBuilder().Build(editedTagCount);

            // Act
            Assert.Throws <BusinessException>(() =>
                                              target.Edit(target.User, editedTitle, editedBody, editedTags, limits));
        }
Esempio n. 22
0
        public void Question_CreatingWithWrongNumberOfTags_Fails(int tagCount)
        {
            // Arrange
            var user  = new UserBuilder().BuildValidUser().Build();
            var title = "TitleNormal";
            var body  = "BodyNormal";
            var tags  = Builder <Tag>
                        .CreateListOfSize(tagCount)
                        .Build()
                        .ToList();

            var limits      = new LimitsBuilder().Build();
            var voteable    = new Voteable();
            var commentable = new Commentable();

            // Act, Assert
            Assert.Throws <BusinessException>(() =>
                                              Question.Create(user, title, body, tags, limits));
        }
Esempio n. 23
0
        public void User_CanEditWithValidData_Successfully(string websiteUrl, string aboutMe)
        {
            // Arrange
            var limits     = new LimitsBuilder().Build();
            var target     = new UserBuilder().BuildValidUser().Build();
            var originalId = target.Id;

            // Act
            target.Edit(websiteUrl, aboutMe, limits);

            // Assert
            var resultWebsiteUrl = target.WebsiteUrl?.ToString();

            Assert.Equal(target.Id, originalId);
            Assert.Equal(resultWebsiteUrl, string.IsNullOrWhiteSpace(websiteUrl) ? null : websiteUrl);
            Assert.Equal(target.AboutMe, aboutMe);
            Assert.True(DateTime.UtcNow - target.CreatedOn < TimeSpan.FromSeconds(1));
            Assert.Empty(target.Questions);
            Assert.Empty(target.Answers);
            Assert.Empty(target.Comments);
        }
Esempio n. 24
0
        public void Answer_CanBeCreated_Successfully()
        {
            // Arrange
            var    question    = new QuestionBuilder().SetupValidQuestion().Build();
            var    user        = new UserBuilder().BuildValidUser().Build();
            string body        = "BodyNormal";
            var    limits      = new LimitsBuilder().Build();
            var    voteable    = new Voteable();
            var    commentable = new Commentable();

            // Act
            var result = Answer.Create(user, body, question, limits);

            // Assert
            Assert.NotEqual(default(Guid), result.Id);
            Assert.Equal(user, result.User);
            Assert.Equal(body, result.Body);
            Assert.False(result.IsAcceptedAnswer);
            Assert.Null(result.AcceptedOn);
            Assert.True(DateTime.UtcNow - result.CreatedOn < TimeSpan.FromSeconds(1));
            Assert.Empty(result.Comments);
        }
Esempio n. 25
0
        public void Answer_EditingWithValidDataWithinDeadline_Successfully()
        {
            // Arrange - Build Question
            var question = new QuestionBuilder().SetupValidQuestion().Build();
            var target   = new AnswerBuilder()
                           .SetupValidAnswer(question)
                           .Build();
            var userId = target.UserId;

            // Arrange - Edit Data
            string editedBody = "BodyNormal";
            var    limits     = new LimitsBuilder().Build();

            // Act
            target.Edit(target.User, editedBody, limits);
            var result = target;

            // Assert
            Assert.NotEqual(default(Guid), result.Id);
            Assert.Equal(userId, result.UserId);
            Assert.Equal(editedBody, result.Body);
            Assert.Empty(result.Comments);
        }