public void Url_Not_Specified_LinkbackReceiveException_Saved() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType <LinkbackReceiveException>(result.ReceiveException); Assert.Equal("Url parameter for Trackback not specified", result.ReceiveException.Message); }
public void TargetUrl_Not_Http_Or_Https_ArgumentOutOfRangeException() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); ArgumentOutOfRangeException ex = null; try { trackback.Receive(request.Object, new Uri("ftp://target/post/1")); } catch (ArgumentOutOfRangeException _ex) { ex = _ex; } // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.NotNull(ex); Assert.Equal("targetUrl", ex.ParamName); }
public void WebException_Saved() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "http://source/post/1" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/post/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Throws(new System.Net.WebException("WebException")); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType <System.Net.WebException>(result.ReceiveException); Assert.Equal("WebException", result.ReceiveException.Message); }
public ActionResult Ping(string sourceUri, string targetUri) { if (sourceUri == null || targetUri == null) { throw new ArgumentNullException(); } PostAddress postAddress = pathHelper.GetPostAddressFromUri(new Uri(targetUri)); Post post = postService.GetPost(postAddress); if (post == null) { return(new XmlRpcFaultResult(33, "Cannot find post")); } Trackback trackback = post.Trackbacks.Where(tb => string.Equals(tb.Url, sourceUri, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (trackback == null) { trackback = new Trackback() { Url = sourceUri, Created = DateTime.Now.ToUniversalTime(), Title = string.Empty, BlogName = string.Empty, Body = string.Empty, Source = string.Empty }; postService.AddTrackback(post, trackback); } return(new XmlRpcResult("Success")); }
public void CreateTrackbackSetsFeedbackTypeCorrectly() { string hostname = UnitTestHelper.GenerateUniqueString(); Config.CreateBlog("", "username", "password", hostname, string.Empty); UnitTestHelper.SetHttpContextWithBlogRequest(hostname, string.Empty, string.Empty); Blog blog = Config.GetBlog(hostname, string.Empty); BlogRequest.Current.Blog = blog; Entry entry = UnitTestHelper.CreateEntryInstanceForSyndication("phil", "title", "body"); int parentId = UnitTestHelper.Create(entry); var trackback = new Trackback(parentId, "title", new Uri("http://url"), "phil", "body", blog.TimeZone.Now); var subtextContext = new Mock <ISubtextContext>(); subtextContext.Setup(c => c.Blog).Returns(Config.CurrentBlog); //TODO: FIX!!! subtextContext.Setup(c => c.Repository).Returns(ObjectProvider.Instance()); subtextContext.Setup(c => c.Cache).Returns(new TestCache()); subtextContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable()); var commentService = new CommentService(subtextContext.Object, null); int id = commentService.Create(trackback, true /*runFilters*/); FeedbackItem loadedTrackback = FeedbackItem.Get(id); Assert.IsNotNull(loadedTrackback, "Was not able to load trackback from storage."); Assert.AreEqual(FeedbackType.PingTrack, loadedTrackback.FeedbackType, "Feedback should be a PingTrack"); }
protected void lkbPost_Click(object sender, EventArgs e) { try { var entry = new Trackback(EntryId, txbTitle.Text, txbUrl.Text.EnsureUrl(), string.Empty, txbBody.Text.Trim().Length > 0 ? txbBody.Text.Trim() : txbTitle.Text); var commentService = new CommentService(SubtextContext, null); if (commentService.Create(entry, true /*runFilters*/) > 0) { ICommentSpamService feedbackService = null; if (Config.CurrentBlog.FeedbackSpamServiceEnabled) { feedbackService = new AkismetSpamService(Config.CurrentBlog.FeedbackSpamServiceKey, Config.CurrentBlog, null, Url); } var filter = new CommentFilter(SubtextContext, feedbackService); filter.FilterAfterPersist(entry); Messages.ShowMessage(Constants.RES_SUCCESSNEW); Edit.Visible = false; Results.Visible = true; } else { Messages.ShowError(Constants.RES_FAILUREEDIT + " There was a baseline problem posting your Trackback."); } } catch (Exception ex) { Log.Error(ex.Message, ex); Messages.ShowError(String.Format(Constants.RES_EXCEPTION, Constants.RES_FAILUREEDIT, ex.Message)); } }
public void Uri_Not_Http_Or_Https_UriFormatException_Saved() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "ftp://source/1" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType <UriFormatException>(result.ReceiveException); Assert.Equal("Url scheme must be http or https", result.ReceiveException.Message); }
public void Uri_Invalid_UriFormatException_Saved() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "~this~is~not~an~url*xxx://" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType <UriFormatException>(result.ReceiveException); }
public ValidationStateDictionary EditTrackback(Trackback trackback) { //post.Trackbacks.Add(trackback); //repository.Save(post); return(null); }
public TrackbackReadOnly(Trackback trackback) { Url = trackback.Url; Title = trackback.Title; Body = trackback.Body; BlogName = trackback.BlogName; Source = trackback.Source; IsTargetInSource = trackback.IsTargetInSource; Created = trackback.Created.Value; Modified = trackback.Modified.Value; }
public TrackbackViewModel Add(PostAddress postAddress, FormCollection form) { Post post = postService.GetPost(postAddress); if (post == null) { return(new TrackbackViewModel(0, "ID is invalid or missing")); } string incomingUrl = getParameter(form, "url"); string incomingTitle = getParameter(form, "title"); string incomingBlogName = getParameter(form, "blog_name"); string incomingExcerpt = getParameter(form, "excerpt"); if (string.IsNullOrEmpty(incomingUrl)) { return(new TrackbackViewModel(1, "no url parameter found, please try harder!")); } Trackback trackback = post.Trackbacks.Where(tb => string.Equals(tb.Url, incomingUrl, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); try { if (trackback == null) { trackback = new Trackback { Title = incomingTitle, Body = incomingExcerpt, Url = incomingUrl, BlogName = incomingBlogName, Source = "", Created = DateTime.Now.ToUniversalTime() }; postService.AddTrackback(post, trackback); } else { trackback.Title = incomingTitle; trackback.Body = incomingExcerpt; trackback.BlogName = incomingBlogName; trackback.IsTargetInSource = null; postService.EditTrackback(trackback); } return(new TrackbackViewModel()); } catch { return(new TrackbackViewModel(2, "Failed to save Trackback.")); } }
internal static Trackback AssembleTrackback(WordpressNamespaces namespaces, XElement trackbackElement) { Trackback trackback = new Trackback(); trackback.ID = trackbackElement.WordpressElement(namespaces, "comment_id").Value; trackback.Title = ((XCData)trackbackElement.WordpressElement(namespaces, "comment_author").FirstNode).Value; trackback.DateCreated = DateTime.Parse(trackbackElement.WordpressElement(namespaces, "comment_date_gmt").Value); trackback.Url = trackbackElement.WordpressElement(namespaces, "comment_author_url").Value; return(trackback); }
public string pingBack(string sourceURI, string targetURI) { if (!Blog.TrackbacksEnabled) { return("Pingbacks are not enabled for this site."); } string pageTitle; // GetPostIDFromUrl returns the postID int?id = SubtextContext.RequestContext.GetIdFromRequest(); if (id == null) { throw new XmlRpcFaultException(33, Resources.XmlRcpFault_DidNotLinkToPermalink); } Uri sourceUrl = sourceURI.ParseUri(); Uri targetUrl = targetURI.ParseUri(); // does the sourceURI actually contain the permalink ? if (sourceUrl == null || targetUrl == null || !Verifier.SourceContainsTarget(sourceUrl, targetUrl, out pageTitle)) { throw new XmlRpcFaultException(17, Resources.XmlRcpFault_InvalidLink); } //PTR = Pingback - TrackBack - Referral var trackback = new Trackback(id.Value, HtmlHelper.SafeFormat(pageTitle, SubtextContext.HttpContext.Server), new Uri(sourceURI), string.Empty, HtmlHelper.SafeFormat(pageTitle, SubtextContext.HttpContext.Server), Blog.TimeZone.Now); ICommentSpamService feedbackService = null; if (Blog.FeedbackSpamServiceEnabled) { feedbackService = new AkismetSpamService(Blog.FeedbackSpamServiceKey, Blog, null, Url); } var commentService = new CommentService(SubtextContext, new CommentFilter(SubtextContext, feedbackService)); commentService.Create(trackback, true /*runFilters*/); //TODO: Create this using IoC container var emailService = new EmailService(EmailProvider.Instance(), new EmbeddedTemplateEngine(), SubtextContext); emailService.EmailCommentToBlogAuthor(trackback); return(String.Format(CultureInfo.InvariantCulture, Resources.XmlRpcMessage_ThanksForThePingback, sourceURI)); }
public void Discovery_Source_Has_No_Link() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "http://source/1" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.Setup(x => x.Close()); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); string source = "... http://target/any ..."; webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source))); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.Equal("Source Title", result.Title); Assert.Equal("ABC", result.Excerpt); Assert.Equal("http://source/1", result.Url.ToString().ToLowerInvariant()); Assert.Equal("Test Blog", result.BlogName); }
public void BlogName_Not_Specified() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "http://source/1" }, }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.Setup(x => x.Close()); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); string source = "... <a href=\"http://taRget/post/1\">post1</a> ..."; webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source))); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.True(result.Valid); Assert.Equal("Source Title", result.Title); Assert.Equal("ABC", result.Excerpt); Assert.Equal("http://source/1", result.Url.ToString().ToLowerInvariant()); Assert.True(String.IsNullOrEmpty(result.BlogName)); }
private void CreateTrackbackAndSendResponse(ISubtextContext subtextContext, IEntryIdentity entry, int entryId) { HttpContextBase context = subtextContext.RequestContext.HttpContext; string title = SafeParam(context, "title"); string excerpt = SafeParam(context, "excerpt"); string urlText = SafeParam(context, "url"); string blogName = SafeParam(context, "blog_name"); Uri url = urlText.ParseUri(); if (url == null) { SendTrackbackResponse(context, 1, Resources.TrackbackResponse_NoUrl); return; } if (entry == null || !IsSourceVerification(url, subtextContext.UrlHelper.EntryUrl(entry).ToFullyQualifiedUrl(subtextContext.Blog))) { SendTrackbackResponse(context, 2, String.Format(CultureInfo.InvariantCulture, Resources.TrackbackResponse_NoRelevantLink, url)); return; } var trackback = new Trackback(entryId, title, url, blogName, excerpt, Blog.TimeZone.Now); ICommentSpamService feedbackService = null; Blog blog = subtextContext.Blog; if (blog.FeedbackSpamServiceEnabled) { feedbackService = new AkismetSpamService(blog.FeedbackSpamServiceKey, blog, null, Url); } var commentService = new CommentService(SubtextContext, new CommentFilter(SubtextContext, feedbackService)); commentService.Create(trackback, true /*runFilters*/); //TODO: Create this using IoC container var emailService = new EmailService(EmailProvider.Instance(), new EmbeddedTemplateEngine(), subtextContext); emailService.EmailCommentToBlogAuthor(trackback); }
public void SaveTrackback(Post post, Trackback trackback) { oxite_Blogs_Trackback persistenceTrackback = new oxite_Blogs_Trackback { BlogName = trackback.BlogName, Body = trackback.Body, CreatedDate = trackback.Created ?? DateTime.UtcNow, IsTargetInSource = trackback.IsTargetInSource, ModifiedDate = DateTime.UtcNow, PostID = post.ID, Source = trackback.Source, Title = trackback.Title, TrackbackID = Guid.NewGuid(), Url = trackback.Url }; context.oxite_Blogs_Trackbacks.InsertOnSubmit(persistenceTrackback); context.SubmitChanges(); }
public void Title_Encoded() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source <script /> Title" }, { "excerpt", "ABC" }, { "url", "http://source/1" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.Setup(x => x.Close()); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); string source = "... <a href=\"http://taRget/post/1\">post1</a> ..."; webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source))); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.True(result.Valid); Assert.Equal("Source <script /> Title", result.Title); }
public void BlogName_Encoded() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "http://source/1"}, {"blog_name", "Test <script /> Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.Setup(x => x.Close()); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); string source = "... <a href=\"http://taRget/post/1\">post1</a> ..."; webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source))); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.True(result.Valid); Assert.Equal("Test <script /> Blog", result.BlogName); }
public void Source_Discovery_Http_Error_LinkbackReceiveException_Saved() { // Setup var request = new Mock <HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { { "title", "Source Title" }, { "excerpt", "ABC" }, { "url", "http://source/post/1" }, { "blog_name", "Test Blog" } }); var webRequest = new Mock <IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock <IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/post/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false); webResponse.Setup(x => x.Close()); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType <LinkbackReceiveException>(result.ReceiveException); Assert.Equal("Http error while discovering Trackback source at http://source/post/1", result.ReceiveException.Message); }
public void TrackbackShowsUpInFeedbackList() { string hostname = UnitTestHelper.GenerateUniqueString(); var repository = new DatabaseObjectProvider(); repository.CreateBlog("", "username", "password", hostname, "blog"); UnitTestHelper.SetHttpContextWithBlogRequest(hostname, "blog", string.Empty); Blog blog = repository.GetBlog(hostname, "blog"); BlogRequest.Current.Blog = blog; Entry parentEntry = UnitTestHelper.CreateEntryInstanceForSyndication("philsath aeuoa asoeuhtoensth", "sntoehu title aoeuao eu", "snaot hu aensaoehtu body"); int parentId = UnitTestHelper.Create(parentEntry); ICollection <FeedbackItem> entries = repository.GetFeedbackForEntry(parentEntry); Assert.AreEqual(0, entries.Count, "Did not expect any feedback yet."); var trackback = new Trackback(parentId, "title", new Uri("http://url"), "phil", "body"); Config.CurrentBlog.DuplicateCommentsEnabled = true; var subtextContext = new Mock <ISubtextContext>(); subtextContext.Setup(c => c.Cache).Returns(new TestCache()); subtextContext.SetupBlog(Config.CurrentBlog); subtextContext.SetupRepository(repository); subtextContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable()); var commentService = new CommentService(subtextContext.Object, null); int trackbackId = commentService.Create(trackback, true /*runFilters*/); new DatabaseObjectProvider().Approve(trackback, null); entries = repository.GetFeedbackForEntry(parentEntry); Assert.AreEqual(1, entries.Count, "Expected a trackback."); Assert.AreEqual(trackbackId, entries.First().Id, "The feedback was not the same one we expected. The IDs do not match."); }
public void Autodiscovery_Fail_Then_Try_Direct() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); //webRequest1.Setup(x => x.Create(new Uri("http://target/post/1/trackback"))).Returns(webRequest1.Object); bool firstRequest = true; webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object); webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false); webResponse1.Setup(x => x.Close()); var webRequest2 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse2 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1/trackback"))).Returns( () => { if (firstRequest) { firstRequest = false; return webRequest1.Object; } else { return webRequest2.Object; } }); webRequest2.SetupSet(x => x.Method = "POST"); webRequest2.SetupSet(x => x.ContentType = "application/x-www-form-urlencoded"); webRequest2.SetupSet(x => x.ContentLength = 82); var requestStream = new MemoryStream(); webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream); webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object); webResponse2.Setup(x => x.Close()); webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse2.SetupGet(x => x.ContentEncoding).Returns(String.Empty); webResponse2.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><response><error>0</error></response>"))); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1/trackback"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog" }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); webRequest2.VerifyAll(); webResponse2.VerifyAll(); Assert.Equal("url=http%3A%2F%2Fsource%2F1&title=Source%20Title&excerpt=ABC&blog_name=Test%20Blog", new UTF8Encoding().GetString(requestStream.ToArray())); Assert.True(result.Success); Assert.Equal(0, result.Code); Assert.True(String.IsNullOrEmpty(result.Message)); }
public void ProtocolViolationException_Saved() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Throws(new System.Net.ProtocolViolationException("ProtocolViolationException")); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog" }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); Assert.False(result.Success); Assert.Equal(0, result.Code); Assert.True(String.IsNullOrEmpty(result.Message)); Assert.IsType<System.Net.ProtocolViolationException>(result.SendException); }
public void Autodiscovery_RDF_Not_Found_But_Autodiscovery_Is_True_Then_LinkbackSendException_Saved() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object); webResponse1.Setup(x => x.Close()); webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse1.SetupGet(x => x.ContentEncoding).Returns(String.Empty); string rdf = "... there are no any RDFs ... "; webResponse1.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(rdf))); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog", AutoDiscovery = true }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); Assert.False(result.Success); Assert.Equal(0, result.Code); Assert.True(String.IsNullOrEmpty(result.Message)); Assert.IsType<LinkbackSendException>(result.SendException); Assert.Equal("RDF not found while discovering Trackback url for http://target/post/1", result.SendException.Message); }
public void Excerpt_Not_Specified() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object); webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse1.SetupGet(x => x.ContentEncoding).Returns(String.Empty); string rdf = String.Format(@" ... <p> <rdf:RDF xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#"" xmlns:dc=""http://purl.org/dc/elements/1.1/"" xmlns:trackback=""http://madskills.com/public/xml/rss/module/trackback/""> <rdf:Description rdf:about=""{0}"" dc:identifier=""{0}"" dc:title=""{1}"" trackback:ping=""{2}"" /> </rdf:RDF> </p> ...", "http://target/post/1", "1", "http://target/post/1/trackback"); webResponse1.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(rdf))); webResponse1.Setup(x => x.Close()); var webRequest2 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse2 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1/trackback"))).Returns(webRequest2.Object); webRequest2.SetupSet(x => x.Method = "POST"); webRequest2.SetupSet(x => x.ContentType = "application/x-www-form-urlencoded"); webRequest2.SetupSet(x => x.ContentLength = 70); var requestStream = new MemoryStream(); webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream); webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object); webResponse2.Setup(x => x.Close()); webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse2.SetupGet(x => x.ContentEncoding).Returns(String.Empty); webResponse2.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><response><error>0</error></response>"))); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Url = new Uri("http://source/1"), BlogName = "Test Blog" }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); webRequest2.VerifyAll(); webResponse2.VerifyAll(); Assert.Equal("url=http%3A%2F%2Fsource%2F1&title=Source%20Title&blog_name=Test%20Blog", new UTF8Encoding().GetString(requestStream.ToArray())); Assert.True(result.Success); Assert.Equal(0, result.Code); Assert.True(String.IsNullOrEmpty(result.Message)); }
public void Url_Not_Specified_LinkbackReceiveException_Saved() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType<LinkbackReceiveException>(result.ReceiveException); Assert.Equal("Url parameter for Trackback not specified", result.ReceiveException.Message); }
public void Unknown_Exceptions_Are_Not_Handled() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Throws(new InvalidOperationException()); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog" }; InvalidOperationException exception = null; try { trackback.Send(url, parameters); } catch (InvalidOperationException ex) { exception = ex; } // Verify Assert.NotNull(exception); }
public ValidationStateDictionary AddTrackback(Post post, Trackback trackback) { AddedTrackback = trackback; return(null); }
public static PostInputForImport ToImportPostInput(this BlogMLPost blogMLPost, BlogMLBlog blog, bool commentingDisabled, string slugPattern, EntityState state, UserAuthenticated creator) { string body = blogMLPost.Content.Text; string bodyShort = blogMLPost.HasExcerpt ? blogMLPost.Excerpt.Text : ""; DateTime created = blogMLPost.DateCreated; DateTime modified = blogMLPost.DateModified; DateTime?published = blogMLPost.DateCreated; string title = blogMLPost.Title; string slug; if (!string.IsNullOrEmpty(slugPattern)) { Regex regex = new Regex(slugPattern); Match match = regex.Match(blogMLPost.PostUrl); if (match != null && match.Groups != null && match.Groups.Count >= 2) { slug = match.Groups[1].Value; } else { slug = blogMLPost.ID; } } else { slug = !string.IsNullOrEmpty(blogMLPost.PostUrl) ? blogMLPost.PostUrl : blogMLPost.ID; } List <PostTag> tags = new List <PostTag>(); if (blogMLPost.Categories != null && blogMLPost.Categories.Count > 0) { foreach (BlogMLCategoryReference bcr in blogMLPost.Categories) { foreach (BlogMLCategory tag in blog.Categories) { if (tag.ID == bcr.Ref) { tags.Add(new PostTag(Guid.NewGuid(), tag.Title, tag.Title, tag.DateCreated)); break; } } } } List <Trackback> trackbacks = new List <Trackback>(); if (blogMLPost.Trackbacks != null && blogMLPost.Trackbacks.Count > 0) { foreach (BlogMLTrackback tb in blogMLPost.Trackbacks) { Trackback trackback = new Trackback { Created = tb.DateCreated, Modified = tb.DateModified, Title = tb.Title, Url = tb.Url, IsTargetInSource = tb.Approved, BlogName = "", Body = "", Source = "" }; trackbacks.Add(trackback); } } return(new PostInputForImport(body, bodyShort, commentingDisabled, created, creator, modified, published, slug, state, tags, title, trackbacks)); }
public void Source_Discovery_Http_Error_LinkbackReceiveException_Saved() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "http://source/post/1"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/post/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false); webResponse.Setup(x => x.Close()); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType<LinkbackReceiveException>(result.ReceiveException); Assert.Equal("Http error while discovering Trackback source at http://source/post/1", result.ReceiveException.Message); }
public void Discovery_Source_Has_No_Link() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "http://source/1"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Returns(webResponse.Object); webResponse.Setup(x => x.Close()); webResponse.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); string source = "... http://target/any ..."; webResponse.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(source))); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); webResponse.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.Equal("Source Title", result.Title); Assert.Equal("ABC", result.Excerpt); Assert.Equal("http://source/1", result.Url.ToString().ToLowerInvariant()); Assert.Equal("Test Blog", result.BlogName); }
public void TargetUrl_Null_ArgumentNullException() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); ArgumentNullException ex = null; try { trackback.Receive(request.Object, null); } catch (ArgumentNullException _ex) { ex = _ex; } // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.NotNull(ex); Assert.Equal("targetUrl", ex.ParamName); }
public static Post ToPost(this BlogMLPost blogMLPost, BlogMLBlog blog, User user, string slugPattern) { Post post = new Post(); post.Body = blogMLPost.Content.Text; post.Creator = user; post.Created = blogMLPost.DateCreated; post.Modified = blogMLPost.DateModified; post.Published = blogMLPost.DateCreated; if (!string.IsNullOrEmpty(slugPattern)) { Regex regex = new Regex(slugPattern); Match match = regex.Match(blogMLPost.PostUrl); if (match != null && match.Groups != null && match.Groups.Count >= 2) { post.Slug = match.Groups[1].Value; } else { post.Slug = blogMLPost.ID; } } else { post.Slug = !string.IsNullOrEmpty(blogMLPost.PostUrl) ? blogMLPost.PostUrl : blogMLPost.ID; } post.Title = blogMLPost.Title; post.BodyShort = blogMLPost.HasExcerpt ? blogMLPost.Excerpt.Text : ""; post.State = blogMLPost.Approved ? EntityState.Normal : EntityState.PendingApproval; post.CommentingDisabled = false; post.Tags = new List <Tag>(); if (blogMLPost.Categories != null && blogMLPost.Categories.Count > 0) { foreach (BlogMLCategoryReference bcr in blogMLPost.Categories) { foreach (BlogMLCategory tag in blog.Categories) { if (tag.ID == bcr.Ref) { post.Tags.Add(new Tag { ID = Guid.NewGuid(), Name = tag.Title, Created = tag.DateCreated }); break; } } } } post.Trackbacks = new List <Trackback>(); if (blogMLPost.Trackbacks != null && blogMLPost.Trackbacks.Count > 0) { foreach (BlogMLTrackback tb in blogMLPost.Trackbacks) { Trackback trackback = new Trackback { Created = tb.DateCreated, Modified = tb.DateModified, Title = tb.Title, Url = tb.Url, IsTargetInSource = tb.Approved, BlogName = "", Body = "", Source = "" }; post.Trackbacks.Add(trackback); } } return(post); }
public void WebException_Saved() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "http://source/post/1"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); webRequest.Setup(x => x.Create(new Uri("http://source/post/1"))).Returns(webRequest.Object); webRequest.Setup(x => x.GetResponse()).Throws(new System.Net.WebException("WebException")); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType<System.Net.WebException>(result.ReceiveException); Assert.Equal("WebException", result.ReceiveException.Message); }
public void Response_Error() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object); webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse1.SetupGet(x => x.ContentEncoding).Returns(String.Empty); string rdf = String.Format("... <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\"><rdf:Description rdf:about=\"{0}\" dc:identifier=\"{0}\" dc:title=\"{1}\" trackback:ping=\"{2}\" /></rdf:RDF> ...", "http://target/post/1", "1", "http://target/post/1/trackback"); webResponse1.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes(rdf))); webResponse1.Setup(x => x.Close()); var webRequest2 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse2 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1/trackback"))).Returns(webRequest2.Object); webRequest2.SetupSet(x => x.Method = "POST"); webRequest2.SetupSet(x => x.ContentType = "application/x-www-form-urlencoded"); webRequest2.SetupSet(x => x.ContentLength = 82); var requestStream = new MemoryStream(); webRequest2.Setup(x => x.GetRequestStream()).Returns(requestStream); webRequest2.Setup(x => x.GetResponse()).Returns(webResponse2.Object); webResponse2.Setup(x => x.Close()); webResponse2.SetupGet(x => x.IsHttpStatusCode2XX).Returns(true); webResponse2.SetupGet(x => x.ContentEncoding).Returns(String.Empty); webResponse2.Setup(x => x.GetResponseStream()).Returns(new MemoryStream(new UTF8Encoding().GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><response><error>1</error><message>Error</message></response>"))); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog" }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); webRequest2.VerifyAll(); webResponse2.VerifyAll(); Assert.True(result.Success); Assert.Equal(1, result.Code); Assert.Equal("Error", result.Message); }
public ValidationStateDictionary EditTrackback(Trackback trackback) { AddedTrackback = trackback; return(null); }
public ValidationStateDictionary AddTrackback(Post post, Trackback trackback) { repository.SaveTrackback(post, trackback); return(null); }
public void Autodiscovery_Http_Error_But_Autodiscovery_Is_True_Then_LinkbackSendException_Saved() { // Setup var webRequest1 = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); var webResponse1 = new Mock<IHttpWebResponseImplementation>(MockBehavior.Strict); webRequest1.Setup(x => x.Create(new Uri("http://target/post/1"))).Returns(webRequest1.Object); webRequest1.Setup(x => x.GetResponse()).Returns(webResponse1.Object); webResponse1.SetupGet(x => x.IsHttpStatusCode2XX).Returns(false); webResponse1.Setup(x => x.Close()); // Test var trackback = new Trackback(webRequest1.Object); var url = new Uri("http://target/post/1"); var parameters = new LinkbackSendParameters { Title = "Source Title", Excerpt = "ABC", Url = new Uri("http://source/1"), BlogName = "Test Blog", AutoDiscovery = true }; var result = trackback.Send(url, parameters); // Verify webRequest1.VerifyAll(); webResponse1.VerifyAll(); Assert.False(result.Success); Assert.Equal(0, result.Code); Assert.True(String.IsNullOrEmpty(result.Message)); Assert.IsType<LinkbackSendException>(result.SendException); Assert.Equal("Http error while discovering Trackback url for http://target/post/1", result.SendException.Message); }
public void Uri_Invalid_UriFormatException_Saved() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "~this~is~not~an~url*xxx://"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType<UriFormatException>(result.ReceiveException); }
public void Uri_Not_Http_Or_Https_UriFormatException_Saved() { // Setup var request = new Mock<HttpRequestBase>(MockBehavior.Strict); request.SetupGet(x => x.Form).Returns( new NameValueCollection { {"title", "Source Title"}, {"excerpt", "ABC"}, {"url", "ftp://source/1"}, {"blog_name", "Test Blog"} }); var webRequest = new Mock<IHttpWebRequestImplementation>(MockBehavior.Strict); // Test var trackback = new Trackback(webRequest.Object); var result = trackback.Receive(request.Object, new Uri("http://target/post/1")); // Verify webRequest.VerifyAll(); request.VerifyAll(); Assert.False(result.Valid); Assert.IsType<UriFormatException>(result.ReceiveException); Assert.Equal("Url scheme must be http or https", result.ReceiveException.Message); }