public void SimpleInput_Dash()
        {
            var slug = new Slug("a-c");

            Assert.AreEqual("a-c", slug.GenerateSlug());
            Assert.AreEqual("a-c", slug.GenerateSlug(true));
        }
        public void SimpleInput_LowerCase()
        {
            var slug = new Slug("aBc");

            Assert.AreEqual("abc", slug.GenerateSlug());
            Assert.AreEqual("abc", slug.GenerateSlug(true));
        }
        public void SimpleInput_SpecialChars(string input)
        {
            var slug = new Slug(input);

            Assert.AreEqual("jackjones", slug.GenerateSlug());
            Assert.AreEqual("jackjones", slug.GenerateSlug(true));
        }
Пример #4
0
        public void OnlySpecialChars()
        {
            var slug = new Slug("!@#%!");

            Assert.IsNull(slug.GenerateSlug());
            Assert.IsTrue(Guid.TryParse(slug.GenerateSlug(true), out _));
        }
Пример #5
0
        public async Task <IActionResult> PutCategory([FromRoute] int id, [FromBody] CategoryViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != source.CategoryId)
            {
                return(BadRequest());
            }
            try
            {
                var category = await _categoryRepository.Find(id);

                category.Name     = source.Name;
                category.IsActive = source.IsActive;
                category.Slug     = Slug.GenerateSlug(source.Name);

                await _categoryRepository.Update(category);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await _categoryRepository.Exists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw new ApiException(HttpStatusCode.BadRequest, "some thing went wrong with update! Please contact with your administrator");
                }
            }
            return(NoContent());
        }
Пример #6
0
        public async Task <IActionResult> PostTopic()
        {
            var source = JsonConvert.DeserializeObject <PostTopicViewModel>(Request.Form["source"]);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (await _topicRepository.Exists(source.Title, source.LessonId))
            {
                return(BadRequest(new { errors = "Already Exists" }));
            }
            Topic target = new Topic
            {
                Slug      = Slug.GenerateSlug(source.Title),
                LessonId  = source.LessonId,
                Title     = source.Title,
                IsActive  = source.IsActive,
                CreatedOn = DateTime.Now,
                RowId     = Guid.NewGuid()
            };

            var result = await _topicRepository.Add(target);

            await StoreToAzureTable(source, target);

            return(CreatedAtAction("getCategory", new { id = result.TopicId }, source));
        }
Пример #7
0
        public void NullList()
        {
            var slug = new Slug("a b");

            slug.SetExistingSlugs(null);
            Assert.AreEqual("a-b", slug.GenerateSlug());
        }
Пример #8
0
 public ActionResult Edit(int id, Category c)
 {
     c.MetaLink = Slug.GenerateSlug(c.CategoryName);
     if (ModelState.IsValid)
     {
         try
         {
             if (_Category.Edit(c))
             {
                 TempData["msg"] = new ResponseMessage()
                 {
                     Type    = "alert-success",
                     Message = "Sửa Thành Công ID = " + c.CategoryId,
                 };
                 return(RedirectToAction("Index"));
             }
             ModelState.AddModelError("", "Có Lỗi Trong Quá Trình Sửa Dữ Liệu");
             return(View());
         }
         catch
         {
             ModelState.AddModelError("", "Có Lỗi Trong Quá Trình Sửa Dữ Liệu");
             return(View());
         }
     }
     return(View());
 }
Пример #9
0
        public void EmptyList()
        {
            var slug = new Slug("a b");

            slug.SetExistingSlugs(new List <string>());
            Assert.AreEqual("a-b", slug.GenerateSlug());
        }
        public void string_to_slug_remain_CapitalLetters()
        {
            string input    = "JohnDoe";
            string actual   = Slug.GenerateSlug(input);
            string expected = "JohnDoe";

            Assert.AreEqual(expected, actual);
        }
Пример #11
0
        public ActionResult Create([ModelBinder(typeof(CreateOrEditPostCustomDataBinder))] CreateOrEditPostModel model)
        {
            model.Post.UrlSlug = Slug.GenerateSlug(model.Post.Title);

            _postRepository.Add(model.Post);
            _blogRepository.AddPost(model.Blog.Id, model.Post);
            return(RedirectToAction("Details", "Blog"));
        }
        public void string_to_slug_remove_polish_letters()
        {
            string input    = "PawełSołtysiak";
            string actual   = Slug.GenerateSlug(input);
            string expected = "PaweSotysiak";

            Assert.AreEqual(expected, actual);
        }
        public void string_to_slug_replacing_spaces_with_underscores()
        {
            string input = "john doe";

            string actual   = Slug.GenerateSlug(input);
            string expected = "john_doe";

            Assert.AreEqual(expected, actual);
        }
