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); }
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); }
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()); }
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)); }
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); }