Exemple #1
0
        public ActionResult Leaderboard()
        {
            var submissionService = new SubmissionDataService();
            var submissions       = submissionService.GetAll();

            var successfulSubmissions = submissions
                                        .Where(submission => submission.IsSuccessful)
                                        .GroupBy(submission => submission.Nickname)
                                        .Select(group => group.ToList())
                                        .ToList();

            var leadersList = new List <LeaderboardViewModel>();

            foreach (var item in successfulSubmissions)
            {
                var solvedProblemsIds = item.Select(submission => submission.ProblemId).ToArray();
                var solvedProblems    = solvedProblemsIds
                                        .Select(problemId => problemList.Find(problem => problem.Id == problemId).Name).ToList();

                var newLeader = new LeaderboardViewModel
                {
                    Nickname = item.First().Nickname,
                    SuccessfulSolutionsCount = item.Count,
                    SolvedProblems           = solvedProblems
                };

                leadersList.Add(newLeader);
            }

            leadersList = leadersList.OrderByDescending(x => x.SuccessfulSolutionsCount).Take(5).ToList();

            return(View(leadersList));
        }
Exemple #2
0
        public async Task <IActionResult> SubmitAssignment(SubmissionInputViewModel input)
        {
            StudentDataService studentDataService = new StudentDataService(dbContext);
            Student            student            = studentDataService.GetStudentById(input.UserId);

            bool hasAccess = false;

            foreach (StudentClass studentClass in student.StudentClasses)
            {
                if (studentClass.ClassId == input.ClassId)
                {
                    hasAccess = true;
                }
            }

            if (ModelState.IsValid && hasAccess)
            {
                Submission submission = new Submission();

                submission.Input.SourceCode = input.SourceCode;
                submission.Input.Language   = input.Language;
                submission.AssignmentId     = input.AssignmentId;
                submission.UserId           = input.UserId;
                submission.SubmissionTime   = DateTime.Now;

                SubmissionDataService submissionService = new SubmissionDataService(dbContext);
                submissionService.AddSubmission(submission);
                await dbContext.SaveChangesAsync(); // SubmissionId now set on local submission


                AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);
                Assignment            assignment            = assignmentDataService.GetAssignmentById(submission.AssignmentId);

                assignment.Submissions.Add(submission);

                GraderMethod.GradeSubmission(submission, dbContext);
                submission.Output.Runtime = assignment.TimeLimit;

                if (submission.Compile())
                {
                    submission.RunAndCompare();
                    submission.GradeTestCases();
                    submission.MaxRunTime();
                }

                dbContext.Submissions.Update(submission);
                dbContext.Assignments.Update(assignment);

                await dbContext.SaveChangesAsync();

                submission.deleteJunkFiles();

                return(RedirectToAction("SubmissionDetails", "Assignment", new { id = submission.SubmissionId }));
            }

            return(RedirectToAction("UnAuthorized", "Home"));
        }
Exemple #3
0
        public IActionResult SubmissionDetails(int id)
        {
            SubmissionDataService submissionDataService = new SubmissionDataService(dbContext);
            var submission = submissionDataService.GetSubmissionById(id);

            AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext);

            ViewData["AssignmentName"] = assignmentDataService.GetAssignmentById(submission.AssignmentId).Name;

            return(View(submission));
        }
Exemple #4
0
        public ActionResult Index(SubmissionViewModel newSubmission)
        {
            if (ModelState.IsValid)
            {
                var submissionService = new SubmissionDataService();
                var submission        = new Submission
                {
                    Nickname     = newSubmission.Nickname,
                    ProblemId    = newSubmission.ProblemId,
                    Solution     = newSubmission.Solution,
                    IsSuccessful = true
                };

                // The API did not work as it should for me, so I assume all posted solutions are successful for now
                // var response = PostSubmission(submission);

                submissionService.Add(submission);

                return(RedirectToAction("SubmittedSolution"));
            }

            return(View(newSubmission));
        }
Exemple #5
0
        public void the_current_status_of_the_submission_is_returned()
        {
            //Arrange
            var fakeLrap1Repository = A.Fake <ILrap1SubmissionRepository>();
            var sut          = new SubmissionDataService(fakeLrap1Repository, null);
            var queryInvoker = new QueryInvoker(sut);

            A.CallTo(() => fakeLrap1Repository.GetById(A <string> .Ignored))
            .Returns(new Lrap1Submission()
            {
                ResponseType = ResponseType.Acknowledgment
            });

            //Act
            var query = new Lrap1StatusQuery()
            {
                ApplicationId = "123456890"
            };

            var result = queryInvoker.Query <Lrap1StatusQuery, Lrap1StatusQueryResult>(query);

            //Assert
            Assert.Equal(ResponseType.Acknowledgment, result.ResponseType);
        }
 public CommandInvoker(SubmissionDataService submissionDataService)
 {
     _submissionDataService = submissionDataService;
 }
        public void the_current_status_of_the_submission_is_returned()
        {
            //Arrange
            var fakeLrap1Repository = A.Fake<ILrap1SubmissionRepository>();
            var sut = new SubmissionDataService(fakeLrap1Repository, null);
            var queryInvoker = new QueryInvoker(sut);

            A.CallTo(() => fakeLrap1Repository.GetById(A<string>.Ignored))
                .Returns(new Lrap1Submission() {ResponseType = ResponseType.Acknowledgment});

            //Act
            var query = new Lrap1StatusQuery()
            {
                ApplicationId = "123456890"
            };

            var result = queryInvoker.Query<Lrap1StatusQuery, Lrap1StatusQueryResult>(query);

            //Assert
            Assert.Equal(ResponseType.Acknowledgment, result.ResponseType);
        }