public async void DoesNotAttemptPersistToBlobStoreWhenEntrymediaWithSameHashExists() { var entryMedia = new EntryMediaFixture().Build(); var blobUrlBase64Encoded = StringUtilities.ToBase64("existingBlobUrl"); var expectedDecodedUrl = StringUtilities.FromBase64(blobUrlBase64Encoded); var existingEntryMediaWithSameHash = new EntryMediaFixture { MD5Base64Hash = entryMedia.MD5Base64Hash, BlobUrl = blobUrlBase64Encoded }.Build(); var articleEntryMediaRequest = new ArticleEntryMediaRequest { MD5Base64Hash = "ahash", EntryId = entryMedia.EntryContentId }; var mockCoordinator = new Mock <ICreateEntryMediaCoordinator>(); mockCoordinator.Setup(cc => cc.CreateArticleEntryMedia(It.IsAny <ArticleEntryMediaRequest>())).ReturnsAsync(() => entryMedia); mockCoordinator.Setup(cc => cc.MarkUploadedSuccess(It.IsAny <EntryMedia>(), It.IsAny <string>())).ReturnsAsync(entryMedia); var mockSearch = new Mock <IEntryMediaSearchStrategy>(); mockSearch.Setup(ms => ms.Find(entryMedia.EntryContentId, articleEntryMediaRequest.MD5Base64Hash)).ReturnsAsync(() => existingEntryMediaWithSameHash); var mockBlob = new Mock <IUploadArticleEntryMediaCoordinator>();; mockBlob.Setup(blob => blob.UploadEntryMedia(It.IsAny <ArticleEntryMediaRequest>(), It.IsAny <EntryMedia>())); var strategy = new CreateAndPersistArticleEntryMediaStrategyFixture { CreateEntryMediaCoordinator = mockCoordinator.Object, UploadArticleEntryMediaCoordinator = mockBlob.Object, SearchStrategy = mockSearch.Object }.Build(); var result = await strategy.PersistArticleEntryMediaAsync(articleEntryMediaRequest); Assert.Equal(entryMedia, result); mockSearch.Verify(ms => ms.Find(entryMedia.EntryContentId, articleEntryMediaRequest.MD5Base64Hash)); mockBlob.Verify(blob => blob.UploadEntryMedia(articleEntryMediaRequest, entryMedia), Times.Never()); mockCoordinator.Verify(cc => cc.MarkUploadedSuccess(entryMedia, expectedDecodedUrl)); }
public async Task CallsDownToBlobStoreToPersistMedia() { var entryMedia = new EntryMediaFixture().Build(); var entryMediaRequest = new ArticleEntryMediaRequest { MediaContent = new byte[1] }; var blobStoreFixture = new BlobStoreFixture(); var mock = blobStoreFixture.Mock; var coordinator = new UploadArticleEntryMediaCoordinatorFixture { BlobStore = blobStoreFixture.Build() }.Build(); var uploadEntryMedia = coordinator.UploadEntryMedia(entryMediaRequest, entryMedia); mock.Verify(bs => bs.PersistArticleEntryMedia(entryMedia.Id, entryMedia.EntryContentId, entryMediaRequest.MediaContent, entryMediaRequest.ContentType)); await Task.CompletedTask; }
public async void InvokesPersistToBlobStoreWhenSuccessfullyCreated() { var entryMedia = new EntryMediaFixture().Build(); var articleEntryMediaRequest = new ArticleEntryMediaRequest { MD5Base64Hash = "ahash", EntryId = entryMedia.EntryContentId }; var mockBlobUrl = "someUrl"; var mockCoordinator = new Mock <ICreateEntryMediaCoordinator>(); mockCoordinator.Setup(cc => cc.CreateArticleEntryMedia(It.IsAny <ArticleEntryMediaRequest>())).ReturnsAsync(() => entryMedia); mockCoordinator.Setup(cc => cc.MarkUploadedSuccess(It.IsAny <EntryMedia>(), It.IsAny <string>())).ReturnsAsync(entryMedia); var mockSearch = new Mock <IEntryMediaSearchStrategy>(); mockSearch.Setup(ms => ms.Find(entryMedia.EntryContentId, articleEntryMediaRequest.MD5Base64Hash)).ReturnsAsync(() => null); var mockBlob = new Mock <IUploadArticleEntryMediaCoordinator>();; mockBlob.Setup(blob => blob.UploadEntryMedia(It.IsAny <ArticleEntryMediaRequest>(), It.IsAny <EntryMedia>())).ReturnsAsync(mockBlobUrl); var strategy = new CreateAndPersistArticleEntryMediaStrategyFixture { CreateEntryMediaCoordinator = mockCoordinator.Object, UploadArticleEntryMediaCoordinator = mockBlob.Object, SearchStrategy = mockSearch.Object }.Build(); var result = await strategy.PersistArticleEntryMediaAsync(articleEntryMediaRequest); Assert.Equal(entryMedia, result); mockBlob.Verify(blob => blob.UploadEntryMedia(articleEntryMediaRequest, entryMedia)); mockSearch.Verify(ms => ms.Find(entryMedia.EntryContentId, articleEntryMediaRequest.MD5Base64Hash)); mockCoordinator.Verify(cc => cc.MarkUploadedSuccess(entryMedia, mockBlobUrl)); }
public async Task MarksEntryMediaAsPersistedWhenSuccessful() { var expectedUriUpload = "http://test.com"; var uriAsBase64String = StringUtilities.ToBase64(expectedUriUpload); var entryMedia = new EntryMediaFixture().Build(); var mockClock = new MockClock(); var dbContextFixture = new MockBlogApiDbContextFixture(); var dbMock = dbContextFixture.Mock; dbMock.Setup(ctx => ctx.Attach(entryMedia)); var coordinator = new CreateEntryMediaCoordinatorFixture { Context = dbContextFixture.Build(), Clock = mockClock }.Build(); var result = await coordinator.MarkUploadedSuccess(entryMedia, expectedUriUpload); Assert.Equal(uriAsBase64String, result.BlobUrl); Assert.Equal(mockClock.Now, result.Persisted); dbMock.Verify(ctx => ctx.Attach(entryMedia)); dbMock.Verify(ctx => ctx.SaveChanges()); }