public async Task ModalProcess_LockNotFound()
        {
            var tc     = new SubmissionController(_logger, _scontext);
            var result = await tc.ModalProcess(2, "Accept", "Nah", "id", "04/01/2020", "04/15/2020", "pName", "cName", "PRIME", "timesheetIndex", 1, "providerId") as ViewResult;

            Assert.AreEqual("NoPermission", result.ViewName);
        }
        public ActionResult Index(Assignment model, IEnumerable <HttpPostedFileBase> files)
        {
            Assignment = db.Assignments.Find(model.ID);

            bool newUpload = false;

            foreach (var file in files)
            {
                if (file != null && file.ContentLength > 0)
                {
                    newUpload = true;
                    break;
                }
            }

            if (files != null && newUpload)
            {
                //clear review teams first
                Assignment.ReviewTeams.Clear();
                db.Entry(Assignment).State = System.Data.EntityState.Modified;
                db.SaveChanges();
                //submit file to the system
                SubmissionController submission = new SubmissionController();
                //removed: ActiveCourseUser.AbstractCourse.ID
                submission.Create(model.ID, files, null);
            }

            WasUpdateSuccessful = true;
            return(base.PostBack(model));
        }
示例#3
0
        public void CanCreateAssignmentForAnchorDiscussion()
        {
            AbstractCourse c = new Course();
            //Given posted files
            //-generate 2 files
            HttpPostedFileWrapper     file1 = new HttpPostedFileWrapper(null);
            HttpPostedFileWrapper     file2 = new HttpPostedFileWrapper(null);
            List <HttpPostedFileBase> files = new List <HttpPostedFileBase>();

            files.Add(file1);
            files.Add(file2);

            //Given existing assignment
            //-get from db
            int assign = 10;

            //Given AuthorTeamId
            int            authorteam = 75;
            AssignmentTeam at         = new AssignmentTeam();

            at.TeamID = authorteam;

            //When Create assignment for anchor discussion is requested
            SubmissionController sc = new SubmissionController();

            sc.Create(assign, files, authorteam);



            //Then the files are generated on path
            string submission = OSBLE.FileSystem.GetDeliverable(c as Course,
                                                                assign, at, null, null);
        }
示例#4
0
        public void Gets_syntax_error_hint()
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var submission = new ChallengeSubmissionDTO
            {
                ChallengeId = 41,
                LearnerId   = 1,
                SourceCode  = new []
                {
                    @"public class Test
                    {
                        private string name;
                        public Test() { name = test }
                    }"
                }
            };

            var actualEvaluation = ((OkObjectResult)controller.SubmitChallenge(submission).Result).Value as ChallengeEvaluationDTO;

            actualEvaluation.ApplicableHints.Count.ShouldBe(1);
            var errors = actualEvaluation.ApplicableHints[0].Content;

            errors.Split("\n").Length.ShouldBe(1);
        }
示例#5
0
        /// <summary>
        /// Views grades.
        /// </summary>
        /// <param name="dList">Data list for submission list.</param>
        /// <param name="sid">Student ID.</param>
        /// <param name="courseId">Course ID.</param>
        public void ViewAssignmentGradeByStudent(DataList dList, string sid, string courseId)
        {
            DataTable      dt             = new DataTable();
            SubmissionList submissionList = SubmissionController.GetItem(sid, courseId);

            DataColumn dc = new DataColumn();

            dc.DataType   = Type.GetType("System.String");
            dc.ColumnName = "ATitle";
            dt.Columns.Add(dc);

            DataColumn dc1 = new DataColumn();

            dc1.DataType   = Type.GetType("System.String");
            dc1.ColumnName = "Grade";
            dt.Columns.Add(dc1);

            DataRow dr;

            if (submissionList != null)
            {
                foreach (Submission sb in submissionList)
                {
                    dr           = dt.NewRow();
                    dr["ATitle"] = sb.Assignment.ATitle;
                    dr["Grade"]  = sb.Grade;
                    dt.Rows.Add(dr);
                }
            }
            dList.DataSource = dt;
            dList.DataBind();
        }
        public async Task ModalProcess_SubmissionNotFound()
        {
            var tc     = new SubmissionController(_logger, _scontext);
            var result = await tc.ModalProcess(-1, "Accept", "Nah", "id", "04/01/2020", "04/15/2020", "pName", "cName", "PRIME", "timesheetIndex", 1, "providerId");

            Assert.IsInstanceOf(typeof(NotFoundResult), result);
        }
