コード例 #1
0
        public async Task ProcessAddItemEventAsyncDoesNotAddItemWhenUserIdDoesNotMatch()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(
                new CategoryDocument {
                Id = "fakecategoryid", Name = "fakename", UserId = "fakeuserid1"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid2/fakeitemid",
                EventType = AudioEvents.AudioCreated,
                Data      = new AudioCreatedEventData
                {
                    Category          = "fakecategoryid",
                    TranscriptPreview = "newpreview"
                }
            };

            // act
            await service.ProcessAddItemEventAsync(eventToProcess, "fakeuserid2").ConfigureAwait(false);

            // assert
            var itemsCollection = fakeCategoriesRepository.CategoryDocuments.Single().Items;

            Assert.AreEqual(0, itemsCollection.Count);
        }
コード例 #2
0
        public async Task UpdateCategorySynonymsPublishesCategorySynonymsUpdatedEventToEventGrid()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid"
            });
            var mockEventGridPublisherService = new Mock <IEventGridPublisherService>();
            var mockSynonymService            = new Mock <ISynonymService>();

            mockSynonymService
            .Setup(m => m.GetSynonymsAsync("fakename"))
            .ReturnsAsync(new[] { "a", "b" });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                mockSynonymService.Object,
                mockEventGridPublisherService.Object);

            // act
            await service.UpdateCategorySynonymsAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            mockEventGridPublisherService.Verify(
                m => m.PostEventGridEventAsync(
                    CategoryEvents.CategorySynonymsUpdated,
                    "fakeuserid/fakeid",
                    It.Is <CategorySynonymsUpdatedEventData>(c => c.Synonyms.Contains("a") && c.Synonyms.Contains("b"))),
                Times.Once);
        }
コード例 #3
0
        public async Task ListCategoriesDoesNotReturnsIdsForAnotherUser()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid1", Name = "fakename1", UserId = "fakeuserid1"
            });
            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid2", Name = "fakename2", UserId = "fakeuserid2"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.ListCategoriesAsync("fakeuserid1").ConfigureAwait(false);

            // assert
            Assert.IsTrue(result.Count == 1);
            var comparer = new CategorySummaryComparer();

            Assert.IsTrue(result.Contains(new CategorySummary {
                Id = "fakeid1", Name = "fakename1"
            }, comparer));
        }
コード例 #4
0
        public async Task UpdateCategoryImageUpdatesCategoryDocumentWithImageUrl()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid"
            });
            var mockImageSearchService = new Mock <IImageSearchService>();

            mockImageSearchService
            .Setup(m => m.FindImageUrlAsync("fakename"))
            .ReturnsAsync(new Uri("http://fake/imageurl.jpg"));
            var service = new CategoriesService(
                fakeCategoriesRepository,
                mockImageSearchService.Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            await service.UpdateCategoryImageAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.AreEqual("http://fake/imageurl.jpg", fakeCategoriesRepository.CategoryDocuments.Single().ImageUrl.ToString());
        }
コード例 #5
0
        public async Task UpdateCategorySynonymsUserIdIncorrectReturnsFalse()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid1"
            });
            var mockSynonymService = new Mock <ISynonymService>();

            mockSynonymService
            .Setup(m => m.GetSynonymsAsync("fakename"))
            .ReturnsAsync(new[] { "a", "b" });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                mockSynonymService.Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.UpdateCategorySynonymsAsync("fakeid", "fakeuserid2").ConfigureAwait(false);

            // assert
            Assert.IsFalse(result);
        }
コード例 #6
0
        public async Task UpdateCategoryImagePublishesCategoryImageUpdatedEventToEventGrid()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid"
            });
            var mockEventGridPublisherService = new Mock <IEventGridPublisherService>();
            var mockImageSearchService        = new Mock <IImageSearchService>();

            mockImageSearchService
            .Setup(m => m.FindImageUrlAsync("fakename"))
            .ReturnsAsync(new Uri("http://fake/imageurl.jpg"));
            var service = new CategoriesService(
                fakeCategoriesRepository,
                mockImageSearchService.Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // mockEventGridPublisherService.Object,
            // new Mock<IStringLocalizer>().Object);

            // act
            await service.UpdateCategoryImageAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            mockEventGridPublisherService.Verify(
                m => m.PostEventGridEventAsync(
                    CategoryEvents.CategoryImageUpdated,
                    "fakeuserid/fakeid",
                    It.Is <CategoryImageUpdatedEventData>(c => c.ImageUrl.ToString() == "http://fake/imageurl.jpg")),
                Times.Once);
        }
