public AddDraftResult AddDraft(string title) { try { string postTitle = title.Trim(); if (String.IsNullOrWhiteSpace(postTitle)) { return new AddDraftResult { Success = false }; } string postSlug = slugifier.Slugify(postTitle); string uniqueSlug = slugManager.GetUniqueSlug(postSlug); DateTime currentTime = DateTime.UtcNow; var db = Database.Open(); var post = db.Posts.Insert(Title: postTitle, UrlSlug: uniqueSlug, IsPublished: false, CreatedOn: currentTime, LastUpdatedOn: currentTime); var addResult = new AddDraftResult { Success = true, Id = post.PostId, Title = post.Title, Url = "/admin/posts/edit/" + post.PostId }; return addResult; } catch (Exception error) { return new AddDraftResult { Success = false }; } }
public void Add_returns_correct_json() { var adapter = new InMemoryAdapter(); Database.UseMockAdapter(adapter); var postStore = A.Fake<IPostStore>(); var addDraftResult = new AddDraftResult { Id = 1, Success = true, Title = "The Title", Url = "/admin/posts/edit/1" }; A.CallTo(() => postStore.AddDraft("The Title")).Returns(addDraftResult); FakeRootPathProvider.RootPath = "../../../Markie"; var bootstrapper = new ConfigurableBootstrapper(with => { with.RootPathProvider(new FakeRootPathProvider()); with.Dependency<FakePasswordService>(); with.Dependency(postStore); with.RequestStartup((container, pipelines, context) => { var formsAuthConfiguration = new FormsAuthenticationConfiguration() { RedirectUrl = "~/admin/login", UserMapper = new UserMapper() }; FormsAuthentication.Enable(pipelines, formsAuthConfiguration); }); }); var browser = new Browser(bootstrapper); var jsonResult = browser.Post("/admin/posts/add", with => { with.HttpRequest(); with.FormValue("title", "The Title"); }); var result = Newtonsoft.Json.JsonConvert.DeserializeObject<AddDraftResult>(jsonResult.Body.AsString()); Assert.AreEqual(addDraftResult.Id, result.Id); Assert.AreEqual(addDraftResult.Success, result.Success); Assert.AreEqual(addDraftResult.Title, result.Title); Assert.AreEqual(addDraftResult.Url, result.Url); }