Пример #14
0
        public void MatchingWrongCase()
        {
            var slug = new Slug("a b");

            slug.SetExistingSlugs(new List <string>
            {
                "A-B"
            });
            Assert.AreEqual("a-b-1", slug.GenerateSlug());
        }
Пример #15
0
        public void MatchingNumbered()
        {
            var slug = new Slug("a b");

            slug.SetExistingSlugs(new List <string>
            {
                "a-b",
                "a-b-1",
            });
            Assert.AreEqual("a-b-2", slug.GenerateSlug());
        }
Пример #16
0
        public void NotMatching()
        {
            var slug = new Slug("a b");

            slug.SetExistingSlugs(new List <string>
            {
                "a-c",
                "c-a"
            });
            Assert.AreEqual("a-b", slug.GenerateSlug());
        }
        public ActionResult Create([Bind(Include = "Id,Title")] Blog blog)
        {
            if (ModelState.IsValid)
            {
                blog.UrlSlug = Slug.GenerateSlug(blog.Title);
                var user = _userRepository.FindByUserName(User.Identity.Name);
                _blogRepository.AddToUser(blog, user);
                return(RedirectToAction("Details", new { blogSlug = blog.UrlSlug }));
            }

            return(View(blog));
        }
Пример #18
0
        public ActionResult Create(Product p)
        {
            p.CreateDate = DateTime.Now;
            string url = Slug.GenerateSlug(p.ProductName);

            p.MetaLink         = url;
            p.CoutView         = 0;
            ViewBag.ProviderId = new SelectList(_Provider.GetAll(), "ProviderId", "ProviderName");
            ViewBag.CatPro     = _Category.GetAll();
            ViewBag.Color      = _Color.GetAll();
            ViewBag.Size       = _Size.GetAll();
            ViewBag.Attribute  = _Attribute.GetAll();
            ViewBag.AttrTypes  = _Attr.GetAll().AsQueryable().Include(x => x.Attributes).AsEnumerable();
            if (p.CategoryProducts != null)
            {
                p.CategoryProducts.ToList().ForEach(x => x.ProductId = p.ProductId);
            }
            if (p.ProductSizes != null)
            {
                p.ProductSizes.ToList().ForEach(x => x.ProductId = p.ProductId);
            }
            if (p.ProductColors != null)
            {
                p.ProductColors.ToList().ForEach(x => x.ProductId = p.ProductId);
            }

            if (p.ProductAttributes != null)
            {
                p.ProductAttributes.ToList().ForEach(x => x.ProductId = p.ProductId);
            }
            if (ModelState.IsValid)
            {
                if (_Product.GetAll().Any(x => x.ProductName.ToLower().Equals(p.ProductName.ToLower())))
                {
                    ModelState.AddModelError("", "Tên Này Đã Tồn Tại !");
                    return(View());
                }
                if (_Product.Add(p))
                {
                    TempData["msg"] = new ResponseMessage()
                    {
                        Type    = "alert-success",
                        Message = "Thêm Thành Công Sản Phẩm Có ID = " + p.ProductId,
                    };
                    return(RedirectToAction("index"));
                }
                ModelState.AddModelError("", "Có Lỗi Trong Quá Trình Thêm Mới");
                return(View());
            }
            return(View());
        }
Пример #19
0
        public async Task <IActionResult> PutTopic([FromRoute] int id)
        {
            var source = JsonConvert.DeserializeObject <PostTopicViewModel>(Request.Form["source"]);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != source.TopicId)
            {
                return(BadRequest());
            }

            var target = await _topicRepository.Find(id);

            target.Slug     = Slug.GenerateSlug(source.Title);
            target.LessonId = source.LessonId;
            target.IsActive = source.IsActive;
            target.Title    = source.Title;

            if (target == null)
            {
                return(NotFound());
            }

            try
            {
                await _topicRepository.Update(target);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await _topicRepository.Exists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            if (target != null)
            {
                await StoreToAzureTable(source, target);
            }

            return(NoContent());
        }
