public void ReadSubmissionResultsWhenParticipantHasSubmissionsShouldReturnNumberOfSubmissions()
        {
            var contest = this.CreateAndSaveContest("contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);

            var problem = new Problem();
            contest.Problems.Add(problem);

            var submissionType = new SubmissionType();
            contest.SubmissionTypes.Add(submissionType);

            var participant = new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete);
            contest.Participants.Add(participant);

            for (int i = 0; i < 10; i++)
            {
                var submission = new Submission
                {
                    ContentAsString = "Test submission " + i,
                    SubmissionType = submissionType,
                    Problem = problem
                };

                participant.Submissions.Add(submission);
            }

            this.EmptyOjsData.SaveChanges();

            var result = this.CompeteController
                .ReadSubmissionResults(new DataSourceRequest(), problem.Id, this.IsCompete) as JsonResult;

            var responseData = result.Data as DataSourceResult;
            Assert.AreEqual(participant.Submissions.Count, responseData.Total);
        }
        public void GetAllowedSubmissionTypesWhenRequestIsValidShouldReturnSubmissionTypes()
        {
            var contest = this.CreateAndSaveContest("testName", this.ActiveContestWithPasswordAndQuestionsOptions, this.ActiveContestWithPasswordAndQuestionsOptions);

            var javaSubmissionType = new SubmissionType
            {
                IsSelectedByDefault = true,
                Name = "java type",
                CompilerType = CompilerType.Java
            };

            var csharpSubmissionType = new SubmissionType
            {
                Name = "c# type",
                CompilerType = CompilerType.CSharp
            };

            contest.SubmissionTypes.Add(javaSubmissionType);
            contest.SubmissionTypes.Add(csharpSubmissionType);
            this.EmptyOjsData.SaveChanges();

            var result = this.CompeteController.GetAllowedSubmissionTypes(contest.Id) as JsonResult;
            var data = result.Data as IEnumerable<SelectListItem>;
            Assert.IsNotNull(result);
            Assert.AreEqual(contest.SubmissionTypes.Count, data.Count());
            Assert.IsFalse(data.Any(x => !contest.SubmissionTypes.Any(t => t.Id.ToString() == x.Value && t.Name == x.Text)));
            Assert.IsTrue(data.FirstOrDefault(x => x.Text == "java type").Selected);
        }
        public void GetSubmissionContentWhenInvalidSubmissionIdShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("sample Name", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);
            var problem = new Problem();
            contest.Problems.Add(problem);

            var submissionType = new SubmissionType();
            contest.SubmissionTypes.Add(submissionType);

            var participant = new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete);
            contest.Participants.Add(participant);
            var submission = new Submission
            {
                ContentAsString = "test content"
            };

            participant.Submissions.Add(submission);
            this.EmptyOjsData.SaveChanges();

            try
            {
                var result = this.CompeteController.GetSubmissionContent(-1);
                Assert.Fail("Expected an exception when an invalid submission id is provided.");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.NotFound, ex.GetHttpCode());
            }
        }
        public void ReadSubmissionResultsWhenParticipantHasNoSubmissionShouldReturnNoResults()
        {
            var contest = this.CreateAndSaveContest("contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);
            var problem = new Problem();
            var submissionType = new SubmissionType();
            contest.Problems.Add(problem);
            contest.SubmissionTypes.Add(submissionType);
            contest.Participants.Add(new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete));
            this.EmptyOjsData.SaveChanges();

            var result = this.CompeteController
                .ReadSubmissionResults(new DataSourceRequest(), problem.Id, this.IsCompete) as JsonResult;

            var responseData = result.Data as DataSourceResult;
            Assert.AreEqual(0, responseData.Total);
        }
        public void GetSubmissionContentWhenSubmissionNotMadeByTheParticipantShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("sample Name", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);
            var problem = new Problem();
            contest.Problems.Add(problem);

            var submissionType = new SubmissionType();
            contest.SubmissionTypes.Add(submissionType);

            var participant = new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete);

            var anotherUser = new UserProfile
            {
                UserName = "******",
                Email = "*****@*****.**"
            };

            this.EmptyOjsData.Users.Add(anotherUser);
            var anotherParticipant = new Participant(contest.Id, anotherUser.Id, this.IsCompete);

            contest.Participants.Add(participant);
            contest.Participants.Add(anotherParticipant);

            var submission = new Submission
            {
                ContentAsString = "test content"
            };

            anotherParticipant.Submissions.Add(submission);
            this.EmptyOjsData.SaveChanges();

            try
            {
                var result = this.CompeteController.GetSubmissionContent(submission.Id);
                Assert.Fail("Expected an exception when trying to download a submission that was not made by the participant that requested it.");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.Forbidden, ex.GetHttpCode());
            }
        }
        public void SubmitActionWhenParticipantSendsAnotherSubmissionBeforeLimitHasPassedShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("test contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);
            contest.LimitBetweenSubmissions = 100;

            var problem = new Problem
            {
                Name = "test problem"
            };

            var submissionType = new SubmissionType
            {
                Name = "test submission type"
            };

            contest.Problems.Add(problem);
            contest.SubmissionTypes.Add(submissionType);
            contest.Participants.Add(new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete));
            this.EmptyOjsData.SaveChanges();

            var submission = new SubmissionModel
            {
                Content = "test content",
                ProblemId = problem.Id,
                SubmissionTypeId = submissionType.Id
            };

            var result = this.CompeteController.Submit(submission, this.IsCompete) as JsonResult;
            var receivedContestId = (int)result.Data;
            Assert.AreEqual(receivedContestId, contest.Id);

            try
            {
                var secondSubmissionResult = this.CompeteController.Submit(submission, this.IsCompete);
                Assert.Fail("Expected an exception when a participant sends too many submissions");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.ServiceUnavailable, ex.GetHttpCode());
            }
        }
        public void ReadSubmissionResultsWhenUserNotRegisteredForContestShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);

            var problem = new Problem();
            contest.Problems.Add(problem);

            var submissionType = new SubmissionType();
            contest.SubmissionTypes.Add(submissionType);

            this.EmptyOjsData.SaveChanges();

            try
            {
                var result = this.CompeteController.ReadSubmissionResults(new DataSourceRequest(), problem.Id, this.IsCompete);
                Assert.Fail("Expected an exception when user is not registered for exam, but tries to access his results");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.Unauthorized, ex.GetHttpCode());
            }
        }
        public void SubmitActionWhenParticipantSendsAnotherSubmissionAndThereIsNoLimitShouldReturnJson()
        {
            var contest = this.CreateAndSaveContest("test contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);

            // no limit between submissions
            contest.LimitBetweenSubmissions = 0;

            var problem = new Problem
            {
                Name = "test problem"
            };

            var submissionType = new SubmissionType
            {
                Name = "test submission type"
            };

            contest.Problems.Add(problem);
            contest.SubmissionTypes.Add(submissionType);
            contest.Participants.Add(new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete));
            this.EmptyOjsData.SaveChanges();

            var submission = new SubmissionModel
            {
                Content = "test content",
                ProblemId = problem.Id,
                SubmissionTypeId = submissionType.Id
            };

            var result = this.CompeteController.Submit(submission, this.IsCompete) as JsonResult;
            var receivedContestId = (int)result.Data;
            Assert.AreEqual(receivedContestId, contest.Id);

            var secondSubmissionResult = this.CompeteController.Submit(submission, this.IsCompete) as JsonResult;
            var secondSubmissionResultContestId = (int)secondSubmissionResult.Data;

            Assert.AreEqual(receivedContestId, secondSubmissionResultContestId);
        }
 public SubmissionType GetEntityModel(SubmissionType model = null)
 {
     model = model ?? new SubmissionType();
     model.Id = this.Id;
     model.Name = this.Name;
     model.IsSelectedByDefault = this.IsSelectedByDefault;
     model.ExecutionStrategyType = this.ExecutionStrategyType;
     model.CompilerType = this.CompilerType;
     model.AdditionalCompilerArguments = this.AdditionalCompilerArguments;
     model.Description = this.Description;
     model.AllowBinaryFilesUpload = this.AllowBinaryFilesUpload;
     model.AllowedFileExtensions = this.AllowedFileExtensions;
     return model;
 }
        public void SubmitActionWhenUserIsNotRegisteredToParticipateShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("someContest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);
            var problem = new Problem
            {
                Name = "test problem"
            };

            var submissionType = new SubmissionType
            {
                Name = "test submission type"
            };

            contest.Problems.Add(problem);
            contest.SubmissionTypes.Add(submissionType);
            this.EmptyOjsData.SaveChanges();

            var submission = new SubmissionModel
            {
                Content = "test submission",
                ProblemId = problem.Id,
                SubmissionTypeId = submissionType.Id
            };

            try
            {
                var result = this.CompeteController.Submit(submission, this.IsCompete);
                Assert.Fail("An exception was expected when a user is trying to submit for a contest that he isn't registered for.");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.Unauthorized, ex.GetHttpCode());
            }
        }
        public void SubmitActionWhenParticipantSendsEmptySubmissionContestShouldThrowException()
        {
            var contest = this.CreateAndSaveContest("test contest", this.ActiveContestNoPasswordOptions, this.ActiveContestNoPasswordOptions);

            // no limit between submissions
            contest.LimitBetweenSubmissions = 0;

            var problem = new Problem
            {
                Name = "test problem"
            };

            var submissionType = new SubmissionType
            {
                Name = "test submission type"
            };

            contest.Problems.Add(problem);
            contest.SubmissionTypes.Add(submissionType);
            contest.Participants.Add(new Participant(contest.Id, this.FakeUserProfile.Id, this.IsCompete));
            this.EmptyOjsData.SaveChanges();

            var submission = new SubmissionModel
            {
                Content = string.Empty,
                ProblemId = problem.Id,
                SubmissionTypeId = submissionType.Id
            };

            this.TryValidateModel(submission, this.CompeteController);

            try
            {
                var result = this.CompeteController.Submit(submission, this.IsCompete);
                Assert.Fail("Expected an exception when sending a submission with no content");
            }
            catch (HttpException ex)
            {
                Assert.AreEqual((int)HttpStatusCode.BadRequest, ex.GetHttpCode());
            }
        }
        private void ValidateBinarySubmission(ModelType model, Problem problem, SubmissionType submissionType)
        {
            if (submissionType.AllowBinaryFilesUpload && !string.IsNullOrEmpty(model.ContentAsString))
            {
                this.ModelState.AddModelError("SubmissionTypeId", "Невалиден тип на решението!");
            }

            if (submissionType.AllowedFileExtensions != null)
            {
                if (!submissionType.AllowedFileExtensionsList.Contains(model.FileExtension))
                {
                    this.ModelState.AddModelError("Content", "Невалидно разширение на файл!");
                }
            }
        }
Esempio n. 13
0
 public SubmissionType GetEntityModel(SubmissionType model = null)
 {
     model = model ?? new SubmissionType();
     model.Id = this.Id.Value;
     return model;
 }
        private void ValidateBinarySubmission(ModelType model, Problem problem, SubmissionType submissionType)
        {
            if (submissionType.AllowBinaryFilesUpload && !string.IsNullOrEmpty(model.ContentAsString))
            {
                this.ModelState.AddModelError("SubmissionTypeId", Resource.Wrong_submision_type);
            }

            if (submissionType.AllowedFileExtensions != null)
            {
                if (!submissionType.AllowedFileExtensionsList.Contains(model.FileExtension))
                {
                    this.ModelState.AddModelError("Content", Resource.Invalid_file_extention);
                }
            }
        }