public void Existing_database_entry_slug_remains_unchanged()
        {
            Mapper.Reset();
            AutoMapperConfig.RegisterMappings();

            var testableStore = new TestableStore();

            var entry = new Entry
            {
                Slug = "foo-title"
            };

            using (var session = testableStore.OpenSession())
            {
                session.Store(entry);
                session.SaveChanges();

                var entryEditModel = new EntryEditModel
                {
                    Id = entry.Id,
                    Title = "Bar Title"
                };

                var entryEditModelToEntryMapper = new EntryEditModelToEntryMapper(session);
                entryEditModelToEntryMapper.Map(entry, entryEditModel);

                Assert.Equal(entry.Slug, entry.Slug);
            }

            Mapper.Reset();
        }
        public ActionResult Save(EntryEditModel editModel)
        {
            if(!this.ModelState.IsValid)
            {
                return this.Json(new { error = true });
            }

            var isNewEntry = IsNewEntry(editModel);

            Entry entry;

            if (isNewEntry)
            {
                entry = new Entry();
            }
            else
            {
                entry = this.session.Load<Entry>(editModel.Id);
                if (entry == null)
                {
                    return this.Json(new { error = true });
                }
            }

            this.ApplyEntryEditModelToEntry(entry, editModel);

            if (isNewEntry)
            {
                this.session.Store(entry);
            }

            this.session.SaveChanges();

            return this.Json(entry);
        }
        private void PopulatePageValues(EntryEditModel entryEditModel)
        {
            var page = this.GetPage(entryEditModel.PageId);

            entryEditModel.PageId = page.Id;
            entryEditModel.PageTitle = page.Title;
            entryEditModel.PageColor = page.HtmlColor;
        }
 private void MapBasicProperties(Entry entry, EntryEditModel editModel)
 {
     entry.Body = editModel.Body;
     entry.Deleted = editModel.Deleted;
     entry.PageId = editModel.PageId;
     entry.Published = editModel.Published;
     entry.Tags = new Collection<string>(editModel.Tags);
     entry.Title = editModel.Title;
 }
        public void New_database_entry_has_slug_set_based_on_title()
        {
            Mapper.Reset();
            AutoMapperConfig.RegisterMappings();

            var testableStore = new TestableStore();

            var entryEditModel = new EntryEditModel();
            entryEditModel.Title = "Foo Title";

            string expectedSlug = "foo-title";

            using (var session = testableStore.OpenSession())
            {
                var entry = new Entry();

                var entryEditModelToEntryMapper = new EntryEditModelToEntryMapper(session);
                entryEditModelToEntryMapper.Map(entry, entryEditModel);

                Assert.Equal(expectedSlug, entry.Slug);
            }

            Mapper.Reset();
        }
        public void Last_modified_date_updates()
        {
            Mapper.Reset();
            AutoMapperConfig.RegisterMappings();

            var testableStore = new TestableStore();

            var entryEditModel = new EntryEditModel
            {
                LastModifiedAtUtc = DateTimeOffset.MinValue
            };

            using (var session = testableStore.OpenSession())
            {
                var entry = new Entry();

                var entryEditModelToEntryMapper = new EntryEditModelToEntryMapper(session);
                entryEditModelToEntryMapper.Map(entry, entryEditModel);

                Assert.NotEqual(entryEditModel.LastModifiedAtUtc, entry.LastModifiedAtUtc);
            }

            Mapper.Reset();
        }
        public void Published_date_maps()
        {
            Mapper.Reset();
            AutoMapperConfig.RegisterMappings();

            var testableStore = new TestableStore();

            var pubDate = DateTimeOffset.MinValue;

            using (var session = testableStore.OpenSession())
            {
                var entryEditModel = new EntryEditModel
                {
                    PublishedAtUtc = pubDate
                };

                var entry = new Entry();

                var entryEditModelToEntryMapper = new EntryEditModelToEntryMapper(session);
                entryEditModelToEntryMapper.Map(entry, entryEditModel);

                Assert.Equal(pubDate, entry.PublishedAtUtc);
            }

            Mapper.Reset();
        }
 private static void UpdateTimestamps(Entry entry, EntryEditModel entryEditModel)
 {
     entry.LastModifiedAtUtc = DateTimeOffset.UtcNow;
     entry.PublishedAtUtc = entryEditModel.PublishedAtUtc;
 }
 public void Map(Entry entry, EntryEditModel entryEditModel)
 {
     MapBasicProperties(entry, entryEditModel);
     SetSlug(entry);
     UpdateTimestamps(entry, entryEditModel);
 }
 private void PopulatePossiblePages(EntryEditModel entryEditModel)
 {
     entryEditModel.PossiblePages = this.GetPossiblePages();
 }
 private void ApplyEntryEditModelToEntry(Entry entry, EntryEditModel editModel)
 {
     var mapper = new EntryEditModelToEntryMapper(this.session);
     mapper.Map(entry, editModel);
 }
        private static bool IsNewEntry(EntryEditModel editModel)
        {
            if (string.IsNullOrEmpty(editModel.Id))
            {
                return true;
            }

            return false;
        }