Esempio n. 1
0
        public void UpdatePost_PublishedToDraft_TitleIsUpdated_DoNotUpdateSlug()
        {
            BlogDataStore    testDataStore    = new BlogDataStore(new FakeFileSystem());
            SlugGenerator    slugGenerator    = new SlugGenerator(testDataStore);
            ExcerptGenerator excerptGenerator = new ExcerptGenerator(140);

            Post post = new Post {
                Title    = "Title",
                Slug     = "Title",
                IsPublic = true,
            };

            testDataStore.SavePost(post);

            EditModel testEditModel = new EditModel(testDataStore, slugGenerator, excerptGenerator);

            testEditModel.PageContext = new PageContext();
            testEditModel.EditedPost  = new EditModel.EditedPostModel {
                Title   = "Edited Title",
                Excerpt = "Excerpt",
            };

            testEditModel.OnPostSaveDraft(post.Id.ToString("N"));

            post = testDataStore.GetPost(post.Id.ToString("N"));

            Assert.Equal("Title", post.Slug);
        }
Esempio n. 2
0
 public Team(Guid competitionId, string name, string abbreviation = null)
 {
     this.CompetitionId = competitionId;
     this.Name          = name;
     this.Abbreviation  = abbreviation != null ? abbreviation : string.Join("", name.Where(char.IsUpper).ToArray());
     this.Slug          = SlugGenerator.Generate(name);
 }
        public void GenerateSlug_Appends_number_to_text_if_original_text_slugged_exists_Starting_at_supplied_seed_value()
        {
            //Arrange
            var slugGenerator = new SlugGenerator(new SlugGeneratorOptions {
                IterationSeedValue = 3
            }, _fakeSlugStore, _fakeSlugAlgorithm);                                                                                        //start at 3

            A.CallTo(() => _fakeSlugAlgorithm.Slug("Some text"))
            .Returns("some-text");

            A.CallTo(() => _fakeSlugStore.Exists("some-text"))
            .Returns(true);

            A.CallTo(() => _fakeSlugAlgorithm.Slug("Some text 3"))
            .Returns("some-text-3");

            //Act
            var result = slugGenerator.GenerateSlug("Some text");

            //Assert
            Assert.That(result, Is.EqualTo("some-text-3"));

            A.CallTo(() => _fakeSlugAlgorithm.Slug("Some text 1"))
            .MustNotHaveHappened();

            A.CallTo(() => _fakeSlugAlgorithm.Slug("Some text 2"))
            .MustNotHaveHappened();
        }
Esempio n. 4
0
        public void UpdatePost_PreviouslyPublishedDraftToPublished_TitleIsUpdated_UpdateSlug()
        {
            var testDataStore    = new BlogDataStore(new FakeFileSystem());
            var slugGenerator    = new SlugGenerator(testDataStore);
            var excerptGenerator = new ExcerptGenerator(140);

            var post = new Post {
                Title    = "Title",
                Slug     = "Title",
                IsPublic = false,
            };

            testDataStore.SavePost(post);

            var testEditModel = new EditModel(testDataStore, slugGenerator, excerptGenerator);

            testEditModel.PageContext = new PageContext();
            testEditModel.EditedPost  = new EditModel.EditedPostModel {
                Title   = "Edited Title",
                Excerpt = "Excerpt",
            };

            testEditModel.OnPostPublish(post.Id.ToString("N"), true);

            post = testDataStore.GetPost(post.Id.ToString("N"));

            Assert.Equal("Edited-Title", post.Slug);
        }
Esempio n. 5
0
        public void OneTimeSetUp()
        {
            _fakeSlugStore     = A.Fake <ISlugStore>();
            _fakeSlugAlgorithm = A.Fake <ISlugAlgorithm>();

            _slugGenerator = new SlugGenerator(_fakeSlugStore, _fakeSlugAlgorithm);
        }
