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