Пример #20
0
        public async Task <IActionResult> PutCourse([FromRoute] int id, [FromBody] PostCourseViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != source.CourseId)
            {
                return(BadRequest());
            }

            var course = await _courseRepository.Find(id);

            if (course == null)
            {
                return(NotFound());
            }
            try
            {
                course.Slug       = Slug.GenerateSlug(source.Name);
                course.CategoryId = source.CategoryId;
                course.Name       = source.Name;
                course.IsActive   = source.IsActive;
                await _courseRepository.Update(course);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await _courseRepository.Exists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw new ApiException(HttpStatusCode.BadRequest, "some thing went wrong with update!");
                }
            }

            await StorageHelper.InsertOrMerge(course.RowId.ToString(), course.CourseId.ToString(), source.Description);

            return(NoContent());
        }
        public async Task <IActionResult> PutLesson([FromRoute] int id, [FromBody] PostLessonViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != source.LessonId)
            {
                return(BadRequest());
            }

            var lesson = await _lessonRepository.Find(id);

            if (lesson == null)
            {
                return(NotFound());
            }

            lesson.Slug      = Slug.GenerateSlug(source.Name);
            lesson.CourseId  = source.CourseId;
            lesson.SortOrder = source.SortOrder;
            lesson.Name      = source.Name;
            lesson.IsActive  = source.IsActive;

            try
            {
                await _lessonRepository.Update(lesson);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await _lessonRepository.Exists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
            return(NoContent());
        }
        public async Task <IActionResult> PostLesson([FromBody] PostLessonViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            //if (await _lessonRepository.Exists(source.Name))
            //{
            //    return BadRequest(new { errors = "Already Exists" });
            //}
            var result = await _lessonRepository.Add(new Lesson
            {
                Slug      = Slug.GenerateSlug(source.Name),
                CourseId  = source.CourseId,
                Name      = source.Name,
                IsActive  = source.IsActive,
                SortOrder = source.SortOrder
            });

            return(CreatedAtAction("getLesson", new { id = result.LessonId }, source));
        }
Пример #23
0
        public async Task <IActionResult> PostCourse([FromBody] PostCourseViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (await _courseRepository.Exists(source.Name))
            {
                return(BadRequest(new { errors = "Already Exists" }));
            }
            var target = await _courseRepository.Add(new Course
            {
                CategoryId = source.CategoryId,
                Slug       = Slug.GenerateSlug(source.Name),
                Name       = source.Name,
                IsActive   = source.IsActive,
            });

            await StorageHelper.InsertOrMerge(target.RowId.ToString(), target.CourseId.ToString(), source.Description);

            return(CreatedAtAction("getCourse", new { id = target.CourseId }, source));
        }
        public ActionResult Create([ModelBinder(typeof(CreateOrEditPostCustomDataBinder))] CreateOrEditPostModel model)
        {
            if (string.IsNullOrWhiteSpace(model.Post.Title))
            {
                ModelState.AddModelError("Post.Title", "You must specify a title.");
            }

            if (string.IsNullOrWhiteSpace(model.Post.Content))
            {
                ModelState.AddModelError("Post.Content", "You must specify a content.");
            }

            if (!ModelState.IsValid)
            {
                return(View());
            }
            model.Post.UrlSlug = Slug.GenerateSlug(model.Post.Title);

            _postRepository.Add(model.Post);
            _blogRepository.AddPost(model.Blog.Id, model.Post);
            return(RedirectToAction("Details", "Blog"));
        }
Пример #25
0
 public ActionResult Create(Category c)
 {
     c.MetaLink = Slug.GenerateSlug(c.CategoryName);
     if (ModelState.IsValid)
     {
         if (_Category.GetAll().Any(x => x.CategoryName.ToLower().Equals(c.CategoryName.ToLower())))
         {
             ModelState.AddModelError("", "Tên Này Đã Tồn Tại !");
             return(View());
         }
         if (_Category.Add(c))
         {
             TempData["msg"] = new ResponseMessage()
             {
                 Type    = "alert-success",
                 Message = "Thêm Thành Công ID = " + c.CategoryId,
             };
             return(RedirectToAction("index"));
         }
         ModelState.AddModelError("", "Có Lỗi Trong Quá Trình Thêm Mới");
         return(View());
     }
     return(View());
 }
        public void MaxLength()
        {
            var slug = new Slug("abcdefgh", 2);

            Assert.AreEqual("ab", slug.GenerateSlug());
        }
        protected override void Seed(PSBlogContext context)
        {
            Role administrator = new Role()
            {
                Name = Settings.Default.SuperAdminRole,
            };

            context.Roles.Add(administrator);

            User admin = new User
            {
                UserName = Settings.Default.SuperAdminName,
                Password = SHA.CreateSHA1Hash("milk"),
                Roles    = new List <Role>()
                {
                    administrator
                }
            };

            context.Users.Add(admin);

            User normalUser = new User
            {
                UserName = "******",
                Password = SHA.CreateSHA1Hash("milk"),
            };

            context.Users.Add(normalUser);

            Tag tag = new Tag()
            {
                Name = "mytag"
            };

            context.Tags.Add(tag);

            Comment comment1 = new Comment()
            {
                Content = "Comment#1",
                User    = admin
            };

            Comment comment2 = new Comment()
            {
                Content = "Comment#2",
                User    = normalUser
            };

            context.Comments.Add(comment1);
            context.Comments.Add(comment2);

            string paragraph1 = string.Format("<p>{0}</p>", Ipsum.GetPhrase(50));
            string paragraph2 = string.Format("<p>{0}</p>", Ipsum.GetPhrase(75));
            Post   post       = new Post
            {
                Title      = "Hello, World",
                Content    = paragraph1 + paragraph2,
                DatePosted = DateTime.Now,
                Tags       = new List <Tag> {
                    tag
                },
                Comments = new List <Comment> {
                    comment1, comment2
                }
            };

            post.UrlSlug = Slug.GenerateSlug(post.Title);
            context.Posts.Add(post);

            Blog defaultBlog = new Blog
            {
                Title = "I <3 Blogs",
                Owner = admin,
                Posts = new List <Post> {
                    post
                }
            };

            defaultBlog.UrlSlug = Slug.GenerateSlug(defaultBlog.Title);

            context.Blogs.Add(defaultBlog);

            context.SaveChanges();
        }
