Beispiel #1
0
        [InlineData("453a2901-150b-4211-84b1-a40ac2ba4a35", 16, 5, false)]  // Unsuccessful Rate (User not in group)
        public void TestPostRating(string userAspId, int groupId, int ratingValue, bool expectingSuccess)
        {
            var controllerContextMock = new Mock <ControllerContext>()
            {
                CallBase = true
            };
            var contextMock = new Mock <ApplicationDbContext>()
            {
                CallBase = true
            };

            contextMock.Setup(c => c.SaveChanges()).Returns(1);
            var controller = new GroupsController
            {
                ControllerContext = controllerContextMock.Object,
                Context           = contextMock.Object,
                GetUserId         = () => userAspId
            };

            var initialRateCall = controller.Rate(groupId);

            if (initialRateCall is HttpNotFoundResult)
            {
                // give an error because viewmodel cannot be extracted
                Assert.True(!expectingSuccess);
            }
            else
            {
                // ReSharper disable once PossibleNullReferenceException
                var ratingViewModel     = (GroupRatingViewModel)(initialRateCall as ViewResult).Model;
                var newRatingDictionary = new Dictionary <string, int>();
                foreach (var kvp in ratingViewModel.UserRatings)
                {
                    newRatingDictionary.Add(kvp.Key, ratingValue);
                }

                var newViewModel = new GroupRatingViewModel()
                {
                    GroupId     = ratingViewModel.GroupId,
                    UserRatings = newRatingDictionary
                };
                var result = controller.PostRating(newViewModel);

                if (expectingSuccess)
                {
                    Assert.True(result is RedirectToRouteResult);
                }
                else
                {
                    var valContext = new ValidationContext(newViewModel, null, null);
                    var valResults = new List <ValidationResult>();
                    if (Validator.TryValidateObject(newViewModel, valContext, valResults, true))
                    {
                        Assert.True(result is HttpNotFoundResult);
                    }
                    else
                    {
                        // This means that the passed model was not valid, meaning the system will not successfully save.
                        // However, ModelState object of the controller does not work properly in unit test cases.
                        // So, we deem this test a success, as if it had failed.
                        Assert.True(true);
                    }
                }
            }
        }
Beispiel #2
0
        // GET: RatingControls/Details/5
        public async Task <IActionResult> Group(int?id, int?disciplineId, string ReturnUrl)
        {
            if (id == null || disciplineId == null)
            {
                return(NotFound());
            }

            var groupRating = new GroupRatingViewModel();

            groupRating.RatingControls = await _context.RatingControls
                                         .Include(x => x.StudentRatings)
                                         .Where(x => x.SemesterDisciplineId == disciplineId && x.GroupId == id)
                                         .OrderBy(x => x.Number)
                                         .ToListAsync();

            groupRating.Group = _context.AcademicGroups
                                .Include(x => x.Specialty)
                                .Include(x => x.Students.OrderBy(y => y.FullName))
                                .ThenInclude(x => x.ActivityProtections
                                             .Where(y => _context.Activities
                                                    .Where(z => z.SemesterDisciplineId == disciplineId)
                                                    .Any(h => y.ActivityId == h.Id)))
                                .FirstOrDefault(x => x.Id == id);

            groupRating.SemesterDiscipline = _context.SemesterDiscipline
                                             .Include(x => x.Discipline)
                                             .Include(x => x.Activities.OrderBy(x => x.Type).ThenBy(x => x.Number))
                                             .ThenInclude(y => y.Type)
                                             .FirstOrDefault(x => x.Id == disciplineId);

            if (groupRating.SemesterDiscipline.Activities.Count() > 0)
            {
                if (groupRating.SemesterDiscipline.ControlType == ControlType.Exam)
                {
                    var examMultiplier  = 1f;
                    var pointMultiplier = 1f;
                    var exam            = groupRating.SemesterDiscipline.Activities
                                          .FirstOrDefault(x => x.Type.Name == EXAMTYPENAME);

                    if (exam != null)
                    {
                        examMultiplier = (float)(40f / exam.MaxPoints);

                        groupRating.SemesterDiscipline.Activities =
                            groupRating.SemesterDiscipline.Activities
                            .Where(x => x.Type.Name != EXAMTYPENAME)
                            .ToList();     //ToList().RemoveAll() обязательно заработает :/

                        var wttt = groupRating.SemesterDiscipline.Activities.Select(x => x.MaxPoints).Sum();
                        if (groupRating.SemesterDiscipline.Activities.Count() > 0)
                        {
                            pointMultiplier = (float)(60f / groupRating.SemesterDiscipline.Activities.Select(x => x.MaxPoints).Sum());
                        }

                        groupRating.SemesterDiscipline.Activities.Add(exam);
                        foreach (var student in groupRating.Group.Students)
                        {
                            foreach (var protection in student.ActivityProtections)
                            {
                                if (protection.ActivityId == exam.Id)
                                {
                                    protection.Points *= examMultiplier;
                                }
                                else
                                {
                                    protection.Points *= pointMultiplier;
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (var student in groupRating.Group.Students)
                        {
                            foreach (var protection in student.ActivityProtections)
                            {
                                protection.Points *= pointMultiplier;
                            }
                        }
                    }
                }
                else
                {
                    var pointMultiplier = (int)(100 / groupRating.SemesterDiscipline.Activities.Select(x => x.MaxPoints).Sum());
                    foreach (var student in groupRating.Group.Students)
                    {
                        foreach (var protection in student.ActivityProtections)
                        {
                            protection.Points *= pointMultiplier;
                        }
                    }
                }
            }

            ViewData["ReturnUrl"] = ReturnUrl;
            return(View(groupRating));
        }