Esempio n. 6
0
        public void UpdatePost_PublishedToPublished_TitleIsUpdated_UpdateSlug()
        {
            BlogDataStore    testDataStore    = new BlogDataStore(new FakeFileSystem());
            SlugGenerator    slugGenerator    = new SlugGenerator(testDataStore);
            ExcerptGenerator excerptGenerator = new ExcerptGenerator(140);

            Post post = new Post {
                Title    = "Title",
                Slug     = "Title",
                IsPublic = true,
                PubDate  = DateTimeOffset.Now,
            };

            testDataStore.SavePost(post);

            EditModel testEditModel = new EditModel(testDataStore, slugGenerator, excerptGenerator);

            testEditModel.PageContext = new PageContext();
            testEditModel.EditedPost  = new EditModel.EditedPostModel {
                Title   = "Edited Title",
                Excerpt = "Excerpt",
            };

            testEditModel.OnPostPublish(post.Id, true);

            post = testDataStore.GetPost(post.Id);

            Assert.Equal("Edited-Title", post.Slug);
        }
Esempio n. 7
0
        public async Task <ActionResult <ShortLinkDto> > CreateAsync(ShortLinkDto shortLinkDto)
        {
            if (await _skimRepository.SlugExistsAsync(shortLinkDto.Slug))
            {
                return(Conflict());
            }

            // If user provided no slug, generate a random one
            if (string.IsNullOrWhiteSpace(shortLinkDto.Slug))
            {
                for (int length = 2;; length++)
                {
                    shortLinkDto.Slug = SlugGenerator.Generate(length);
                    if (!await _skimRepository.SlugExistsAsync(shortLinkDto.Slug))
                    {
                        break;
                    }
                }
            }

            await _skimRepository.CreateShortLinkAsync(_mapper.Map <ShortLink>(shortLinkDto));

            return(CreatedAtAction(actionName: nameof(GetBySlugAsync),
                                   routeValues: new { slug = shortLinkDto.Slug },
                                   value: shortLinkDto));
        }
Esempio n. 8
0
        public void UpdatePost_PreviouslyPublishedDraftToPublished_DoNotUpdatePubDate()
        {
            var testDataStore    = new BlogDataStore(new FakeFileSystem());
            var slugGenerator    = new SlugGenerator(testDataStore);
            var excerptGenerator = new ExcerptGenerator(140);

            var post = new Post {
                Title    = "Title",
                Slug     = "Title",
                IsPublic = false,
                PubDate  = new DateTimeOffset(new DateTime(1997, 7, 3), TimeSpan.Zero),
            };

            testDataStore.SavePost(post);

            var testEditModel = new EditModel(testDataStore, slugGenerator, excerptGenerator);

            testEditModel.PageContext = new PageContext();
            testEditModel.EditedPost  = new EditModel.EditedPostModel {
                Title   = "Edited Title",
                Excerpt = "Excerpt",
            };

            testEditModel.OnPostPublish(post.Id.ToString("N"), true);

            post = testDataStore.GetPost(post.Id.ToString("N"));

            Assert.Equal(new DateTimeOffset(new DateTime(1997, 7, 3), TimeSpan.Zero), post.PubDate);
        }
Esempio n. 9
0
        public IActionResult Edit(ShelfDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var userId = User.GetUserId();

            var shelf = _context.Shelves
                        .FirstOrDefault(s => s.Id == dto.Id &&
                                        s.CreatedById == userId);

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

            shelf.Title = dto.Title;
            shelf.Slug  = SlugGenerator.GenerateSlug(dto.Title);

            _context.SaveChanges();

            return(Ok());
        }
        public void CreateSlug_TitleContainsInvalidChars_RemoveInvalidCharsInSlug(string input, string expected)
        {
            var testDataStore     = new BlogDataStore(new FakeFileSystem());
            var testSlugGenerator = new SlugGenerator(testDataStore);

            Assert.Equal(expected, testSlugGenerator.CreateSlug(input));
        }