示例#7
0
        protected void dlCommandItem(object sender, DataListCommandEventArgs e)
        {
            string filePath = ((Label)e.Item.FindControl("lblAFileLocation")).Text;

            if (e.CommandName == "View")
            {
                DownloadFile(filePath, true);
            }
            else
            {
                //Call to delete the assignment
                //Get the assignment ID
                Int32 assignmentID = Convert.ToInt32(((Label)e.Item.FindControl("lblAssignmentID")).Text);
                //Get file location of the Assignment.
                string filePathToDelete = ((Label)e.Item.FindControl("lblAFileLocation")).Text;

                if (SubmissionController.GetItem(assignmentID) == null)
                {
                    AssignmentController.Delete(assignmentID);
                    File.Delete(filePath);
                }
                else
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "errorDelete",
                                                       "alert('This assignment cannot be deleted!!!');",
                                                       true);
                }
                Helper.ViewAssignment(dlistAssignment, Session["CourseID"].ToString());
            }
        }
        public void Setup()
        {
            this._referenceServices = Substitute.For <IReferenceServices>();
            this._submissionService = Substitute.For <ISubmissionService>();
            this._salonYearService  = Substitute.For <ISalonYearService>();

            this.submissionController = new SubmissionController(this._referenceServices, this._submissionService, this._salonYearService);
            Mapping.CreateConfiguration();
        }
示例#9
0
        public void Accepts_question_submission_and_produces_correct_evaluation(QuestionSubmissionDTO submission, bool expectedCorrectness)
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var dbContext  = scope.ServiceProvider.GetRequiredService <SmartTutorContext>();

            controller.SubmitQuestionAnswers(submission);

            var actualSubmission = dbContext.QuestionSubmissions.OrderBy(s => s.TimeStamp).Last(q => q.QuestionId == submission.QuestionId);

            actualSubmission.IsCorrect.ShouldBe(expectedCorrectness);
        }
示例#10
0
        public void Rejects_bad_challenge_submission()
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var submission = new ChallengeSubmissionDTO
            {
                ChallengeId = 41,
                LearnerId   = 1
            };

            controller.SubmitChallenge(submission).Result.ShouldBeOfType <BadRequestObjectResult>();
        }
示例#11
0
        public void Should_Be_Higher_Score_When_Get_By_Challenge_Id(int challengeId)
        {
            var fakes       = new Fakes();
            var fakeService = fakes.FakeSubmissionService().Object;
            var expected    = fakeService.FindHigherScoreByChallengeId(challengeId);

            var controller = new SubmissionController(fakeService, fakes.Mapper);
            var result     = controller.GetHigherScore(challengeId);

            Assert.IsType <OkObjectResult>(result.Result);
            var actual = (result.Result as OkObjectResult).Value;

            Assert.IsType <decimal>(actual);
            Assert.Equal(expected, (decimal)actual);
        }
示例#12
0
        public async Task List_Returns_paging_result(
            [Frozen] Mock <ISubmissionService> submissionServiceMock,
            SubmissionController sut,
            PagingInformation pagingInformation,
            PagingResult <Submission> submissions)
        {
            submissionServiceMock
            .Setup(x => x.ListAsync(pagingInformation, CancellationToken.None))
            .Returns(Task.FromResult(submissions));

            var response = await sut.List(pagingInformation, CancellationToken.None);

            Assert.IsInstanceOf <ViewResult>(response);

            submissionServiceMock.VerifyAll();
        }
示例#13
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            SubmissionList slist = new SubmissionList();

            foreach (DataListItem item in dlGradeAssignmentByInstructor.Items)
            {
                Submission s = new Submission();
                s.Student.SId             = ((Label)item.FindControl("lblStudentID")).Text;
                s.Grade                   = Convert.ToDecimal(((TextBox)item.FindControl("txtBoxGrade")).Text);
                s.Assignment.AssignmentId = assignmentId;
                slist.Add(s);
            }
            SubmissionController.Save(slist);
            slist.Clear();
            Response.Redirect("~/Presentation/formAssignment.aspx");
        }
