コード例 #1
0
        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);
        }
コード例 #2
0
        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");
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public SqlTagRepositoryTest()
 {
     _tagRepo = new SqlTagRepository(_db);
 }
コード例 #6
0
        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);
        }