Esempio n. 11
0
        private static void UseSqlServerSlugStore()
        {
            Console.Clear();


            SetupLocalDbIfRequired();

            var slugGenerator = new SlugGenerator(
                new SlugGeneratorOptions {
                IterationSeedValue = 1000
            },
                new SqlServerSlugStore("DefaultConnection"));

            var stopwatch = Stopwatch.StartNew();

            for (var i = 0; i < 10000; i++)
            {
                var slug = slugGenerator.GenerateSlug("Some text that needs slugging " + i);
            }

            stopwatch.Stop();

            Console.WriteLine("Took " + stopwatch.ElapsedMilliseconds + "ms");
            Console.WriteLine("");
            Console.WriteLine("Press enter to return to main menu");
            Console.ReadLine();

            ShowMainMenu();
        }
Esempio n. 12
0
        public IActionResult Edit(ItemDto dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var item = _unitOfWork.Items.GetItem(dto.Id);

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

            if (item.CreatedById != User.GetUserId())
            {
                return(Forbid());
            }

            item.Title = dto.Title;
            item.Slug  = SlugGenerator.GenerateSlug(dto.Title);

            _unitOfWork.Items.Save(item);
            _unitOfWork.Complete();

            return(Ok());
        }
Esempio n. 13
0
        public async Task <string> CreatePasteAsync(string text, string key)
        {
            var encryptedText = _cipherService.Encrypt(text, key);

            var slug = string.Empty;

            for (var length = 2; length < 100; length++)
            {
                slug = SlugGenerator.Generate(length);
                if (!await _context.Pastes.AnyAsync(s => s.Slug == slug))
                {
                    break;
                }
            }

            await _context.Pastes.AddAsync(new Paste
            {
                Slug          = slug,
                EncryptedText = encryptedText
            });

            await _context.SaveChangesAsync();

            return(slug);
        }
Esempio n. 14
0
        public void UpdatePost_TitleIsUpdated_UpdateSlug()
        {
            IFileSystem      testFileSystem   = new FakeFileSystem();
            BlogDataStore    testDataStore    = new BlogDataStore(new FakeFileSystem());
            SlugGenerator    slugGenerator    = new SlugGenerator(testDataStore);
            ExcerptGenerator excerptGenerator = new ExcerptGenerator();

            Post post = new Post()
            {
                Slug     = "Title",
                IsPublic = true,
                PubDate  = DateTimeOffset.Now,
            };

            testDataStore.SavePost(post);

            EditedPostModel editedPost = new EditedPostModel()
            {
                Title = "Edited Title",
            };

            EditModel model = new EditModel(testDataStore, slugGenerator, excerptGenerator);

            model.OnPostPublish(post.Id, true);
            testDataStore.UpdatePost(post, post.IsPublic);

            Assert.True(testFileSystem.FileExists($"BlogFiles\\Posts\\{post.PubDate.ToFileTime()}_{post.Id}.xml"));
            Post result = testDataStore.CollectPostInfo($"BlogFiles\\Posts\\{post.PubDate.ToFileTime()}_{post.Id}.xml");

            Assert.Equal("Edited-Title", post.Slug);
        }
Esempio n. 15
0
        public void GenerateSlug_ShouldTrimResultTo100Characters(string fileName)
        {
            var slugGenerator     = new SlugGenerator();
            var fileNameToDisplay = slugGenerator.Get(fileName);

            Assert.True(fileNameToDisplay.Length <= 100);
        }
Esempio n. 16
0
        public void ApplyChanges(FieldGroup fg, IBusinessLogicFacade bl)
        {
            var target = fg;
            var source = this;


            if (target.Name == null)
            {
                target.Slug = SlugGenerator.GenerateSlug(bl, source.Name, "fieldGroup");
            }
            if (target.Name != null && !target.Name.Equals(source.Name))
            {
                target.Slug = SlugGenerator.GenerateSlug(bl, source.Name, "fieldGroup");
            }
            target.Name = source.Name;

            target.Fields = new List <Field>();
            source.Fields.ForEach(i =>
            {
                var f = bl.CreateField();
                i.ApplyChanges(f, bl);
                target.Fields.Add(f);
            });
            target.IsCountable = source.IsCountable;
            target.IsActive    = source.IsActive;
        }
