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", "Невалидно разширение на файл!"); } } }
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); } } }