public void ShouldPostToBasecampUrl()
        {
            var settings = new BaseCampSettings
                {
                    CategoryId = "cat",
                    MainUrl = _server.RootUrl.TrimEnd('/'),
                    UserId = "usr",
                    Password = "pwd",
                    ProjectId = "proj"
                };
            var message = new BaseCampMessage
                {
                    Body = "message",
                    CategoryId = settings.CategoryId,
                    Title = "hi"
                };

            string body = null;
            string contentType = null;

            //TODO: the Juicy web server doesn't support the post bdy yet
            // (it's broken) so we will ignore that for now.

            _server.Mount(settings.NewPostPath, (req, resp) =>
                {
                    //body = req.PostBody;
                    contentType = req["Content-Type"];
                });

            UnfuddleChangesetHandler.PostNewMessageToBasecamp(message, settings);
            //Assert.AreEqual(message.ToXml(settings), body);
            Assert.AreEqual("application/xml", contentType);
        }
 public static BaseCampMessage CreateBasecampMessage(Changeset changeset, BaseCampSettings settings)
 {
     /*
     POST /projects/#{project_id}/posts.xml
         <request>
           <post>
             <category-id>#{category_id}</category-id>
             <title>#{title}</title>
             <body>#{body}</body>
             <extended-body>#{extended_body}</extended-body>
             <private>1</private> <!-- only for firm employees -->
           </post>
           <notify>#{person_id}</notify>
           <notify>#{person_id}</notify>
         </request>
      */
     return new BaseCampMessage
         {
             Title = string.Format("{0} committed revision {1} in {2}",
                                   changeset.Author,
                                   changeset.Revision,
                                   changeset.Repository),
             Body = changeset.Message,
             CategoryId = settings.CategoryId
         };
 }
        public string ToXml(BaseCampSettings settings)
        {
            var msg = new XmlDocument();
            msg.LoadXml(
                @"<request>
                  <post>
                    <category-id></category-id>
                    <title></title>
                    <body></body>
                  </post>
                </request>"
                );

            msg.SelectSingleNode("request/post/category-id").InnerText = settings.CategoryId;
            msg.SelectSingleNode("request/post/title").InnerText = Title;
            msg.SelectSingleNode("request/post/body").InnerText = Body;

            return msg.OuterXml;
        }
        public static void PostNewMessageToBasecamp(BaseCampMessage message, BaseCampSettings settings)
        {
            string url = settings.NewPostUrl;

            var messageXml = message.ToXml(settings);
            GetResponseBodyFromUrlViaPost(url, messageXml, "application/xml");
        }