Esempio n. 17
0
        public async Task <IActionResult> Create(CreatePostVM salePostModel)
        {
            if (this.HasAlert)
            {
                this.SetAlertModel();
            }

            if (!this.ModelState.IsValid)
            {
                this.AddAlert(false, "An error has occured!");

                //this.LoadListSneakersDropdowns();
                return(this.View(salePostModel));
            }

            var post = _mapper.Map <SalePost>(salePostModel);

            post.UserId = this.userManager.GetUserId(this.User);

            post.Sneaker.Slug            = SlugGenerator.GenerateSlug(post.Sneaker.Name);
            post.Sneaker.PosterImageLink = await FileManager.SaveFile(this.hostingEnvironment, salePostModel.Sneaker.PosterImage);

            var rating = _mapper.Map <Rating>(salePostModel.Sneaker.Rating);

            rating.RatedById = this.userManager.GetUserId(this.User);
            rating.RatedOn   = DateTime.Now;

            post.Sneaker.SneakerRatings.Add(new SneakerRating {
                Rating = rating
            });

            foreach (var keyword in salePostModel.Sneaker.KeywordsString.Trim().Split(","))
            {
                post.Sneaker.Keywords.Add(new Keyword {
                    Name = keyword.Trim()
                });
            }

            try
            {
                await this.salePostService.Create(post);
            }
            catch (DbUpdateException e)
                when(e.InnerException is SqlException sqlEx &&
                     (sqlEx.Number == 2601 || sqlEx.Number == 2627))
                {
                    this.AddAlert(false, "Cannot insert duplicate sneaker!");

                    //TODO =>
                    //this.LoadListSneakersDropdowns();
                    return(this.View(salePostModel));
                }

            this.AddAlert(true, "Successfully added post!");

            return(this.RedirectToAction("Index", new PaginationVM {
                Page = 1, PageSize = 20
            }));
        }
Esempio n. 18
0
        public void ApplyChanges(Field fg, IBusinessLogicFacade bl)
        {
            var target = fg;
            var source = this;

            target.Name = source.Name;
            target.Slug = SlugGenerator.GenerateSlug(bl, source.Name, "field");
        }
Esempio n. 19
0
        public void ConvertTitleToSlug_WithNullEntry_ThrowsArgumentNullException()
        {
            //arrange
            var generator = new SlugGenerator(null);

            //act, assert
            UnitTestHelper.AssertThrowsArgumentNullException(() => generator.GetSlugFromTitle(null));
        }
Esempio n. 20
0
        public void ShouldGenerateValidUrl(
            string input,
            string expected)
        {
            var slugGenerator = new SlugGenerator();
            var decoded       = slugGenerator.Generate(input);

            Assert.Equal(expected, decoded);
        }
Esempio n. 21
0
        public void ShouldReplaceAllWhitespacesCorrectly(
            string input,
            string expected)
        {
            var slugGenerator = new SlugGenerator();
            var decoded       = slugGenerator.Generate(input);

            Assert.Equal(expected, decoded);
        }
Esempio n. 22
0
        public void CreateSlug_SlugIsUnique()
        {
            BlogDataStore testDataStore     = new BlogDataStore(new FakeFileSystem());
            SlugGenerator testSlugGenerator = new SlugGenerator(testDataStore);

            string slug = testSlugGenerator.CreateSlug("Test Title");

            Assert.Equal("Test-Title", slug);
        }
        public void GenerateSlugShouldTrimResult()
        {
            var input =
                "Входът може да бъде много много много много много много много много много много много много много много много много много дълъг тест ";
            var slugGenerator = new SlugGenerator();
            var result        = slugGenerator.GenerateSlug(input);

            Assert.True(result.Length <= 100);
        }
        public void GenerateSlugShouldWorkCorrectly()
        {
            var input         = "МВР: Свада в училище в ж.к.-„Западен парк“.";
            var expected      = "mvr-svada-v-uchilishte-v-jk-zapaden-park";
            var slugGenerator = new SlugGenerator();
            var result        = slugGenerator.GenerateSlug(input);

            Assert.Equal(expected, result);
        }