示例#14
0
        public void Should_Be_Ok_When_Find_By_Challenge_And_Acceleration(int challengeId, int accelerationId)
        {
            var fakes       = new Fakes();
            var fakeService = fakes.FakeSubmissionService().Object;
            var expected    = fakeService.FindByChallengeIdAndAccelerationId(challengeId, accelerationId).
                              Select(x => fakes.Mapper.Map <SubmissionDTO>(x)).
                              ToList();

            var controller = new SubmissionController(fakeService, fakes.Mapper);
            var result     = controller.GetAll(challengeId: challengeId, accelerationId: accelerationId);

            Assert.IsType <OkObjectResult>(result.Result);
            var actual = (result.Result as OkObjectResult).Value as List <SubmissionDTO>;

            Assert.NotNull(actual);
            Assert.Equal(expected, actual, new SubmissionDTOIdComparer());
        }
示例#15
0
        public void Accepts_challenge_submission_and_produces_correct_evaluation(ChallengeSubmissionDTO submission, ChallengeEvaluationDTO expectedEvaluation)
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var dbContext  = scope.ServiceProvider.GetRequiredService <SmartTutorContext>();

            var actualEvaluation = ((OkObjectResult)controller.SubmitChallenge(submission).Result).Value as ChallengeEvaluationDTO;

            actualEvaluation.SolutionLO.Id.ShouldBe(expectedEvaluation.SolutionLO.Id);
            actualEvaluation.ChallengeId.ShouldBe(expectedEvaluation.ChallengeId);
            actualEvaluation.ApplicableHints.Count.ShouldBe(expectedEvaluation.ApplicableHints.Count);
            actualEvaluation.ApplicableHints.Select(h => h.LearningObject.Id)
            .All(expectedEvaluation.ApplicableHints.Select(i => i.LearningObject.Id).Contains).ShouldBeTrue();

            var actualSubmission = dbContext.ChallengeSubmissions.OrderBy(s => s.TimeStamp).Last(c => c.ChallengeId == submission.ChallengeId);

            actualSubmission.IsCorrect.ShouldBe(expectedEvaluation.ChallengeCompleted);
        }
        public async Task Post_BadResponse_ModelError()
        {
            var mockSubmissionService = new Mock <ISubmissionService>();
            var mockLoggingService    = new Mock <ILogger <SubmissionController> >();
            var mockErrorModel        = new Mock <ErrorModel>();

            mockSubmissionService.Setup(serv => serv.AddSubmissionAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .ReturnsAsync(true)
            .Verifiable();

            var controller = new SubmissionController(mockLoggingService.Object, mockSubmissionService.Object, mockErrorModel.Object);

            controller.ModelState.AddModelError("Error", "Error");

            var result = await controller.Post(GetTestSubmissions().First());

            var badRequest = Assert.IsType <BadRequestObjectResult>(result); // Check if HTTP Bad Request sent back
            var correctDto = Assert.IsType <ResponseDTO>(badRequest.Value);  // Check if ResponseDTO sent
        }
        public async Task Post_OKResponse_GoodModel()
        {
            var mockSubmissionService = new Mock <ISubmissionService>();
            var mockLoggingService    = new Mock <ILogger <SubmissionController> >();
            var mockErrorModel        = new Mock <ErrorModel>();

            mockSubmissionService.Setup(serv => serv.AddSubmissionAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .ReturnsAsync(true)
            .Verifiable();

            var controller = new SubmissionController(mockLoggingService.Object, mockSubmissionService.Object, mockErrorModel.Object);

            var result = await controller.Post(GetTestSubmissions().First());

            var okRequest  = Assert.IsType <OkObjectResult>(result);       // Check if HTTP OK sent back
            var correctDto = Assert.IsType <ResponseDTO>(okRequest.Value); // Check if ResponseDTO sent

            Assert.Empty(correctDto.Errors);                               // Check if DTO has no errors listed.
        }
示例#18
0
        public void Question_and_learner_are_in_different_courses_returns_forbidden_status()
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var submission = new QuestionSubmissionDTO
            {
                QuestionId = 17, Answers = new List <QuestionAnswerDTO>
                {
                    new QuestionAnswerDTO {
                        Id = 2
                    },
                    new QuestionAnswerDTO {
                        Id = 5
                    }
                },
                LearnerId = 4
            };

            controller.SubmitQuestionAnswers(submission).Result.ShouldBeOfType(typeof(ForbidResult));
        }
示例#19
0
        public void EntryLimitReachedTest()
        {
            var _db = GetDatabaseContext();
            var subRepo = new SubmissionRepo(_db);
            var controller = new SubmissionController(_db, subRepo);

            Submission submission = new Submission("Egon", "*****@*****.**", 44, 63307008);
            Submission submission2 = new Submission("Egon", "*****@*****.**", 44, 63307008);

            controller.Create(submission);
            controller.Create(submission2);

            int subCount = subRepo.GetSubmissions().Count();

            controller.Create(submission);
            string v = subRepo.ValidateSubmission(submission);

            Assert.AreEqual(2, subCount);
            Assert.AreEqual("Too many entries", v);
        }
示例#20
0
        public void SubmitAssignment(int assignmentId, byte[][] data, string authToken)
        {
            if (authService.IsValidKey(authToken))
            {
                UserProfile currentUser = authService.GetActiveUser(authToken);

                //turn byte data into HttpPostedFileBase for file submission
                List <HttpPostedFileBase> files = new List <HttpPostedFileBase>();
                foreach (byte[] file in data)
                {
                    /*
                     * HttpPostedFile assignmentFile = new HttpPostedFile();
                     * StreamWriter writer = new StreamWriter(assignmentFile.InputStream);
                     * writer.Write(file);
                     * assignmentFile.InputStream.Position = 0;
                     * */
                }

                SubmissionController submission = new SubmissionController();
                submission.Create(assignmentId, files);
            }
        }
示例#21
0
        public void Should_Be_Ok_When_Post()
        {
            var fakes       = new Fakes();
            var fakeService = fakes.FakeSubmissionService().Object;
            var expected    = new SubmissionDTO()
            {
                UserId      = 2,
                ChallengeId = 6,
                Score       = 90
            };

            var controller = new SubmissionController(fakeService, fakes.Mapper);
            var result     = controller.Post(expected);

            Assert.IsType <OkObjectResult>(result.Result);
            var actual = (result.Result as OkObjectResult).Value as SubmissionDTO;

            Assert.NotNull(actual);
            Assert.Equal(expected.UserId, actual.UserId);
            Assert.Equal(expected.ChallengeId, actual.ChallengeId);
            Assert.Equal(expected.Score, actual.Score);
        }
示例#22
0
        /// <summary>
        /// Views grades.
        /// </summary>
        /// <param name="dList">Data list for submission list.</param>
        /// <param name="sid">Student ID.</param>
        /// <param name="courseId">Course ID.</param>
        public void ViewAssignmentGradeByStudent(DataList dList, string courseId)
        {
            DataTable      dt             = new DataTable();
            SubmissionList submissionList = SubmissionController.GetItemByCourse(courseId);
            DataColumn     dc             = new DataColumn();

            dc.DataType   = Type.GetType("System.String");
            dc.ColumnName = "StudentName";
            dt.Columns.Add(dc);

            DataColumn dc1 = new DataColumn();

            dc1.DataType   = Type.GetType("System.String");
            dc1.ColumnName = "AggregateGrade";
            dt.Columns.Add(dc1);

            DataColumn dc2 = new DataColumn();

            dc2.DataType   = Type.GetType("System.String");
            dc2.ColumnName = "StudentID";
            dt.Columns.Add(dc2);

            DataRow dr;

            if (submissionList != null)
            {
                foreach (Submission sb in submissionList)
                {
                    dr = dt.NewRow();
                    dr["StudentID"]      = sb.Student.SId;
                    dr["AggregateGrade"] = sb.Grade.ToString(".00");
                    dr["StudentName"]    = sb.Student.FullName;
                    dt.Rows.Add(dr);
                }
            }
            dList.DataSource = dt;
            dList.DataBind();
        }
        public async Task Post_BadResponse_ErrorCountGreaterThanZero()
        {
            var mockSubmissionService = new Mock <ISubmissionService>();
            var mockLoggingService    = new Mock <ILogger <SubmissionController> >();
            var mockErrorModel        = new Mock <ErrorModel>();

            mockErrorModel.Object.Errors.Add(new Error()
            {
                ErrorMessage = "Random accumulated error from controller or service"
            });
            mockSubmissionService.Setup(serv => serv.AddSubmissionAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .ReturnsAsync(false)
            .Verifiable();

            var controller = new SubmissionController(mockLoggingService.Object, mockSubmissionService.Object, mockErrorModel.Object);

            var result = await controller.Post(GetTestSubmissions().First());

            var badRequest = Assert.IsType <BadRequestObjectResult>(result); // Check if HTTP Bad Request sent back
            var correctDto = Assert.IsType <ResponseDTO>(badRequest.Value);  // Check if ResponseDTO sent

            Assert.NotEmpty(correctDto.Errors);                              // Check if DTO has errors listed.
        }
示例#24
0
        public void Rejects_bad_arrange_task_submission()
        {
            using var scope = _factory.Services.CreateScope();
            var controller = new SubmissionController(_factory.Services.GetRequiredService <IMapper>(), scope.ServiceProvider.GetRequiredService <ISubmissionService>());
            var submission = new ArrangeTaskSubmissionDTO
            {
                ArrangeTaskId = 32, LearnerId = 1,
                Containers    = new List <ArrangeTaskContainerDTO>
                {
                    new ArrangeTaskContainerDTO
                    {
                        Id = 1, Elements = new List <ArrangeTaskElementDTO>
                        {
                            new ArrangeTaskElementDTO {
                                Id = 1
                            }
                        }
                    }
                }
            };

            Should.Throw <InvalidOperationException>(() => controller.SubmitArrangeTask(submission));
        }
        public async Task ModalProcess_LockDoesntMatchUser()
        {
            var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, "bob"),
                new Claim(ClaimTypes.Name, "bob")
            }));

            var tc = new SubmissionController(_logger, _scontext)
            {
                ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        User = user
                    }
                }
            };

            var result = await tc.ModalProcess(1, "Accept", "Nah", "id", "04/01/2020", "04/15/2020", "pName", "cName", "PRIME", "timesheetIndex", 1, "providerId") as ViewResult;

            Assert.AreEqual("NoPermission", result.ViewName);
        }
