public BlogIntegrationTestBase() { // repos var catRepo = new SqlCategoryRepository(_db); var tagRepo = new SqlTagRepository(_db); var postRepo = new SqlPostRepository(_db); // SettingService mock _settingSvcMock = new Mock <ISettingService>(); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <CoreSettings>()).Returns(Task.FromResult(new CoreSettings())); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <BlogSettings>()).Returns(Task.FromResult(new BlogSettings())); // MediaService mock _mediaSvcMock = new Mock <IMediaService>(); // Cache var serviceProvider = new ServiceCollection().AddMemoryCache().AddLogging().BuildServiceProvider(); var memCacheOptions = serviceProvider.GetService <IOptions <MemoryDistributedCacheOptions> >(); var cache = new MemoryDistributedCache(memCacheOptions); // LoggerFactory _loggerFactory = serviceProvider.GetService <ILoggerFactory>(); // Mapper var mapper = BlogUtil.Mapper; // Shortcode var shortcodeSvc = new Mock <IShortcodeService>(); var loggerBlogSvc = _loggerFactory.CreateLogger <BlogService>(); var mediatorMock = new Mock <IMediator>(); _blogSvc = new BlogService(_settingSvcMock.Object, catRepo, postRepo, tagRepo, cache, loggerBlogSvc, mapper, shortcodeSvc.Object, mediatorMock.Object); }
public async void UpdatePost_With_Tags_Updated() { // Arrange: given 1 post with 2 tags SeedTestPost(); // and another new tag var tagRepo = new SqlTagRepository(_db); var tagJava = await tagRepo.CreateAsync(new Tag { Title = "Java", Slug = "java" }); // prep a list of tags List <string> tagTitles = new List <string> { TAG2_TITLE, "Java" }; // get the post var post = await _postRepo.GetAsync(1, EPostType.BlogPost); // Act: when user updated the post by removing AspNet tag and adding Java tag // this won't work, the PostTag is still being tracked //post.PostTags.Clear(); //post.PostTags.Add(new PostTag { Post = post, Tag = tagJava }); //post.PostTags.Add(new PostTag { Post = post, Tag = tagCs }); // instead we have to List <string> tagTitlesCurrent = post.PostTags.Select(pt => pt.Tag.Title).ToList(); var tagsToRemove = tagTitlesCurrent.Except(tagTitles); foreach (var t in tagsToRemove) { post.PostTags.Remove(post.PostTags.Single(pt => pt.Tag.Title == t)); } post.PostTags.Add(new PostTag { Post = post, Tag = tagJava }); await _postRepo.UpdateAsync(post); // Assert: then the post's tags are updated var postAgain = await _postRepo.GetAsync(1, EPostType.BlogPost); Assert.Equal(2, postAgain.PostTags.Count()); Assert.True(post.PostTags.ToList()[0].Tag.Slug == "cs"); Assert.True(post.PostTags.ToList()[1].Tag.Slug == "java"); }
public async void UpdatePost_Can_Add_None_Tracked_Tag() { // Given 1 post with 2 tags Seed_1BlogPost_with_1Category_2Tags(); // and a non-tracked tag var tagRepo = new SqlTagRepository(_db); var tag = await tagRepo.CreateAsync(new Tag { Title = "Java", Slug = "java" }); // Act: when user updates post by adding the non-tracked tag var post = _db.Set <Post>().Include(p => p.PostTags).Single(p => p.Slug == POST_SLUG); //post.PostTags.Add(new PostTag { Post = post, Tag = tagNonTracked }); post.PostTags.Add(new PostTag { Post = post, Tag = tag }); await _postRepo.UpdateAsync(post); // Assert: now post has 3 tags var postAgain = _db.Set <Post>().Include(p => p.PostTags).Single(p => p.Id == post.Id); Assert.Equal(3, postAgain.PostTags.Count()); }
public BlogServiceIntegrationTestBase() { // ---------------------------------------------------------------- repos var catRepo = new SqlCategoryRepository(_db); var tagRepo = new SqlTagRepository(_db); var postRepo = new SqlPostRepository(_db); // ---------------------------------------------------------------- mock SettingService _settingSvcMock = new Mock <ISettingService>(); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <CoreSettings>()).Returns(Task.FromResult(new CoreSettings())); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <BlogSettings>()).Returns(Task.FromResult(new BlogSettings())); // ---------------------------------------------------------------- mock AppSettings var appSettingsMock = new Mock <IOptionsSnapshot <AppSettings> >(); appSettingsMock.Setup(o => o.Value).Returns(new AppSettings()); // ---------------------------------------------------------------- mock IStorageProvider _storageProviderMock = new Mock <IStorageProvider>(); _storageProviderMock.Setup(pro => pro.StorageEndpoint).Returns(STORAGE_ENDPOINT); // ---------------------------------------------------------------- MediaService var mediaRepo = new SqlMediaRepository(_db); _mediaSvc = new MediaService(_storageProviderMock.Object, appSettingsMock.Object, mediaRepo); // ---------------------------------------------------------------- Cache var serviceProvider = new ServiceCollection().AddMemoryCache().AddLogging().BuildServiceProvider(); var memCacheOptions = serviceProvider.GetService <IOptions <MemoryDistributedCacheOptions> >(); var cache = new MemoryDistributedCache(memCacheOptions); // ---------------------------------------------------------------- LoggerFactory _loggerFactory = serviceProvider.GetService <ILoggerFactory>(); var loggerBlogSvc = _loggerFactory.CreateLogger <BlogPostService>(); var loggerCatSvc = _loggerFactory.CreateLogger <CategoryService>(); var loggerTagSvc = _loggerFactory.CreateLogger <TagService>(); // ---------------------------------------------------------------- Mapper, Shortcode var mapper = BlogUtil.Mapper; var shortcodeSvc = new Mock <IShortcodeService>(); // ---------------------------------------------------------------- MediatR and Services var services = new ServiceCollection(); services.AddScoped <ServiceFactory>(p => p.GetService); // MediatR.ServiceFactory services.AddSingleton <IDistributedCache>(cache); // cache services.AddSingleton <FanDbContext>(_db); // DbContext for repos services.Scan(scan => scan .FromAssembliesOf(typeof(IMediator), typeof(ILogger), typeof(IBlogPostService), typeof(ISettingService)) .AddClasses() .AsImplementedInterfaces()); var provider = services.BuildServiceProvider(); var mediator = provider.GetRequiredService <IMediator>(); _catSvc = new CategoryService(catRepo, _settingSvcMock.Object, mediator, cache, loggerCatSvc); _tagSvc = new TagService(tagRepo, mediator, cache, loggerTagSvc); _imgSvc = new ImageService(_mediaSvc, _storageProviderMock.Object, appSettingsMock.Object); // the blog service _blogSvc = new BlogPostService( _settingSvcMock.Object, postRepo, cache, loggerBlogSvc, mapper, shortcodeSvc.Object, mediator); }
public SqlTagRepositoryTest() { _tagRepo = new SqlTagRepository(_db); }
public BlogServiceIntegrationTestBase() { // ---------------------------------------------------------------- repos var catRepo = new SqlCategoryRepository(_db); var tagRepo = new SqlTagRepository(_db); var postRepo = new SqlPostRepository(_db); // ---------------------------------------------------------------- mock SettingService _settingSvcMock = new Mock <ISettingService>(); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <CoreSettings>()).Returns(Task.FromResult(new CoreSettings())); _settingSvcMock.Setup(svc => svc.GetSettingsAsync <BlogSettings>()).Returns(Task.FromResult(new BlogSettings())); // ---------------------------------------------------------------- mock AppSettings var appSettingsMock = new Mock <IOptionsSnapshot <AppSettings> >(); appSettingsMock.Setup(o => o.Value).Returns(new AppSettings()); // ---------------------------------------------------------------- mock IStorageProvider _storageProviderMock = new Mock <IStorageProvider>(); _storageProviderMock.Setup(pro => pro.StorageEndpoint).Returns(STORAGE_ENDPOINT); // ---------------------------------------------------------------- MediaService var mediaRepo = new SqlMediaRepository(_db); _mediaSvc = new MediaService(_storageProviderMock.Object, appSettingsMock.Object, mediaRepo); // ---------------------------------------------------------------- Cache var serviceProvider = new ServiceCollection().AddMemoryCache().AddLogging().BuildServiceProvider(); var memCacheOptions = serviceProvider.GetService <IOptions <MemoryDistributedCacheOptions> >(); var cache = new MemoryDistributedCache(memCacheOptions); // ---------------------------------------------------------------- LoggerFactory _loggerFactory = serviceProvider.GetService <ILoggerFactory>(); var loggerBlogSvc = _loggerFactory.CreateLogger <BlogService>(); // ---------------------------------------------------------------- Mapper, Shortcode, Mediator var mapper = BlogUtil.Mapper; var shortcodeSvc = new Mock <IShortcodeService>(); var mediatorMock = new Mock <IMediator>(); // the blog service _blogSvc = new BlogService( _settingSvcMock.Object, catRepo, postRepo, tagRepo, _mediaSvc, _storageProviderMock.Object, appSettingsMock.Object, cache, loggerBlogSvc, mapper, shortcodeSvc.Object, mediatorMock.Object); }