Esempio n. 25
0
File: Shelf.cs Progetto: olcay/om
        public Shelf(string createdById, string title)
        {
            CreatedById = createdById ?? throw new ArgumentNullException(nameof(createdById));
            Title       = title ?? throw new ArgumentNullException(nameof(title));

            Slug         = SlugGenerator.GenerateSlug(title);
            CreationDate = DateTime.UtcNow;
            UpdateDate   = DateTime.UtcNow;
        }
Esempio n. 26
0
        public async Task <ActionResult <Product> > Create(Product product)
        {
            var slug = SlugGenerator.Generate(product.Name);

            product.Slug          = slug;
            product.PriceDiscount = product.Price - (product.Price * product.Discount / 100);
            await _products.Create(product);

            return(CreatedAtAction(nameof(GetBySlug), new { slug = product.Slug }, product));
        }
Esempio n. 27
0
        private static async Task RunSqlServerSlugStore()
        {
            Console.Clear();

            var conn = @"Server=(localdb)\mssqllocaldb;Database=SlugHub_Test;Trusted_Connection=True;Integrated Security=True";

            SetupLocalDbIfRequired(conn);

            var slugGenerator = new SlugGenerator(
                new SlugGeneratorOptions {
                IterationSeedValue = 1000
            },
                new SqlServerSlugStore(conn));

            var stopwatch = Stopwatch.StartNew();

            Console.WriteLine("");
            Console.WriteLine("Creating slugs without grouping keys...");

            for (var i = 1; i <= 1000; i++)
            {
                var individualStopWatch = Stopwatch.StartNew();
                var slug = await slugGenerator.GenerateSlugAsync("Some text that needs slugging " + i);

                individualStopWatch.Stop();

                Console.Write($"\r{i} slugs created ({individualStopWatch.ElapsedMilliseconds}ms)");
            }

            stopwatch.Stop();

            Console.WriteLine("");
            Console.WriteLine("Took " + stopwatch.ElapsedMilliseconds + "ms");
            Console.WriteLine("");

            Console.WriteLine("Creating slugs with grouping keys...");

            for (var i = 1; i <= 1000; i++)
            {
                var slug = await slugGenerator.GenerateSlugAsync("Some text that needs slugging " + i, "group1");

                Console.Write("\r{0} slugs created", i);
            }

            stopwatch.Stop();

            Console.WriteLine("");
            Console.WriteLine("Took " + stopwatch.ElapsedMilliseconds + "ms");
            Console.WriteLine("");

            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();

            Environment.Exit(0);
        }
Esempio n. 28
0
        public static IEntryPublisher CreateEntryPublisher(ISubtextContext subtextContext, IIndexingService searchEngineService)
        {
            var slugGenerator   = new SlugGenerator(FriendlyUrlSettings.Settings, subtextContext.Repository);
            var transformations = new CompositeTextTransformation
            {
                new XhtmlConverter(),
                new EmoticonsTransformation(subtextContext)
            };

            return(new EntryPublisher(subtextContext, transformations, slugGenerator, searchEngineService));
        }
Esempio n. 29
0
        public void ApplyChanges(Accessory obj, IBusinessLogicFacade bl)
        {
            var target = obj;
            var source = this;

            if (target.Slug == null)
            {
                target.Slug = SlugGenerator.GenerateSlug(bl, source.Name, "accessory");
            }
            target.Name = source.Name;
        }
Esempio n. 30
0
        public void ConvertTitleToSlug_WithNullOrEmptyTitle_ThrowsArgumentException()
        {
            //arrange
            var generator = new SlugGenerator(null);
            var entry     = new Entry(PostType.BlogPost)
            {
                Title = string.Empty
            };

            //act, assert
            UnitTestHelper.AssertThrows <ArgumentException>(() => generator.GetSlugFromTitle(entry));
        }