public async Task TestSearchText() { var testDB = DbHelper.GetEmptyTestDB(); var userId = await UserHelper.CreateInDbAsync(testDB); var text = RandomHelper.String(); var subscriptionName = RandomHelper.String(); using (var dbContext = new MemCheckDbContext(testDB)) { var request = new SubscribeToSearch.Request(userId, Guid.Empty, subscriptionName, text, Array.Empty <Guid>(), Array.Empty <Guid>()); await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request); } using (var dbContext = new MemCheckDbContext(testDB)) { var subscription = await dbContext.SearchSubscriptions .Include(subscription => subscription.ExcludedTags) .Include(subscription => subscription.RequiredTags) .SingleAsync(); Assert.AreEqual(userId, subscription.UserId); Assert.AreEqual(subscriptionName, subscription.Name); Assert.AreEqual(Guid.Empty, subscription.ExcludedDeck); Assert.AreEqual(text, subscription.RequiredText); Assert.AreEqual(0, subscription.RequiredTags.Count()); Assert.IsFalse(subscription.ExcludeAllTags); Assert.AreEqual(0, subscription.ExcludedTags !.Count()); } }
public async Task TestSearchWithoutTag() { var testDB = DbHelper.GetEmptyTestDB(); var userId = await UserHelper.CreateInDbAsync(testDB); Guid tagId; using (var dbContext = new MemCheckDbContext(testDB)) { var user = await dbContext.Users.SingleAsync(); tagId = (await new CreateTag(dbContext.AsCallContext()).RunAsync(new CreateTag.Request(user.Id, RandomHelper.String(), ""))).TagId; } using (var dbContext = new MemCheckDbContext(testDB)) { var request = new SubscribeToSearch.Request(userId, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), new Guid[] { tagId }); await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request); } using (var dbContext = new MemCheckDbContext(testDB)) { var subscription = await dbContext.SearchSubscriptions .Include(subscription => subscription.ExcludedTags) .Include(subscription => subscription.RequiredTags) .SingleAsync(); Assert.AreEqual(userId, subscription.UserId); Assert.AreEqual(Guid.Empty, subscription.ExcludedDeck); Assert.AreEqual("", subscription.RequiredText); Assert.AreEqual(0, subscription.RequiredTags.Count()); Assert.IsFalse(subscription.ExcludeAllTags); Assert.AreEqual(tagId, subscription.ExcludedTags.First().TagId); } }
public async Task TestBadExcludedTag() { var testDB = DbHelper.GetEmptyTestDB(); var userId = await UserHelper.CreateInDbAsync(testDB); using var dbContext = new MemCheckDbContext(testDB); var request = new SubscribeToSearch.Request(userId, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), new Guid[] { Guid.NewGuid() }); await Assert.ThrowsExceptionAsync <RequestInputException>(async() => await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request)); }
public async Task TestTooManySubscriptions() { var testDB = DbHelper.GetEmptyTestDB(); var userId = await UserHelper.CreateInDbAsync(testDB); using (var dbContext = new MemCheckDbContext(testDB)) for (int i = 0; i < SubscribeToSearch.Request.MaxSubscriptionCount; i++) { await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(new SubscribeToSearch.Request(userId, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), Array.Empty <Guid>())); } using (var dbContext = new MemCheckDbContext(testDB)) { var request = new SubscribeToSearch.Request(userId, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), Array.Empty <Guid>()); await Assert.ThrowsExceptionAsync <RequestInputException>(async() => await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request)); } }
public async Task CascadeDeletion() { var db = DbHelper.GetEmptyTestDB(); var user = await UserHelper.CreateInDbAsync(db); Guid tagId1; using (var dbContext = new MemCheckDbContext(db)) tagId1 = (await new CreateTag(dbContext.AsCallContext()).RunAsync(new CreateTag.Request(user, RandomHelper.String(), ""))).TagId; await CardHelper.CreateAsync(db, user, tagIds : tagId1.AsArray()); await CardHelper.CreateAsync(db, user); await CardHelper.CreateAsync(db, user, tagIds : tagId1.AsArray()); Guid subscriptionId; using (var dbContext = new MemCheckDbContext(db)) { var tagId2 = (await new CreateTag(dbContext.AsCallContext()).RunAsync(new CreateTag.Request(user, RandomHelper.String(), ""))).TagId; var tagId3 = (await new CreateTag(dbContext.AsCallContext()).RunAsync(new CreateTag.Request(user, RandomHelper.String(), ""))).TagId; var request = new SubscribeToSearch.Request(user, Guid.Empty, RandomHelper.String(), "", tagId1.AsArray(), new[] { tagId2, tagId3 }); subscriptionId = (await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request)).SearchId; } using (var dbContext = new MemCheckDbContext(db)) await new UserSearchNotifier(dbContext.AsCallContext(), 10, new DateTime(2050, 05, 01)).RunAsync(subscriptionId); using (var dbContext = new MemCheckDbContext(db)) { Assert.AreEqual(2, dbContext.CardsInSearchResults.Count(c => c.SearchSubscriptionId == subscriptionId)); Assert.AreEqual(1, dbContext.RequiredTagInSearchSubscriptions.Count(c => c.SearchSubscriptionId == subscriptionId)); Assert.AreEqual(2, dbContext.ExcludedTagInSearchSubscriptions.Count(c => c.SearchSubscriptionId == subscriptionId)); } using (var dbContext = new MemCheckDbContext(db)) await new DeleteSearchSubscription(dbContext.AsCallContext()).RunAsync(new DeleteSearchSubscription.Request(user, subscriptionId)); using (var dbContext = new MemCheckDbContext(db)) { Assert.AreEqual(0, dbContext.CardsInSearchResults.Count(c => c.SearchSubscriptionId == subscriptionId)); Assert.AreEqual(0, dbContext.RequiredTagInSearchSubscriptions.Count(c => c.SearchSubscriptionId == subscriptionId)); Assert.AreEqual(0, dbContext.ExcludedTagInSearchSubscriptions.Count(c => c.SearchSubscriptionId == subscriptionId)); } }
public async Task TestSearchWithSameExcludedTagTwice() { var testDB = DbHelper.GetEmptyTestDB(); var userId = await UserHelper.CreateInDbAsync(testDB); Guid tagId; using (var dbContext = new MemCheckDbContext(testDB)) { var user = await dbContext.Users.SingleAsync(); tagId = (await new CreateTag(dbContext.AsCallContext()).RunAsync(new CreateTag.Request(user.Id, RandomHelper.String(), ""))).TagId; } using (var dbContext = new MemCheckDbContext(testDB)) { var request = new SubscribeToSearch.Request(userId, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), new Guid[] { tagId, tagId }); await Assert.ThrowsExceptionAsync <RequestInputException>(async() => await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(request)); } }
public async Task MoreNewFoundThanMaxReported() { var db = DbHelper.GetEmptyTestDB(); var userName = RandomHelper.String(); var user = await UserHelper.CreateInDbAsync(db, userName : userName); var language = await CardLanguagHelper.CreateAsync(db); for (int i = 0; i < SearchCards.Request.MaxPageSize * 2; i++) { await CardHelper.CreateAsync(db, user, language : language); } var card = await CardHelper.CreateAsync(db, user, language : language); Guid subscriptionId; using (var dbContext = new MemCheckDbContext(db)) { var subscriberRequest = new SubscribeToSearch.Request(user, Guid.Empty, RandomHelper.String(), "", Array.Empty <Guid>(), Array.Empty <Guid>()); subscriptionId = (await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(subscriberRequest)).SearchId; } using (var dbContext = new MemCheckDbContext(db)) { var searchResult = await new UserSearchNotifier(dbContext.AsCallContext(), 2, new DateTime(2050, 05, 01)).RunAsync(subscriptionId); Assert.AreEqual(SearchCards.Request.MaxPageSize * 2 + 1, searchResult.TotalNewlyFoundCardCount); Assert.AreEqual(2, searchResult.NewlyFoundCards.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_StillExists_UserAllowedToView.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_Deleted_UserAllowedToView.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserNotAllowedToView); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserNotAllowedToView); } var deletionDate = new DateTime(2050, 05, 02); using (var dbContext = new MemCheckDbContext(db)) { var deleter = new DeleteCards(dbContext.AsCallContext(), deletionDate); await deleter.RunAsync(new DeleteCards.Request(user, card.Id.AsArray())); } var runDate = new DateTime(2050, 05, 04); using (var dbContext = new MemCheckDbContext(db)) { var searchResult = await new UserSearchNotifier(dbContext.AsCallContext(), 2, runDate).RunAsync(subscriptionId); Assert.AreEqual(0, searchResult.TotalNewlyFoundCardCount); Assert.AreEqual(0, searchResult.NewlyFoundCards.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_StillExists_UserAllowedToView.Length); Assert.AreEqual(1, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserAllowedToView); Assert.AreEqual(1, searchResult.CardsNotFoundAnymore_Deleted_UserAllowedToView.Length); var deletedCard = searchResult.CardsNotFoundAnymore_Deleted_UserAllowedToView.Single(); Assert.IsNotNull(deletedCard.FrontSide); Assert.AreEqual(card.FrontSide, deletedCard.FrontSide !); Assert.AreEqual(userName, deletedCard.DeletionAuthor); Assert.IsTrue(deletedCard.CardIsViewable); Assert.AreEqual(deletionDate, deletedCard.DeletionUtcDate); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserNotAllowedToView); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserNotAllowedToView); } using (var dbContext = new MemCheckDbContext(db)) Assert.AreEqual(runDate, dbContext.SearchSubscriptions.Single(s => s.Id == subscriptionId).LastRunUtcDate); }
public async Task NewAndNotAnymoreToReport() { var db = DbHelper.GetEmptyTestDB(); var user = await UserHelper.CreateInDbAsync(db); var language = await CardLanguagHelper.CreateAsync(db); var ignoredTag = await TagHelper.CreateAsync(db); var requiredTag1 = await TagHelper.CreateAsync(db); var requiredTag2 = await TagHelper.CreateAsync(db); var excludedTag = await TagHelper.CreateAsync(db); var card1 = await CardHelper.CreateAsync(db, user, language : language, tagIds : new[] { ignoredTag, requiredTag1, requiredTag2, excludedTag }); var card2 = await CardHelper.CreateAsync(db, user, language : language, tagIds : new[] { ignoredTag, requiredTag1, requiredTag2 }); var card3 = await CardHelper.CreateAsync(db, user, language : language, tagIds : new[] { ignoredTag }); var card4 = await CardHelper.CreateAsync(db, user, language : language, tagIds : new[] { ignoredTag }); Guid subscriptionId; using (var dbContext = new MemCheckDbContext(db)) { var subscriberRequest = new SubscribeToSearch.Request(user, Guid.Empty, RandomHelper.String(), "", new[] { requiredTag1, requiredTag2 }, new[] { excludedTag }); subscriptionId = (await new SubscribeToSearch(dbContext.AsCallContext()).RunAsync(subscriberRequest)).SearchId; } using (var dbContext = new MemCheckDbContext(db)) { var searchResult = await new UserSearchNotifier(dbContext.AsCallContext(), 10, new DateTime(2050, 05, 01)).RunAsync(subscriptionId); Assert.AreEqual(1, searchResult.TotalNewlyFoundCardCount); Assert.AreEqual(1, searchResult.NewlyFoundCards.Length); Assert.AreEqual(card2.Id, searchResult.NewlyFoundCards.Single().CardId); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_StillExists_UserAllowedToView.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_Deleted_UserAllowedToView.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserNotAllowedToView); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserNotAllowedToView); } using (var dbContext = new MemCheckDbContext(db)) { var updateDate = new DateTime(2050, 05, 02); await new UpdateCard(dbContext.AsCallContext(), updateDate).RunAsync(UpdateCardHelper.RequestForTagChange(card1, new[] { ignoredTag, requiredTag1, requiredTag2 })); await new UpdateCard(dbContext.AsCallContext(), updateDate).RunAsync(UpdateCardHelper.RequestForTagChange(card2, new[] { requiredTag1, requiredTag2, excludedTag })); await new UpdateCard(dbContext.AsCallContext(), updateDate).RunAsync(UpdateCardHelper.RequestForTagChange(card3, new[] { requiredTag1 })); await new UpdateCard(dbContext.AsCallContext(), new DateTime(2050, 05, 03)).RunAsync(UpdateCardHelper.RequestForTagChange(card3, new[] { requiredTag1, requiredTag2 })); await new UpdateCard(dbContext.AsCallContext(), updateDate).RunAsync(UpdateCardHelper.RequestForTagChange(card4, new[] { requiredTag1 })); } var runDate = new DateTime(2050, 05, 04); using (var dbContext = new MemCheckDbContext(db)) { var searchResult = await new UserSearchNotifier(dbContext.AsCallContext(), 55, runDate).RunAsync(subscriptionId); Assert.AreEqual(2, searchResult.TotalNewlyFoundCardCount); Assert.AreEqual(2, searchResult.NewlyFoundCards.Length); Assert.IsTrue(searchResult.NewlyFoundCards.Any(c => c.CardId == card1.Id)); Assert.IsTrue(searchResult.NewlyFoundCards.Any(c => c.CardId == card3.Id)); Assert.AreEqual(1, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserAllowedToView); Assert.AreEqual(1, searchResult.CardsNotFoundAnymore_StillExists_UserAllowedToView.Length); Assert.AreEqual(card2.Id, searchResult.CardsNotFoundAnymore_StillExists_UserAllowedToView.Single().CardId); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserAllowedToView); Assert.AreEqual(0, searchResult.CardsNotFoundAnymore_Deleted_UserAllowedToView.Length); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_StillExists_UserNotAllowedToView); Assert.AreEqual(0, searchResult.CountOfCardsNotFoundAnymore_Deleted_UserNotAllowedToView); } using (var dbContext = new MemCheckDbContext(db)) Assert.AreEqual(runDate, dbContext.SearchSubscriptions.Single(s => s.Id == subscriptionId).LastRunUtcDate); }