public async Task PersistsTagsThatDoNotAlreadyExistOnArticle()
        {
            var tagThatExists = new MetaTagRequest
            {
                Name = "tag1"
            };

            var tagThatDoesNotExist = new MetaTagRequest
            {
                Name = "tag2"
            };

            var existingArticleWithTags = new ArticleFixture().WithTags(tagThatExists).Build();
            var mockContext             = new MockBlogApiDbContextFixture();

            mockContext.Mock.Setup(ctx => ctx.Query <Article>(It.IsAny <string>()))
            .Returns(new [] { existingArticleWithTags }.AsQueryable());

            var coordinator = new AddMetaTagForArticleCoordinatorFixture
            {
                Context = mockContext.Build()
            }.Build();

            var result = await coordinator.AddArticleMetaTags(existingArticleWithTags.Id, tagThatExists, tagThatDoesNotExist);

            Assert.True(result.Any(mt => mt.Name == tagThatDoesNotExist.Name));
            Assert.True(result.All(mt => mt.Name != tagThatExists.Name));

            mockContext.Mock.Verify(ctx => ctx.Add(result), Times.Once);
            mockContext.Mock.Verify(ctx => ctx.SaveChanges(), Times.Once);
        }
Пример #2
0
        public async Task DoesNothingIfArticleAlreadyMarkedAsDeleted()
        {
            var article = new ArticleFixture
            {
                IsDeleted = true
            }.Build();

            var contextFixture = new MockBlogApiDbContextFixture()
                                 .With(article, article.Id);

            var mock = contextFixture.Mock;

            var fixture = new DeleteArticleCoordinatorFixture
            {
                Context = contextFixture.Build()
            };

            var coordinator = fixture.Build();

            Assert.True(article.IsDeleted);

            var deleteResult = await coordinator.TryDeleteArticle(article.Id);

            Assert.True(deleteResult);
            mock.Verify(ctx => ctx.SaveChanges(), Times.Never);
        }
        public async Task DoesNotAddNewTagsIfTheyAlreadyExistOnArticle()
        {
            var newTagToAdd = new MetaTagRequest
            {
                Name = "SomeTag"
            };
            var existingArticleWithTags = new ArticleFixture().WithTags(newTagToAdd).Build();

            var mockContext = new MockBlogApiDbContextFixture();

            mockContext.Mock.Setup(ctx => ctx.Query <Article>(It.IsAny <string>()))
            .Returns(new[] { existingArticleWithTags }.AsQueryable());


            var coordinator = new AddMetaTagForArticleCoordinatorFixture
            {
                Context = mockContext.Build()
            }.Build();

            var result = await coordinator.AddArticleMetaTags(existingArticleWithTags.Id, newTagToAdd);

            Assert.Null(result);
            mockContext.Mock.Verify(ctx => ctx.Add(It.IsAny <MetaTag[]>()), Times.Never);
            mockContext.Mock.Verify(ctx => ctx.SaveChanges(), Times.Never);
        }
Пример #4
0
        public async Task SetsArticleToDeletedWhenFound()
        {
            var article        = new ArticleFixture().Build();
            var contextFixture = new MockBlogApiDbContextFixture()
                                 .With(article, article.Id);

            var mock = contextFixture.Mock;

            var fixture = new DeleteArticleCoordinatorFixture
            {
                Context = contextFixture.Build()
            };

            var coordinator = fixture.Build();

            Assert.False(article.IsDeleted);
            Assert.Null(article.Deleted);

            var deleteResult = await coordinator.TryDeleteArticle(article.Id);

            Assert.True(deleteResult);
            Assert.True(article.IsDeleted);
            Assert.NotNull(article.Deleted);

            mock.Verify(ctx => ctx.SaveChanges());
        }
        public async Task CreatesNewEntryWhenArticleFound()
        {
            var article          = new ArticleFixture().Build();
            var mockClock        = new MockClock();
            var dbContextFixture = new MockBlogApiDbContextFixture();

            dbContextFixture.Mock
            .Setup(ctx => ctx.Find <Article>(It.IsAny <Guid>()))
            .ReturnsAsync(() => article);

            var createArticleEntryCoordinator = new CreateArticleEntryCoordinatorFixture
            {
                Context = dbContextFixture.Build(),
                Clock   = mockClock
            }.Build();

            var result = await createArticleEntryCoordinator.CreateArticleEntry(article.Id, new ArticleEntry());

            Assert.Equal(article.Id, result.ArticleId);
            Assert.Equal(mockClock.Now, result.Created);

            dbContextFixture.Mock.Verify(ctx => ctx.Find <Article>(article.Id));
            dbContextFixture.Mock.Verify(ctx => ctx.Add(result));
            dbContextFixture.Mock.Verify(ctx => ctx.SaveChanges());
        }
Пример #6
0
        public async Task CallsDownToQueryIfArticleDoesExist()
        {
            var articleIdToLookup = Guid.NewGuid();
            var articleToBuildFor = new ArticleFixture
            {
                Id = articleIdToLookup
            }.Build();

            var mockMapping = new Dictionary <string, string>();
            var mockContextWithNoArticles = new MockBlogApiDbContextFixture();

            mockContextWithNoArticles.Mock.Setup(m => m.Find <Article>(articleIdToLookup)).ReturnsAsync(articleToBuildFor);

            var mockQuery = new Mock <IGetMediaLookupQuery>();

            mockQuery.Setup(m => m.CreateMediaLookup(articleIdToLookup)).Returns(mockMapping);

            var blogArticleCoordinatorFixture = new FindBlogArticleCoordinatorFixture
            {
                Context = mockContextWithNoArticles.Build(),
            };

            var lookupStrategy = new GetArticleMediaLookupStrategyFixture
            {
                FindBlogArticleCoordinator = blogArticleCoordinatorFixture.Build(),
                MediaLookupQuery           = mockQuery.Object
            }.Build();

            var result = await lookupStrategy.GetMediaLookup(articleIdToLookup);

            Assert.Equal(mockMapping, result.MediaLookup);

            mockQuery.Verify(m => m.CreateMediaLookup(articleIdToLookup), Times.Once);
        }
        public async Task ReturnsNullWhenArticleNotFound()
        {
            var article          = new ArticleFixture().Build();
            var dbContextFixture = new MockBlogApiDbContextFixture();

            dbContextFixture.Mock
            .Setup(ctx => ctx.Find <Article>(It.IsAny <Guid>()))
            .ReturnsAsync(() => null);

            var createArticleEntryCoordinator = new CreateArticleEntryCoordinatorFixture
            {
                Context = dbContextFixture.Build()
            }.Build();

            var result = await createArticleEntryCoordinator.CreateArticleEntry(article.Id, new ArticleEntry());


            Assert.Null(result);
            dbContextFixture.Mock.Verify(ctx => ctx.Find <Article>(article.Id));
        }
Пример #8
0
        public async Task DoesNothingIfArticleNotFound()
        {
            var article        = new ArticleFixture().Build();
            var contextFixture = new MockBlogApiDbContextFixture();
            var mock           = contextFixture.Mock;

            var fixture = new DeleteArticleCoordinatorFixture
            {
                Context = contextFixture.Build()
            };

            var coordinator = fixture.Build();

            Assert.False(article.IsDeleted);
            Assert.Null(article.Deleted);

            var deleteResult = await coordinator.TryDeleteArticle(article.Id);

            Assert.False(deleteResult);
            Assert.False(article.IsDeleted);
            Assert.Null(article.Deleted);
            mock.Verify(ctx => ctx.SaveChanges(), Times.Never);
        }