public void InvalidVoteValue_Submission_Low() { VoatAssert.Throws<ArgumentOutOfRangeException>(() => { var user = TestHelper.SetPrincipal(USERNAMES.Unit); var cmd = new CommentVoteCommand(1, -2, IpHash.CreateHash("127.0.0.1")).SetUserContext(user); var c = cmd.Execute().Result; }); }
public static Domain.Models.Submission CreateSubmission(string userName, Domain.Models.UserSubmission submission) { var user = TestHelper.SetPrincipal(userName); var cmd = new CreateSubmissionCommand(submission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r); Assert.AreNotEqual(0, r.Response.ID); return(r.Response); }
public void EnsureInvalidVoteValueThrowsException_Sub() { string userName = USERNAMES.User500CCP; var user = TestHelper.SetPrincipal(userName, null); //This user has one comment with 101 likes VoatAssert.Throws <ArgumentOutOfRangeException>(() => { using (var db = new Voat.Data.Repository(user)) { db.VoteSubmission(1, 21, IpHash.CreateHash("127.0.0.1")); } }); }
public void LongUrl_Bug() { var user = TestHelper.SetPrincipal("TestUser09"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "Long Url Bug", Url = "http://kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.com/" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Success); //Assert.AreNotEqual(0, r.Response.ID); }
public void PreventShortTitlePosts() { var user = TestHelper.SetPrincipal("TestUser02"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "What", Url = "http://www.hellogoodbye.com/images/feelsgoodman.jpg" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Invalid); Assert.AreEqual(r.Message, $"A title must be between {VoatSettings.Instance.MinimumTitleLength} and {VoatSettings.Instance.MaximumTitleLength} characters"); }
public void PreventGlobalBannedUsers() { var user = TestHelper.SetPrincipal("BannedGlobally"); var userSubmission = new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = Guid.NewGuid().ToString(), Url = "http://www.SendhelpImStuckInUnitTests.com/images/feelsgoodman.jpg" }; var cmd = new CreateSubmissionCommand(userSubmission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, "User is globally banned"); }
public void PreventSubverseBannedUsers() { var user = TestHelper.SetPrincipal("BannedFromVUnit"); var userSubmission = new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = Guid.NewGuid().ToString(), Url = "http://www.SuperAwesomeDomainName.com/images/feelsgoodman.jpg" }; var cmd = new CreateSubmissionCommand(userSubmission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, $"User is banned from v/{userSubmission.Subverse}"); }
public void CreateSubmissionTrapJSInUrl() { var user = TestHelper.SetPrincipal("TestUser06"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "This is a title", Url = "javascript:alert('arst');" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Invalid); Assert.AreEqual(r.Message, "The url you are trying to submit is invalid"); }
public void PreventUserFromPostingToAuthorizedOnlySubverses() { var user = TestHelper.SetPrincipal("TestUser09"); var userSubmission = new Domain.Models.UserSubmission() { Subverse = SUBVERSES.AuthorizedOnly, Title = Guid.NewGuid().ToString(), Url = "http://www.digit.com/images/feelsgoodman.jpg" }; var cmd = new CreateSubmissionCommand(userSubmission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, "You are not authorized to submit links or start discussions in this subverse. Please contact subverse moderators for authorization"); }
public void PreventUserFromPostingCompromisedTitle1() { var user = TestHelper.SetPrincipal("TestUser01"); var userSubmission = new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", Content = "cookies" }; var cmd = new CreateSubmissionCommand(userSubmission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, "Submission title can not contain Unicode or unprintable characters"); }
public void PreventPostingToDisabledSub() { var user = TestHelper.SetPrincipal("TestUser06"); var userSubmission = new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Disabled, Title = "I am not paying attention", Content = "Why was this sub disabled?" }; var cmd = new CreateSubmissionCommand(userSubmission).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual("Subverse is disabled", r.Message); }
public void PreventPartialUrlTitlePosts_Bug() { var user = TestHelper.SetPrincipal("TestUser09"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "speedtesting", Url = "http://beta.speedtesting.net/" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Success); //Assert.AreNotEqual(0, r.Response.ID); }
public async Task SendPrivateMessage() { var id = Guid.NewGuid().ToString(); var sender = USERNAMES.User100CCP; var recipient = USERNAMES.Anon; var user = TestHelper.SetPrincipal(sender); var message = new Domain.Models.SendMessage() { //Sender = User.Identity.Name, Recipient = recipient, Subject = id, Message = id }; var cmd = new SendMessageCommand(message).SetUserContext(user); var response = await cmd.Execute(); VoatAssert.IsValid(response); using (var db = new VoatDataContext()) { var record = (from x in db.Message where x.Recipient == recipient && x.Sender == sender && x.Title == id && x.Content == id && x.Subverse == null && x.CommentID == null && x.SubmissionID == null && x.Type == (int)Domain.Models.MessageType.Sent //&& x.Direction == (int)Domain.Models.MessageDirection.OutBound select x).FirstOrDefault(); Assert.IsNotNull(record, "Can not find outbound in database"); record = (from x in db.Message where x.Recipient == recipient && x.Sender == sender && x.Title == id && x.Content == id && x.Subverse == null && x.CommentID == null && x.SubmissionID == null && x.Type == (int)Domain.Models.MessageType.Private //&& x.Direction == (int)Domain.Models.MessageDirection.InBound select x).FirstOrDefault(); Assert.IsNotNull(record, "Can not find inbound in database"); } }
public async Task QueryUserComments_Anon() { var userName = "******"; var user = TestHelper.SetPrincipal(userName); var cmd = new CreateCommentCommand(2, null, "You can never know I said this: Bollocks").SetUserContext(user); var x = await cmd.Execute(); VoatAssert.IsValid(x); var q = new QueryUserComments(userName, SearchOptions.Default); var r = await q.ExecuteAsync(); Assert.AreEqual(false, r.Any(w => w.Content == "You can never know I said this: Bollocks")); }
public void PreventPartialUrlTitlePosts() { var user = TestHelper.SetPrincipal("TestUser02"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "www.yahoo.com", Url = "http://www.yahoo.com" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, "Submission title may not be the same as the URL you are trying to submit. Why would you even think about doing this?! Why?"); //Assert.AreNotEqual(0, r.Response.ID); }
public async Task MentionUser_Anon_NoBlock_Test() { string user1 = "UnitTestUser11"; string user2 = "UnitTestUser12"; var user = TestHelper.SetPrincipal(user1); //Submission var anonSubmission = TestHelper.ContentCreation.CreateSubmission(user1, new Domain.Models.UserSubmission() { Title = $"I'm harrassing @{user2}!", Content = GetMethodName(true), Subverse = SUBVERSES.Anon }); Assert.IsNotNull(anonSubmission, "Couldn't create test submission"); Assert.AreNotEqual(0, anonSubmission.ID, "Doesn't appear we have a valid submission id"); Thread.Sleep(2000); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.SubmissionID == anonSubmission.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.SubmissionMention ).Count(); Assert.AreEqual(1, count, "Where is the harassment submission message!?!?!?"); } //Comment string mentionTwiceContent = $"Hello @{user2}, I am mentioning you in an anon thread because I want to make you feel scared"; var cmd = new CreateCommentCommand(anonSubmission.ID, null, mentionTwiceContent).SetUserContext(user); var result = await cmd.Execute(); VoatAssert.IsValid(result); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.CommentID == result.Response.ID && x.IsAnonymized == true && x.Type == (int)Domain.Models.MessageType.CommentMention ).Count(); Assert.AreEqual(1, count, "Where is the harassment comment message!?!?!?"); } }
public async Task QueryUserComments() { var userName = "******"; var user = TestHelper.SetPrincipal(userName); var cmd = new CreateCommentCommand(1, null, "My pillow looks like jello").SetUserContext(user); var x = await cmd.Execute(); VoatAssert.IsValid(x); var q = new QueryUserComments(userName, SearchOptions.Default).SetUserContext(user); var r = await q.ExecuteAsync(); Assert.AreEqual(true, r.Any(w => w.Content == "My pillow looks like jello")); }
public async Task CreateSubmission_Anon_InNonAnonSub() { string userName = "******"; var user = TestHelper.SetPrincipal(userName); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "This is a title", Url = "http://www.yahoo.com", IsAnonymized = true }).SetUserContext(user).SetUserContext(user); var r = await cmd.Execute(); VoatAssert.IsValid(r, Status.Denied); }
public void PreventInvalidUrlTitlePosts() { var user = TestHelper.SetPrincipal("TestUser07"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "Super rad website", Url = "http//www.yahoo.com" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Invalid); Assert.AreEqual("The url you are trying to submit is invalid", r.Message); //Assert.AreNotEqual(0, r.Response.ID); }
public void EditComment_BannedDomain() { var user = TestHelper.SetPrincipal("TestUser02"); var cmd = new CreateCommentCommand(1, null, "This is a unit test and I like it.").SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); var editCmd = new EditCommentCommand(c.Response.ID, "[Check out this killer website](http://fleddit.com/f/3hen3k/Look_at_this_cat_just_Looook_awww)!").SetUserContext(user); var editResult = editCmd.Execute().Result; VoatAssert.IsValid(editResult, Status.Denied, "Expecting Denied Status"); Assert.AreEqual("Comment contains banned domains", editResult.Message); }
public void EditComment_Empty() { var user = TestHelper.SetPrincipal("TestUser11"); var cmd = new CreateCommentCommand(1, null, "This is a unit test and I like it.").SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); var editCmd = new EditCommentCommand(c.Response.ID, " ").SetUserContext(user); var editResult = editCmd.Execute().Result; Assert.IsFalse(editResult.Success, editResult.Message); Assert.AreEqual("Empty comments not allowed", editResult.Message); }
public void PreventUrlTitlePosts_BugTrap() { //BUGFIX: https://voat.co/v/FGC/1349484 var user = TestHelper.SetPrincipal("TestUser02"); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Whatever, Title = "http://www.besthealthmarket.org/cianix-male-enhancement/", Content = "Cianix is the best available product in the market. It has long lasting anti-aging effects. It made up of natural products and has no side effects. Therefore it is a highly recommended product for anti-aging as well as healthy skin. Signs of Healthy Skin We talk a lot about healthy skin and methods of achieving healthy skin. But what healthy skin actually is only a few of us know it. Here are few points that a healthy skin has: Even color:" }).SetUserContext(user); var r = cmd.Execute().Result; VoatAssert.IsValid(r, Status.Denied); Assert.AreEqual(r.Message, "Submission title is a url? Why would you even think about doing this?! Why?"); }
public async Task TestCommentNotification(string sub, string user1, string user2) { var id = Guid.NewGuid().ToString(); //Post submission as TestUser1 var user = TestHelper.SetPrincipal(user1); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = sub, Title = "Let's be creative!", Content = "No" }).SetUserContext(user); var response = await cmd.Execute(); VoatAssert.IsValid(response); var submission = response.Response; Assert.IsNotNull(submission, "Expected a non-null submission response"); //Reply to comment as TestUser2 user = TestHelper.SetPrincipal(user2); var commentCmd = new CreateCommentCommand(submission.ID, null, "Important Comment").SetUserContext(user); var responseComment = await commentCmd.Execute(); VoatAssert.IsValid(responseComment); var comment = responseComment.Response; Assert.IsNotNull(comment, "Expected a non-null comment response"); //Check to see if Comment notification exists in messages using (var db = new VoatDataContext()) { var record = (from x in db.Message where x.Recipient == user1 && x.Sender == user2 && x.IsAnonymized == submission.IsAnonymized && x.IsAnonymized == comment.IsAnonymized && x.CommentID == comment.ID && x.SubmissionID == submission.ID && x.Subverse == submission.Subverse && x.Type == (int)Domain.Models.MessageType.SubmissionReply // && x.Direction == (int)Domain.Models.MessageDirection.InBound select x).FirstOrDefault(); Assert.IsNotNull(record, "Can not find message in database"); } }
public void EditComment_WrongOwner() { var user = TestHelper.SetPrincipal("TestUser15"); var cmd = new CreateCommentCommand(1, null, "This is a unit test and I like it.").SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); user = TestHelper.SetPrincipal("TestUser12"); var editCmd = new EditCommentCommand(c.Response.ID, "All your comment are belong to us!").SetUserContext(user); var editResult = editCmd.Execute().Result; VoatAssert.IsValid(editResult, Status.Denied); Assert.AreEqual("User does not have permissions to perform requested action", editResult.Message); }
public void UpvoteSubmission_DeniesSameIP() { var user = TestHelper.SetPrincipal("UnitTestUser45"); var cmd = new SubmissionVoteCommand(1, 1, IpHash.CreateHash("1.1.1.1")).SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); user = TestHelper.SetPrincipal("UnitTestUser46"); cmd = new SubmissionVoteCommand(1, 1, IpHash.CreateHash("1.1.1.1")).SetUserContext(user); c = cmd.Execute().Result; Assert.IsNotNull(c, "Response is null"); Assert.IsFalse(c.Success, c.Message); Assert.IsNull(c.Response); }
public async Task CreateComment_TestSubmissionCommentNotification() { var userName = "******"; var user = TestHelper.SetPrincipal(userName); var body = Guid.NewGuid().ToString(); var cmd = new CreateCommentCommand(1, null, body).SetUserContext(user); var c = await cmd.Execute(); VoatAssert.IsValid(c); //check for comment reply entry using (var db = new VoatDataContext()) { var notice = db.Message.FirstOrDefault(x => x.Sender == userName && x.Recipient == "anon" && x.SubmissionID == 1); Assert.IsNotNull(notice, "Did not find a reply notification"); } }
public async Task UpvoteComment() { var user = TestHelper.SetPrincipal(USERNAMES.User50CCP); var cmd = new CommentVoteCommand(1, 1, IpHash.CreateHash("127.0.0.2")).SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); //verify in db using (var db = new Voat.Data.Repository(user)) { var comment = await db.GetComment(1); Assert.IsNotNull(comment, "Couldn't find comment in db"); Assert.AreEqual(comment.UpCount, c.Response.UpCount); Assert.AreEqual(comment.DownCount, c.Response.DownCount); } }
public async Task CreateSubmission_NSFW_TitleOnly() { string userName = "******"; var user = TestHelper.SetPrincipal(userName); var cmd = new CreateSubmissionCommand(new Domain.Models.UserSubmission() { Subverse = SUBVERSES.Unit, Title = "This is a title [nSfW]", Url = "http://www.yahoo.com/someotherurl/", IsAdult = false }).SetUserContext(user); var r = await cmd.Execute(); VoatAssert.IsValid(r); Assert.IsNotNull(r.Response, "Expecting a non null response"); Assert.AreNotEqual(0, r.Response.ID, "Expected a valid ID"); Assert.AreEqual(true, r.Response.IsAdult); }
public void DownvoteSubmission() { var submissionUser = "******"; var newSubmission = TestHelper.ContentCreation.CreateSubmission(submissionUser, new Domain.Models.UserSubmission() { Title = "This is what I think about you guys", Subverse = SUBVERSES.Unit }); var userName = USERNAMES.User500CCP; var user = TestHelper.SetPrincipal(userName); bool voteEventReceived = false; EventNotification.Instance.OnVoteReceived += (s, e) => { voteEventReceived = e.TargetUserName == submissionUser && e.SendingUserName == userName && e.ChangeValue == -1 && e.ReferenceType == Domain.Models.ContentType.Submission && e.ReferenceID == newSubmission.ID; }; var cmd = new SubmissionVoteCommand(newSubmission.ID, -1, IpHash.CreateHash("127.0.0.100")).SetUserContext(user); var c = cmd.Execute().Result; VoatAssert.IsValid(c); //verify in db using (var db = new Voat.Data.Repository(user)) { var submissionFromRepo = db.GetSubmission(newSubmission.ID); Assert.IsNotNull(submissionFromRepo, "Couldn't find comment in db"); Assert.AreEqual(submissionFromRepo.UpCount, c.Response.UpCount); Assert.AreEqual(submissionFromRepo.DownCount, c.Response.DownCount); } Assert.IsTrue(voteEventReceived, "VoteEvent not have the expected values"); //Verify Submission pull has correct vote value recorded in output for current user var q = new QuerySubmission(newSubmission.ID, true).SetUserContext(user); var submission = q.Execute(); Assert.IsNotNull(submission); Assert.AreEqual(c.RecordedValue, submission.Vote); //Verify non-logged in user has correct vote value TestHelper.SetPrincipal(null); q = new QuerySubmission(1, true); submission = q.Execute(); Assert.IsNotNull(submission); Assert.AreEqual(null, submission.Vote); }
public async Task MentionUser_Comment_Test() { string user1 = "UnitTestUser07"; string user2 = "UnitTestUser08"; var user = TestHelper.SetPrincipal(user1); string mentionTwiceContent = $"PSA: @{user2} is a shill. I saw him getting ready for work and his socks were standard shill issue."; var cmd = new CreateCommentCommand(submission.ID, null, mentionTwiceContent).SetUserContext(user); var result = await cmd.Execute(); VoatAssert.IsValid(result); using (var db = new VoatDataContext()) { var count = db.Message.Where(x => x.Sender == user1 && x.Recipient == user2 && x.CommentID == result.Response.ID).Count(); Assert.AreEqual(1, count, "Expected to receive shill mention! THIS IS CENSORSHIP!"); } }