예제 #1
0
        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;
        }
예제 #3
0
        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));
        }
예제 #4
0
        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());
        }