public async Task NewOrOldReturnedTest(FlashcardsSearchCriterionEnum criterion) { int count = 20; int oldCount = 2; var category = (await AddCategories()).First(); var flashcards = await AddFlashcards(category, count); var user = (await AddUsers()).First(); var progress = await AddUserProgress(flashcards.Take(oldCount), new[] { user }); user.UserProgress = progress; flashcards.ForEach(f => f.UserProgress = new List <UserProgress>()); flashcards[0].UserProgress = progress.Where(up => up.FlashcardId == flashcards[0].Id).ToList(); flashcards[1].UserProgress = progress.Where(up => up.FlashcardId == flashcards[1].Id).ToList(); var flashcardsFromService = await Service.GetFlashcards(user, category.Id, criterion, count); if (criterion == FlashcardsSearchCriterionEnum.New) { int realCount = count - oldCount; Assert.Equal(realCount, flashcardsFromService.Count); Assert.DoesNotContain(flashcards[0], flashcardsFromService); Assert.DoesNotContain(flashcards[1], flashcardsFromService); } else { Assert.Equal(oldCount, flashcardsFromService.Count); Assert.Contains(flashcards[0], flashcardsFromService); Assert.Contains(flashcards[1], flashcardsFromService); } }
public UserCategorySelectionViewModel(ApiClient apiClient) { _apiClient = apiClient; SearchCriteria = GetEnumValues(); _selectedCriterion = SearchCriteria.ElementAt(0); _selectedCategory = null; Update(); }
public async Task <IActionResult> GetFlashcards([FromRoute] int categoryId, [FromQuery] FlashcardsSearchCriterionEnum strategy, [FromQuery] int count = 10) { try { var flashcards = await _service.GetFlashcards(await GetCurrentUser(), categoryId, strategy, count); return(Json(flashcards)); } catch (ArgumentException) { return(BadRequest()); } }
public async Task HardReturnedTest(FlashcardsSearchCriterionEnum criterion) { int count = 20; int properCount = 2; SetDefaultOpts(); int progressValue = criterion == FlashcardsSearchCriterionEnum.Hard ? Options.MaxHardProgress : Options .MinKnownProgress; int oppositeProgressValue = criterion == FlashcardsSearchCriterionEnum.Known ? Options.MaxHardProgress : Options .MinKnownProgress; var category = (await AddCategories()).First(); var flashcards = await AddFlashcards(category, count); var user = (await AddUsers()).First(); var progress = await AddUserProgress(flashcards.Take(properCount), new[] { user }); var oppositeProgress = await AddUserProgress(flashcards.Skip(properCount + 1), new[] { user }); progress.ForEach(p => p.Progress = progressValue); oppositeProgress.ForEach(p => p.Progress = oppositeProgressValue); user.UserProgress = new List <UserProgress>(); foreach (var userProgress in oppositeProgress) { foreach (var flashcard in flashcards) { if (userProgress.FlashcardId == flashcard.Id) { flashcard.UserProgress = new List <UserProgress> { userProgress } } ; } user.UserProgress.Add(userProgress); } flashcards[0].UserProgress = progress.Where(up => up.FlashcardId == flashcards[0].Id).ToList(); flashcards[1].UserProgress = progress.Where(up => up.FlashcardId == flashcards[1].Id).ToList(); flashcards[2].UserProgress = new List <UserProgress>(); var flashcardsFromService = await Service.GetFlashcards(user, category.Id, criterion, count); Assert.Equal(properCount, flashcardsFromService.Count); Assert.Contains(flashcards[0], flashcardsFromService); Assert.Contains(flashcards[1], flashcardsFromService); }
private bool IsProgressMatchMode(int progress, FlashcardsSearchCriterionEnum mode) { int maxHardProgress = _opts.MaxHardProgress; int minKnownProgress = _opts.MinKnownProgress; switch (mode) { case FlashcardsSearchCriterionEnum.Hard: return(progress <= maxHardProgress); case FlashcardsSearchCriterionEnum.Known: return(progress >= minKnownProgress); case FlashcardsSearchCriterionEnum.Old: return(true); default: throw new ArgumentException(nameof(mode)); } }
public FlashcardsSearchModel(string userId, int categoryId, FlashcardsSearchCriterionEnum criterion) { UserId = userId; CategoryId = categoryId; FlashcardsSearchCriterionEnum = criterion; }
private IQueryable <Flashcard> FilterFlashcards(IQueryable <Flashcard> flashcards, User user, FlashcardsSearchCriterionEnum mode) { if (mode == FlashcardsSearchCriterionEnum.New) { flashcards = flashcards.Where(f => f.UserProgress.All(up => up.UserId != user.Id)); } else if (mode != FlashcardsSearchCriterionEnum.All) { flashcards = flashcards.Where(f => f.UserProgress.Any(up => up.UserId == user.Id && IsProgressMatchMode(up.Progress, mode))); } return(flashcards); }
public async Task <List <Flashcard> > GetFlashcards(User user, int categoryId, FlashcardsSearchCriterionEnum mode, int count) { EnsureUser(user); var category = await _unitOfWork.CategoryRepository.GetById(categoryId); EnsureCategory(category); var flashcards = _unitOfWork.FlashcardRepository.GetAll(); flashcards = flashcards.Where(f => f.CategoryId == categoryId); flashcards = FilterFlashcards(flashcards, user, mode); flashcards = flashcards.OrderBy(r => Guid.NewGuid()).Take(count); return(flashcards.ToList()); }