コード例 #7
0
        public async Task UpdateCategoryImageImageNotFoundReturnsFalse()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid"
            });
            var mockImageSearchService = new Mock <IImageSearchService>();

            mockImageSearchService
            .Setup(m => m.FindImageUrlAsync("fakename"))
            .ReturnsAsync(() => null);
            var service = new CategoriesService(
                fakeCategoriesRepository,
                mockImageSearchService.Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.UpdateCategoryImageAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsFalse(result);
        }
コード例 #8
0
        public async Task DeleteCategoryPublishesCategoryDeletedEventToEventGrid()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", UserId = "fakeuserid"
            });
            var mockEventGridPublisherService = new Mock <IEventGridPublisherService>();
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                mockEventGridPublisherService.Object);

            // act
            await service.DeleteCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            mockEventGridPublisherService.Verify(
                m => m.PostEventGridEventAsync(
                    CategoryEvents.CategoryDeleted,
                    "fakeuserid/fakeid",
                    It.IsAny <CategoryDeletedEventData>()),
                Times.Once);
        }
コード例 #9
0
        public async Task GetCategoryReturnsCorrectText()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(
                new CategoryDocument
            {
                Id       = "fakeid",
                Name     = "fakename",
                UserId   = "fakeuserid",
                ImageUrl = new Uri("https://www.edenimageurl.com/"),
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            CategoryDetails result = await service.GetCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsNotNull(result);
            Assert.AreEqual("fakeid", result.Id);
            Assert.AreEqual("fakename", result.Name);
            Assert.AreEqual("https://www.edenimageurl.com/", result.ImageUrl.ToString());
        }
コード例 #10
0
        public async Task UpdateCategorySynonymsUpdatesCategoryDocumentWithSynonyms()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid"
            });
            var mockSynonymService = new Mock <ISynonymService>();

            mockSynonymService
            .Setup(m => m.GetSynonymsAsync("fakename"))
            .ReturnsAsync(new[] { "a", "b" });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                mockSynonymService.Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            await service.UpdateCategorySynonymsAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.AreEqual(2, fakeCategoriesRepository.CategoryDocuments.Single().Synonyms.Count);
            Assert.IsTrue(fakeCategoriesRepository.CategoryDocuments.Single().Synonyms.Contains("a"));
            Assert.IsTrue(fakeCategoriesRepository.CategoryDocuments.Single().Synonyms.Contains("b"));
        }
コード例 #11
0
        public async Task ProcessAddItemEventAsyncThrowsWhenCategoryNotProvided()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakecategoryid", Name = "fakename", UserId = "fakeuserid"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = AudioEvents.AudioCreated,
                Data      = new AudioCreatedEventData
                {
                    TranscriptPreview = "faketranscript"
                }
            };

            // act and assert
            await Assert.ThrowsExceptionAsync <InvalidOperationException>(
                () => service.ProcessAddItemEventAsync(eventToProcess, "fakeuserid")).ConfigureAwait(false);
        }
