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); }
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(); }
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); }
public void OneTimeSetUp() { _fakeSlugStore = A.Fake <ISlugStore>(); _fakeSlugAlgorithm = A.Fake <ISlugAlgorithm>(); _slugGenerator = new SlugGenerator(_fakeSlugStore, _fakeSlugAlgorithm); }
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); }
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)); }
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); }
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)); }
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(); }
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()); }
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); }
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); }
public void GenerateSlug_ShouldTrimResultTo100Characters(string fileName) { var slugGenerator = new SlugGenerator(); var fileNameToDisplay = slugGenerator.Get(fileName); Assert.True(fileNameToDisplay.Length <= 100); }
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; }
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 })); }
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"); }
public void ConvertTitleToSlug_WithNullEntry_ThrowsArgumentNullException() { //arrange var generator = new SlugGenerator(null); //act, assert UnitTestHelper.AssertThrowsArgumentNullException(() => generator.GetSlugFromTitle(null)); }
public void ShouldGenerateValidUrl( string input, string expected) { var slugGenerator = new SlugGenerator(); var decoded = slugGenerator.Generate(input); Assert.Equal(expected, decoded); }
public void ShouldReplaceAllWhitespacesCorrectly( string input, string expected) { var slugGenerator = new SlugGenerator(); var decoded = slugGenerator.Generate(input); Assert.Equal(expected, decoded); }
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); }
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; }
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)); }
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); }
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)); }
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; }
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)); }