示例#26
0
        /// <summary>
        /// Views information about the assignment submission.
        /// </summary>
        /// <param name="dlistLectureNote">Data list for submission list.</param>
        /// <param name="assignmentId">ID of the assignment.</param>
        public void ViewSubmission(DataList dlistLectureNote, int assignmentId)
        {
            SubmissionList submissionList;
            DataTable      dt = new DataTable();

            submissionList = SubmissionController.GetItem(assignmentId);

            DataColumn dc = new DataColumn();

            dc.DataType   = Type.GetType("System.String");
            dc.ColumnName = "StudentName";
            dt.Columns.Add(dc);

            DataColumn dc1 = new DataColumn();

            dc1.DataType   = Type.GetType("System.String");
            dc1.ColumnName = "ATitle";
            dt.Columns.Add(dc1);

            DataColumn dc2 = new DataColumn();

            dc2.DataType   = Type.GetType("System.String");
            dc2.ColumnName = "SubmissionDate";
            dt.Columns.Add(dc2);

            DataColumn dc3 = new DataColumn();

            dc3.DataType   = Type.GetType("System.String");
            dc3.ColumnName = "Grade";
            dt.Columns.Add(dc3);

            DataColumn dc4 = new DataColumn();

            dc4.DataType   = Type.GetType("System.String");
            dc4.ColumnName = "StudentID";
            dt.Columns.Add(dc4);

            DataColumn dc5 = new DataColumn();

            dc5.DataType   = Type.GetType("System.String");
            dc5.ColumnName = "FileLocation";
            dt.Columns.Add(dc5);

            DataRow dr;

            if (submissionList != null)
            {
                foreach (Submission sb in submissionList)
                {
                    dr = dt.NewRow();
                    dr["StudentName"]    = sb.Student.FullName;
                    dr["ATitle"]         = sb.Assignment.ATitle;
                    dr["SubmissionDate"] = sb.SubmissionDate.ToShortDateString();
                    dr["Grade"]          = sb.Grade;
                    dr["StudentID"]      = sb.Student.SId;
                    dr["FileLocation"]   = sb.FileLocation;
                    dt.Rows.Add(dr);
                }
            }
            else
            {
                btnSave.Visible             = false;
                lblNoAssignmentText.Text    = "No files submitted by students.";
                lblNoAssignmentText.Visible = true;
            }
            dlistLectureNote.DataSource = dt;
            dlistLectureNote.DataBind();
        }
示例#27
0
 public void Init()
 {
     Controller = new SubmissionController(new MockEngine());
 }