コード例 #12
0
        public async Task ProcessAddItemEventAsyncUpdatesItemWhenAlreadyExists()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();
            var category = new CategoryDocument
            {
                Id     = "fakecategoryid",
                Name   = "fakename",
                UserId = "fakeuserid"
            };

            category.Items.Add(new CategoryItem {
                Id = "fakeitemid", Preview = "oldpreview"
            });

            fakeCategoriesRepository.CategoryDocuments.Add(category);

            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = AudioEvents.AudioCreated,
                Data      = new AudioCreatedEventData
                {
                    Category          = "fakecategoryid",
                    TranscriptPreview = "newpreview"
                }
            };

            // act
            await service.ProcessAddItemEventAsync(eventToProcess, "fakeuserid").ConfigureAwait(false);

            // assert
            var itemsCollection = fakeCategoriesRepository.CategoryDocuments.Single().Items;

            Assert.AreEqual(1, itemsCollection.Count);
            Assert.IsTrue(
                itemsCollection.Contains(
                    new CategoryItem {
                Id = "fakeitemid", Preview = "newpreview", Type = ItemType.Audio
            },
                    new CategoryItemComparer()));
        }
コード例 #13
0
        public async Task ProcessUpdateItemEventAsyncPublishesCategoryItemsUpdatedEventToEventGrid()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            var category = new CategoryDocument
            {
                Id     = "fakecategoryid",
                Name   = "fakename",
                UserId = "fakeuserid",
            };

            category.Items.Add(new CategoryItem {
                Id = "fakeitemid", Type = ItemType.Text, Preview = "oldpreview"
            });

            fakeCategoriesRepository.CategoryDocuments.Add(category);

            var mockEventGridPublisherService = new Mock <IEventGridPublisherService>();

            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                mockEventGridPublisherService.Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = TextEvents.TextUpdated,
                Data      = new TextUpdatedEventData
                {
                    Preview = "newpreview"
                }
            };

            // act
            await service.ProcessUpdateItemEventAsync(eventToProcess, "fakeuserid").ConfigureAwait(false);

            // assert
            mockEventGridPublisherService.Verify(
                m => m.PostEventGridEventAsync(
                    CategoryEvents.CategoryItemsUpdated,
                    "fakeuserid/fakecategoryid",
                    It.IsAny <CategoryItemsUpdatedEventData>()),
                Times.Once);
        }
コード例 #14
0
        public async Task AddCategoryAddsDocumentToRepository()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            await service.AddCategoryAsync("name", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.AreEqual(1, fakeCategoriesRepository.CategoryDocuments.Count);
            Assert.IsTrue(fakeCategoriesRepository.CategoryDocuments.Any(d => d.Name == "name" && d.UserId == "fakeuserid"));
        }
コード例 #15
0
        public async Task DeleteCategoryInvalidCategoryIdReturnsNotFound()
        {
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            // arrange
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.DeleteCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.AreEqual(DeleteCategoryResult.NotFound, result);
        }
コード例 #16
0
        public async Task AddCategoryReturnsDocumentId()
        {
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            // arrange
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.AddCategoryAsync("name", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsNotNull(result);
            Assert.IsFalse(string.IsNullOrEmpty(result));
        }
コード例 #17
0
        public async Task GetCategoryIncorrectUserIdReturnsNull()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "fakename", UserId = "fakeuserid2"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.GetCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsNull(result);
        }
コード例 #18
0
        public async Task DeleteCategoryDeletesDocumentFromRepository()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", UserId = "fakeuserid"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            await service.DeleteCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsTrue(fakeCategoriesRepository.CategoryDocuments.Count == 0);
        }
コード例 #19
0
        public async Task DeleteCategoryReturnsSuccess()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", UserId = "fakeuserid"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.DeleteCategoryAsync("fakeid", "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.AreEqual(DeleteCategoryResult.Success, result);
        }
コード例 #20
0
        public async Task UpdateCategoryUpdatesDocumentInRepository()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", Name = "oldname", UserId = "fakeuserid"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            await service.UpdateCategoryAsync("fakeid", "fakeuserid", "newname").ConfigureAwait(false);

            // assert
            Assert.AreEqual("newname", fakeCategoriesRepository.CategoryDocuments.Single().Name);
        }
