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()); }
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); }
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); }
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()); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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); }
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); }
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)); }
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)); }
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); }
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); }
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); }