示例#1
0
        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());
            }
        }
示例#4
0
        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());
        }