コード例 #21
0
        public async Task UpdateCategoryIncorrectUserIdReturnsNotFound()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(new CategoryDocument {
                Id = "fakeid", UserId = "fakeuserid2"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            // act
            var result = await service.UpdateCategoryAsync("fakeid", "fakeuserid", "newname").ConfigureAwait(false);

            // assert
            Assert.AreEqual(UpdateCategoryResult.NotFound, result);
        }
コード例 #22
0
        public async Task ProcessUpdateItemEventAsyncUpdatesTextItem()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();
            var category = new CategoryDocument
            {
                Id     = "fakecategoryid",
                Name   = "fakename",
                UserId = "fakeuserid",
            };

            category.Items.Add(new CategoryItem {
                Id = "fakeitemid", Type = ItemType.Text, Preview = "oldpreview"
            });

            fakeCategoriesRepository.CategoryDocuments.Add(category);

            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = TextEvents.TextUpdated,
                Data      = new TextUpdatedEventData
                {
                    Preview = "newpreview"
                }
            };

            // act
            await service.ProcessUpdateItemEventAsync(eventToProcess, "fakeuserid").ConfigureAwait(false);

            // assert
            var itemsCollection = fakeCategoriesRepository.CategoryDocuments.Single().Items;

            Assert.AreEqual("newpreview", itemsCollection.Single().Preview);
        }
コード例 #23
0
        public async Task ProcessAddItemEventAsyncAddsImageItem()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            fakeCategoriesRepository.CategoryDocuments.Add(
                new CategoryDocument {
                Id = "fakecategoryid", Name = "fakename", UserId = "fakeuserid"
            });
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = ImageEvents.ImageCreated,
                Data      = new ImageCreatedEventData()
                {
                    Category   = "fakecategoryid",
                    PreviewUri = new Uri("http://fake/preview.jpg")
                }
            };

            // act
            await service.ProcessAddItemEventAsync(eventToProcess, "fakeuserid").ConfigureAwait(false);

            // assert
            var itemsCollection = fakeCategoriesRepository.CategoryDocuments.Single().Items;

            Assert.AreEqual(1, itemsCollection.Count);
            Assert.IsTrue(
                itemsCollection.Contains(
                    new CategoryItem {
                Id = "fakeitemid", Preview = "http://fake/preview.jpg", Type = ItemType.Image
            },
                    new CategoryItemComparer()));
        }
コード例 #24
0
        public async Task AddCategoryPublishesCategoryCreatedEventToEventGrid()
        {
            // arrange
            var mockEventGridPublisherService = new Mock <IEventGridPublisherService>();
            var fakeCategoriesRepository      = new FakeCategoriesRepository();
            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                mockEventGridPublisherService.Object);

            // act
            var categoryId = await service.AddCategoryAsync("name", "fakeuserid").ConfigureAwait(false);

            // assert
            mockEventGridPublisherService.Verify(
                m => m.PostEventGridEventAsync(
                    CategoryEvents.CategoryCreated,
                    $"fakeuserid/{categoryId}",
                    It.Is <CategoryCreatedEventData>(d => d.Name == "name")),
                Times.Once);
        }
コード例 #25
0
        public async Task ProcessDeleteItemEventAsyncDeletesAudioItem()
        {
            // arrange
            var fakeCategoriesRepository = new FakeCategoriesRepository();

            var category = new CategoryDocument
            {
                Id     = "fakecategoryid",
                Name   = "fakename",
                UserId = "fakeuserid",
            };

            category.Items.Add(new CategoryItem {
                Id = "fakeitemid", Type = ItemType.Audio
            });

            fakeCategoriesRepository.CategoryDocuments.Add(category);

            var service = new CategoriesService(
                fakeCategoriesRepository,
                new Mock <IImageSearchService>().Object,
                new Mock <ISynonymService>().Object,
                new Mock <IEventGridPublisherService>().Object);

            var eventToProcess = new EventGridEvent
            {
                Subject   = "fakeuserid/fakeitemid",
                EventType = AudioEvents.AudioDeleted,
                Data      = new AudioDeletedEventData()
            };

            // act
            await service.ProcessDeleteItemEventAsync(eventToProcess, "fakeuserid").ConfigureAwait(false);

            // assert
            Assert.IsTrue(fakeCategoriesRepository.CategoryDocuments.Single().Items.Count == 0);
        }