public void TestComparerEmptyList()
        {
            var comparer = new MoreLikeThisComparer("Math", "1");
            var cards    = new List <ItemCardViewModel>();
            var ordered  = cards.OrderBy(c => c, comparer).ToList();

            Assert.NotNull(ordered);
            Assert.Empty(ordered);
        }
        public void TestComparerNullSubject()
        {
            var comparer = new MoreLikeThisComparer(null, "1");
            var card1    = ItemCardViewModel.Create(subjectCode: "Math", claimCode: "1");
            var card2    = ItemCardViewModel.Create(subjectCode: "Math", claimCode: "2");
            var card3    = ItemCardViewModel.Create(subjectCode: "Ela", claimCode: "2");
            var cards    = new List <ItemCardViewModel>()
            {
                card2, card1, card3
            };
            var ordered = cards.OrderBy(c => c, comparer).ToList();

            Assert.NotNull(ordered);
            Assert.Equal(cards.Count, ordered.Count);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets up to 3 items same grade, grade above, and grade below. All items
        /// </summary>
        /// <param name="grade"></param>
        /// <param name="subject"></param>
        /// <param name="claim"></param>
        public MoreLikeThisViewModel GetMoreLikeThis(SampleItem sampleItem)
        {
            var subjectCode = sampleItem.Subject.Code;
            var claimCode   = sampleItem.Claim?.Code;
            var grade       = sampleItem.Grade;
            var itemKey     = sampleItem.ItemKey;
            var bankKey     = sampleItem.BankKey;

            var matchingSubjectClaim = context.ItemCards.Where(i => i.SubjectCode == subjectCode && i.ClaimCode == claimCode);
            int numExpected          = context.AppSettings.SettingsConfig.NumMoreLikeThisItems;

            var comparer = new MoreLikeThisComparer(subjectCode, claimCode);

            bool        isHighSchool = GradeLevels.High.Contains(grade);
            GradeLevels gradeBelow   = isHighSchool ? GradeLevels.Grade8 : grade.GradeBelow();
            GradeLevels gradeAbove   = grade.GradeAbove();

            IEnumerable <ItemCardViewModel> cardsGradeAbove = null;

            // Only display above if not a high school grade
            if (!isHighSchool)
            {
                // take grade 11 if gradeabove is high school (only high school items are grade 11)
                gradeAbove      = GradeLevels.High.Contains(gradeAbove) ? GradeLevels.Grade11 : gradeAbove;
                cardsGradeAbove = context.ItemCards
                                  .Where(i => i.Grade == gradeAbove)
                                  .OrderBy(i => i, comparer)
                                  .Take(numExpected);
            }

            var cardsSameGrade = context.ItemCards
                                 .Where(i => i.Grade == grade && i.ItemKey != itemKey)
                                 .OrderBy(i => i, comparer)
                                 .Take(numExpected);

            var cardsGradeBelow = context.ItemCards
                                  .Where(i => i.Grade == gradeBelow)
                                  .OrderBy(i => i, comparer)
                                  .Take(numExpected);

            var moreLikeThisVM = new MoreLikeThisViewModel(
                ToColumn(cardsGradeBelow, gradeBelow),
                ToColumn(cardsSameGrade, grade),
                ToColumn(cardsGradeAbove, gradeAbove)
                );

            return(moreLikeThisVM);
        }