Пример #1
0
        public void All_ReturnsAllItems()
        {
            //Arrange
            var expectedItemCount = dbContext.Blogs.Count();

            //Act
            var items = repository.All();

            //Assert
            Assert.NotNull(items);
            Assert.NotEmpty(items);
            Assert.Equal(expectedItemCount, items.ToList().Count);
        }
Пример #2
0
        public async Task CanDoCrudOnBlogs()
        {
            var allBlogs = await _db.All();

            var cnt = allBlogs.Count;

            // add
            var blog = new Blog {
                Title = "blog1", Description = "blog one"
            };
            await _db.Add(blog);

            allBlogs = await _db.All();

            Assert.Equal(allBlogs.Count, cnt + 1);

            var blogs = await _db.Find(b => b.Title == "blog1");

            var added = blogs.FirstOrDefault();

            Assert.NotNull(added);
            Assert.True(added.Id > 0);

            // update
            added.Description = "blog one updated";
            await _db.Update(added);

            blogs = await _db.Find(b => b.Title == "blog1");

            added = blogs.FirstOrDefault();

            Assert.Equal(added.Description, "blog one updated");

            // delete
            await _db.Delete(added.Id);

            allBlogs = await _db.All();

            Assert.Equal(allBlogs.Count, cnt);
        }
Пример #3
0
 public TagCount[] GetCount()
 {
     return(_blogRepository.All <TagCountEntity>().Select(AutoMapper.Mapper.Map <TagCountEntity, TagCount>).ToArray());
 }
        public ServiceResult <string> Save(BlogEntryModel entryModel)
        {
            if (entryModel == null)
            {
                throw new ArgumentNullException("entryModel");
            }
            entryModel.RebuildTagsFromString();

            BlogEntry entry = null;

            if (!Exists(entryModel.Slug))
            {
                entry = new BlogEntry
                {
                    Slug        = entryModel.Title.ToUrlSlug(),
                    DateCreated = DateTime.Now
                };

                if (Exists(entry.Slug))
                {
                    return(ServiceResult <string> .Error("Sorry, a post with that slug already exists."));
                }
            }
            else
            {
                entry             = AutoMapper.Mapper.Map <BlogEntryEntity, BlogEntry>(_blogRepository.Single <BlogEntryEntity>(b => b.Slug == entryModel.Slug));
                entry.DateCreated = DateTime.ParseExact(entryModel.Date, DateSettings.DateStringFormat(), Thread.CurrentThread.CurrentCulture);

                var slugChanged =
                    !string.Equals(entryModel.Slug, entryModel.NewSlug, StringComparison.InvariantCultureIgnoreCase) &&
                    !string.IsNullOrWhiteSpace(entryModel.NewSlug);

                if (slugChanged)
                {
                    if (Exists(entryModel.NewSlug))
                    {
                        return(ServiceResult <string> .Error("Sorry, a post with that slug already exists."));
                    }
                    //delete current one as slug is the ID will create / save a new one.
                    Delete(entryModel.Slug);
                    entry.Slug = entryModel.NewSlug.ToLowerInvariant();
                }
            }

            if (!IsValidSlug(entry.Slug))
            {
                return(ServiceResult <string> .Error("That's not a valid slug. Only letters, numbers and hypens are allowed."));
            }

            entry.Title            = entryModel.Title;
            entry.Markdown         = entryModel.Markdown;
            entry.Summary          = CreateSummary(entryModel.Markdown);
            entry.IsPublished      = entryModel.IsPublished;
            entry.IsCodePrettified = entryModel.IsCodePrettified;

            entry.Author = _blogUserService.FindByName(_currentUserService.GetUserName()).DisplayName;

            //update all the tags.
            var tags = _blogRepository.All <TagEntity>().ToArray();

            var distinctTags = entryModel.Tags.Distinct();
            var trimmedTags  = distinctTags.Select(t => t.Trim().ToLowerInvariant()).ToArray();
            var matchedTags  = tags.Where(t => trimmedTags.Contains(t.Name.ToLowerInvariant())).ToArray();

            var newTags = trimmedTags.Where(t => tags.All(tag => tag.Name.ToLowerInvariant() != t))
                          .Select(t => new TagEntity {
                Id = 0, Name = t
            }).ToArray();

            //ensure new tags are added to the list of known tags.
            foreach (var newTag in newTags)
            {
                _blogRepository.Add(newTag);
            }

            var actualTags = newTags.Union(matchedTags);

            var entryEntity = AutoMapper.Mapper.Map <BlogEntry, BlogEntryEntity>(entry);

            entryEntity.Tags.Clear();
            entryEntity.Tags.AddRange(actualTags);

            _blogRepository.Save(entryEntity, b => b.Slug == entry.Slug);

            _blogTagService.RemoveUnsedTags();
            _blogTagService.UpdateTagCount();

            return(ServiceResult <string> .Success(entry.Slug));
        }
Пример #5
0
 public async Task <ActionResult> Get()
 {
     return(Json(await _db.All()));
 }