Пример #28
0
        public async Task <IActionResult> PostCategory([FromBody] CategoryViewModel source)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            if (await _categoryRepository.Exists(source.Name))
            {
                return(BadRequest(new { errors = "Already Exists" }));
            }
            var result = await _categoryRepository.Add(new Category { Name = source.Name, IsActive = source.IsActive, Slug = Slug.GenerateSlug(source.Name) });

            return(CreatedAtAction("getCategory", new { id = result.CategoryId }, source));
        }
Пример #29
0
        public ActionResult Edit(int id, Product p)
        {
            ViewBag.ProviderId = new SelectList(_Provider.GetAll(), "ProviderId", "ProviderName");
            ViewBag.CatPro     = _Category.GetAll();
            ViewBag.Color      = _Color.GetAll();
            ViewBag.Size       = _Size.GetAll();
            ViewBag.Attribute  = _Attribute.GetAll();
            ViewBag.CatProduct = _CategoryProduct.GetBy(x => x.ProductId == id);
            ViewBag.AttrTypes  = _Attr.GetAll().AsQueryable().Include(x => x.Attributes).AsEnumerable();


            if (p.CategoryProducts != null)
            {
                _CategoryProduct.RemoveRange(_CategoryProduct.GetBy(x => x.ProductId == p.ProductId));
                p.CategoryProducts.ToList().ForEach(x => x.ProductId = p.ProductId);
                _CategoryProduct.AddRange(p.CategoryProducts);
            }
            if (p.ProductColors != null)
            {
                _proColor.RemoveRange(_proColor.GetBy(x => x.ProductId == p.ProductId));
                p.ProductColors.ToList().ForEach(x => x.ProductId = p.ProductId);
                _proColor.AddRange(p.ProductColors);
            }
            if (p.ProductSizes != null)
            {
                _proSize.RemoveRange(_proSize.GetBy(x => x.ProductId == p.ProductId));
                p.ProductSizes.ToList().ForEach(x => x.ProductId = p.ProductId);
                _proSize.AddRange(p.ProductSizes);
            }
            if (p.ProductAttributes != null)
            {
                _proAtt.RemoveRange(_proAtt.GetBy(x => x.ProductId == p.ProductId));
                p.ProductAttributes.ToList().ForEach(x => x.ProductId = p.ProductId);
                _proAtt.AddRange(p.ProductAttributes);
            }
            if (ModelState.IsValid)
            {
                p.CreateDate = DateTime.Now;
                string url = Slug.GenerateSlug(p.ProductName);
                p.MetaLink = url;
                p.CoutView = 1;
                try
                {
                    if (_Product.Edit(p))
                    {
                        return(RedirectToAction("Index"));
                    }
                    ViewBag.getCatPro   = _Product.GetAll().AsQueryable().Include(x => x.CategoryProducts).FirstOrDefault(x => x.ProductId == id);
                    ViewBag.getProColor = _Product.GetAll().AsQueryable().Include(x => x.ProductColors).FirstOrDefault(x => x.ProductId == id);
                    ViewBag.getProSize  = _Product.GetAll().AsQueryable().Include(x => x.ProductSizes).FirstOrDefault(x => x.ProductId == id);
                    ModelState.AddModelError("", "Lỗi trong quá trình sửa");
                    return(View(p));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                    ViewBag.getCatPro   = _Product.GetAll().AsQueryable().Include(x => x.CategoryProducts).FirstOrDefault(x => x.ProductId == id);
                    ViewBag.getProColor = _Product.GetAll().AsQueryable().Include(x => x.ProductColors).FirstOrDefault(x => x.ProductId == id);
                    ViewBag.getProSize  = _Product.GetAll().AsQueryable().Include(x => x.ProductSizes).FirstOrDefault(x => x.ProductId == id);
                    return(View(p));
                }
            }

            return(View(p));
        }