// Start is called before the first frame update void Start() { // display asg = Assignment_Edit_Meta_Script.editAsg; popUp = mainContentPanel.transform.Find("Panel_Messages").gameObject; entryContainer = panelObject.transform.Find("Panel_Question_Creation"); dropdownAnswer = entryContainer.Find("Dropdown_Answer").GetComponent <Dropdown>(); panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = false; // need to change popUp.SetActive(false); conn = (API_Assignment)transform.GetComponent(typeof(API_Assignment)); panelObject.gameObject.SetActive(false); // button events panelObject.transform.Find("Button_NextQ").GetComponent <Button>().onClick.AddListener(ClickNextOrAdd); panelObject.transform.Find("Button_PrevQ").GetComponent <Button>().onClick.AddListener(ClickPrevious); panelObject.transform.Find("Button_Return").GetComponent <Button>().onClick.AddListener(ClickReturn); panelObject.transform.Find("Button_Save").GetComponent <Button>().onClick.AddListener(ClickSave); panelObject.transform.Find("Button_Clear").GetComponent <Button>().onClick.AddListener(ClickClear); panelObject.transform.Find("Button_Delete").GetComponent <Button>().onClick.AddListener(ClickDelete); popUp.transform.Find("Popup_Incomplete").Find("Button_Confirm").GetComponent <Button>().onClick.AddListener(popupQuestionIncompleteAcknowledge); popUp.transform.Find("Popup_Info").Find("Button_Confirm").GetComponent <Button>().onClick.AddListener(popupQuestionInfoAcknowledge); popUp.transform.Find("Popup_Delete").Find("Button_Cancel").GetComponent <Button>().onClick.AddListener(exitDelete); popUp.transform.Find("Popup_Delete").Find("Button_Confirm").GetComponent <Button>().onClick.AddListener(confirmDelete); // variables: questions fetchQuestions(asg); newQuestion = false; current_question = new AssignmentQuestion(); asgQuestionList = new List <AssignmentQuestion>(); cur = 0; }
/// <summary> /// Creates a question score calculator. /// </summary> private IQuestionScoreCalculator CreateMockQuestionScoreCalculator( AssignmentQuestion assignmentQuestion, IList <ScoredSubmission> scoredSubmissions) { var questionScoreCalculator = new Mock <IQuestionScoreCalculator>(); if (scoredSubmissions != null) { foreach (var scoredSubmission in scoredSubmissions) { questionScoreCalculator .Setup ( m => m.GetSubmissionScore ( scoredSubmission.Submission, DueDate, assignmentQuestion.Points, true /*withLateness*/ ) ).Returns(scoredSubmission.Score); } } return(questionScoreCalculator.Object); }
private void populateFields(AssignmentQuestion current_question, bool buttonInteractable) { entryContainer.Find("InputField_Question").GetComponent <InputField>().text = current_question.question; entryContainer.Find("InputField_A").GetComponent <InputField>().text = current_question.answer[0]; entryContainer.Find("InputField_B").GetComponent <InputField>().text = current_question.answer[1]; entryContainer.Find("InputField_C").GetComponent <InputField>().text = current_question.answer[2]; entryContainer.Find("InputField_D").GetComponent <InputField>().text = current_question.answer[3]; entryContainer.Find("Text_Question").GetComponent <Text>().text = "Question " + (cur + 1).ToString(); entryContainer.Find("InputField_Score").GetComponent <InputField>().text = current_question.score.ToString(); if (current_question.correctAnswer == -1) { dropdownAnswer.value = 0; } else { dropdownAnswer.value = current_question.correctAnswer + 1; } if (asgQuestionList.Count > 1) { panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = true; } else { panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = false; } panelObject.transform.Find("Button_PrevQ").GetComponent <Button>().interactable = buttonInteractable; }
public ActionResult GiveAssignmentReq() { LoginDetails loginDetails = (LoginDetails)Session["loginDetails"]; if (loginDetails == null) { return(RedirectToAction("PageNotFoundError", "Home")); } int user = (int)Session["user"]; if (user != 1) { return(RedirectToAction("PageNotFoundError", "Home")); } object o = Session["selectedClass"]; if (o == null) { return(RedirectToAction("PageNotFoundError", "Home")); } int id = (int)o; Course course = data.GetCourse(id); if (course == null) { return(RedirectToAction("PageNotFoundError", "Home")); } if (course.Active == false) { return(RedirectToAction("PageNotFoundError", "Home")); } int total; if (!int.TryParse(Request["TotalQuestions"], out total)) { ViewBag.IsWrongTotal = true; return(View("ScheduleQuiz", course)); } if (total <= 0) { ViewBag.IsWrongTotal = true; return(View("ScheduleQuiz", course)); } Assignment assignment = new Assignment(); assignment.Title = Request["Title"]; assignment.Content = Request["Content"]; List <AssignmentQuestion> questions = new List <AssignmentQuestion>(); for (int i = 1; i <= total; i++) { AssignmentQuestion question = new AssignmentQuestion(); question.Question = Request["Question" + i]; questions.Add(question); } data.AddAssignment(course, assignment, questions); return(RedirectToAction("GiveAssignment")); }
public void confirmDelete() { exitDelete(); if (cur < asgQuestionList.Count - 1) { asgQuestionList.RemoveAt(cur); current_question = asgQuestionList[cur]; if (cur == 0) { populateFields(current_question, false); } else { populateFields(current_question, true); } } else { asgQuestionList.RemoveAt(cur); current_question = asgQuestionList[--cur]; if (cur == 0) { populateFields(current_question, false); } else { populateFields(current_question, true); } } }
// Populate UI fields private void populateFields(AssignmentQuestion current_question) { ClickClear(); entryContainer.Find("Text_Question").GetComponent <Text>().text = "Question " + (cur + 1).ToString(); entryContainer.Find("InputField_Question").GetComponent <InputField>().text = current_question.question; try{ entryContainer.Find("InputField_A").GetComponent <InputField>().text = current_question.answer[0]; entryContainer.Find("InputField_B").GetComponent <InputField>().text = current_question.answer[1]; entryContainer.Find("InputField_C").GetComponent <InputField>().text = current_question.answer[2]; entryContainer.Find("InputField_D").GetComponent <InputField>().text = current_question.answer[3]; } catch (ArgumentOutOfRangeException) {} entryContainer.Find("InputField_Score").GetComponent <InputField>().text = current_question.score.ToString(); if (current_question.correctAnswer == -1) { dropdownAnswer.value = 0; } else { dropdownAnswer.value = current_question.correctAnswer + 1; } if (asgQuestionList.Count > 1) { panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = true; } else { panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = false; } if (cur == 0) { panelObject.transform.Find("Button_PrevQ").GetComponent <Button>().interactable = false; } else { panelObject.transform.Find("Button_PrevQ").GetComponent <Button>().interactable = true; } panelObject.transform.Find("Button_NextQ").Find("Text").GetComponent <Text>().text = "Next"; panelObject.transform.Find("Button_NextQ").GetComponent <Button>().interactable = true; if (cur == asgQuestionList.Count - 1) { panelObject.transform.Find("Button_NextQ").Find("Text").GetComponent <Text>().text = "Add Question"; if (!newQuestion) { panelObject.transform.Find("Button_NextQ").GetComponent <Button>().interactable = true; } else { panelObject.transform.Find("Button_NextQ").GetComponent <Button>().interactable = false; } } }
// Add an assignment question to an assignment public IEnumerator addQuestion(Assignment asg, AssignmentQuestion asgQuestion) { asgQAddDone = false; API_Connection conn = new API_Connection(); string jsonString = JsonUtility.ToJson(asgQuestion); yield return(StartCoroutine(conn.PutData("assignment/" + asg.assignmentId + "/addQuestion", jsonString, s => { asgQuestion.assignmentQuestionId = JSON.Parse(s); }))); asgQAddDone = true; }
// Update an assignment question public IEnumerator updateQuestion(AssignmentQuestion asgQuestion) { asgQUpdateDone = false; API_Connection conn = new API_Connection(); string jsonString = JsonUtility.ToJson(asgQuestion); yield return(StartCoroutine(conn.PutData("assignmentQUestion/" + asgQuestion.assignmentQuestionId, jsonString, s => { print(JSON.Parse(s) == asgQuestion.assignmentQuestionId); }))); asgQUpdateDone = true; }
/// <summary> /// Verifies that the given assignment question was correctly duplicated. /// </summary> private void VerifyAssignmentQuestion( DatabaseContext dbContext, AssignmentQuestion oldAssignmentQuestion, AssignmentQuestion newAssignmentQuestion) { VerifyReferenceDuplicated ( dbContext, oldAssignmentQuestion, newAssignmentQuestion, aq => aq.Question, q => q.Id, q => q.Name ); }
// Start is called before the first frame update void Awake() { // display popUp = mainContentPanel.transform.Find("Panel_Messages").gameObject; entryContainer = panelObject.transform.Find("Panel_Question_Creation"); dropdownAnswer = entryContainer.Find("Dropdown_Answer").GetComponent <Dropdown>(); panelObject.transform.Find("Button_Delete").GetComponent <Button>().interactable = false; popUp.SetActive(false); // variables: questions conn = (API_Assignment)transform.GetComponent(typeof(API_Assignment)); asgQuestionList = new List <AssignmentQuestion>(); current_question = new AssignmentQuestion(); asgQuestionList.Add(current_question); cur = 0; populateFields(current_question, false); }
// The button could be 'Next' or 'Add'. Two different logics public void ClickNextOrAdd() { try{ current_question = asgQuestionList[cur + 1]; cur++; populateFields(current_question); } catch (ArgumentOutOfRangeException) { if (!newQuestion) { current_question = new AssignmentQuestion(); asgQuestionList.Add(current_question); cur++; newQuestion = true; populateFields(current_question); } } }
public void ClickSaveAndPrevious() { if (validateFields()) { current_question = asgQuestionList[--cur]; if (cur > 0) { populateFields(current_question, true); } else { populateFields(current_question, false); } } else { popupQuestionIncomplete(); } }
/// <summary> /// Creates a new submission. /// </summary> private ScoredSubmission CreateSubmission( AssignmentQuestion assignmentQuestion, DateTime dateSubmitted, double score, bool isLate) { return(new ScoredSubmission ( new UserQuestionSubmission() { DateSubmitted = dateSubmitted, UserQuestionData = new UserQuestionData() { AssignmentQuestion = assignmentQuestion } }, score, isLate )); }
/// <summary> /// Setup the CreateQuestionResult method on the mock question result generator. /// </summary> private void SetupCreateQuestionResult( Mock <IQuestionResultGenerator> questionResultGenerator, User user, AssignmentQuestion assignmentQuestion, params ScoredSubmission[] submissions) { questionResultGenerator .Setup ( m => m.CreateQuestionResult ( assignmentQuestion, user, It.Is <IList <UserQuestionSubmission> > ( seq => seq.SequenceEqual(submissions.Select(s => s.Submission)) ), DueDate ) ).Returns(CreateQuestionResult(user, assignmentQuestion, submissions)); }
public void ClickSaveAndNext() { if (validateFields()) { try{ current_question = asgQuestionList[cur + 1]; populateFields(current_question, true); cur++; } catch (ArgumentOutOfRangeException) { current_question = new AssignmentQuestion(); asgQuestionList.Add(current_question); cur++; populateFields(current_question, true); } } else { popupQuestionIncomplete(); } }
/// <summary> /// Creates a submission status calculator. /// </summary> private ISubmissionStatusCalculator CreateMockSubmissionStatusCalculator( AssignmentQuestion assignmentQuestion, IList <ScoredSubmission> scoredSubmissions = null) { var submissionStatusCalculator = new Mock <ISubmissionStatusCalculator>(); if ((scoredSubmissions?.Count ?? 0) == 0) { submissionStatusCalculator .Setup ( m => m.GetStatusForQuestion ( null /*dateSubmitted*/, DueDate, assignmentQuestion.IsInteractive(), 0.0 /*score*/ ) ).Returns(new SubmissionStatus(Completion.NotStarted, late: false)); } else { foreach (var scoredSubmission in scoredSubmissions) { submissionStatusCalculator .Setup ( m => m.GetStatusForQuestion ( scoredSubmission.Submission.DateSubmitted, DueDate, assignmentQuestion.IsInteractive(), scoredSubmission.Submission.Score ) ).Returns(scoredSubmission.Status); } } return(submissionStatusCalculator.Object); }
/// <summary> /// Creates a question result. /// </summary> private StudentQuestionResult CreateQuestionResult( User user, AssignmentQuestion assignmentQuestion, params ScoredSubmission[] submissions) { return(new StudentQuestionResult ( assignmentQuestion.Id, 0 /*assignmentId*/, 0 /*userId*/, false /*combinedSubmissions*/, "" /*name*/, 0 /*points*/, submissions.Max(s => s.Score), new SubmissionStatus ( Completion.Completed, submissions.MaxBy(s => s.Score).Status.Late ), submissionResults: null )); }
// Delete a question public IEnumerator deleteQuestion(Assignment asg, AssignmentQuestion asgQuestion) { string jsonString = "{\"assignmentQuestionId: \"" + asgQuestion.assignmentQuestionId + "\"}"; AssignmentQuestionIdForAPI asgId = new AssignmentQuestionIdForAPI(asgQuestion); string json = JsonUtility.ToJson(asgId); var assignmentQDeleteRequest = new UnityWebRequest("https://seheroes.herokuapp.com/assignment/" + asg.assignmentId + "/removeQuestion", "PUT"); byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json); assignmentQDeleteRequest.SetRequestHeader("Content-Type", "application/json"); assignmentQDeleteRequest.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw); assignmentQDeleteRequest.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); yield return(assignmentQDeleteRequest.SendWebRequest()); if (assignmentQDeleteRequest.isNetworkError) { Debug.Log(assignmentQDeleteRequest.error); } else { Debug.Log(assignmentQDeleteRequest.downloadHandler.text); } }
/// <summary> /// Creates a new question result generator. /// </summary> private IQuestionResultGenerator CreateQuestionResultGenerator( AssignmentQuestion assignmentQuestion, IList <ScoredSubmission> submissions = null) { var submissionStatusCalculator = CreateMockSubmissionStatusCalculator ( assignmentQuestion, submissions ); var questionScoreCalculator = CreateMockQuestionScoreCalculator ( assignmentQuestion, submissions ); return(new QuestionResultGenerator ( questionScoreCalculator, submissionStatusCalculator )); }
public void confirmDelete() { exitDelete(); if (cur == asgQuestionList.Count - 1 && newQuestion) { newQuestion = false; } else { StartCoroutine(conn.deleteQuestion(asg, current_question)); } if (cur < asgQuestionList.Count - 1) { asgQuestionList.RemoveAt(cur); current_question = asgQuestionList[cur]; populateFields(current_question); } else { asgQuestionList.RemoveAt(cur); current_question = asgQuestionList[--cur]; populateFields(current_question); } }
public int AddUpdateQuestionAssignment(AssignmentListQuestionFilterModel model, int Userid, int LoggedInUserId, int LoggedInOrganizationId) { AssignmentQuestion AssigmentQuestion = Mapper.Map <AssignmentListQuestionFilterModel, AssignmentQuestion>(model); if (model.QuestionId == 0) { AssigmentQuestion.Active = 1; AssigmentQuestion.OrganizationId = LoggedInOrganizationId; //riskAssessment.TrainingRequired = false; base.Insert(AssigmentQuestion); this._unitOfWork.Save(); } else { AssigmentQuestion = GetSingle(model.QuestionId, LoggedInUserId, LoggedInOrganizationId); AssigmentQuestion.QuestionText = model.QuestionText; AssigmentQuestion.QuestionType = Convert.ToInt32(model.QuestionType); AssigmentQuestion.Score = model.Score; AssigmentQuestion.Order = model.Order; AssigmentQuestion.Active = model.Active; base.Update(AssigmentQuestion); } base.RepositoryContext.SP_DeleteQuestionOptions(AssigmentQuestion.QuestionID); if (model.AssignmentQuestionOptionViewModel != null && model.AssignmentQuestionOptionViewModel.Any()) { foreach (AssignmentQuestionOptionViewModel optionModel in model.AssignmentQuestionOptionViewModel) { AssignmentQuestionOption option = Mapper.Map <AssignmentQuestionOptionViewModel, AssignmentQuestionOption>(optionModel); option.QuestionID = AssigmentQuestion.QuestionID; option.OrganizationId = LoggedInOrganizationId; this._IAssignmentQuestionOptionRepository.Add(option, LoggedInUserId, LoggedInOrganizationId); } } this._unitOfWork.Save(); return(AssigmentQuestion.QuestionID); }
void Update() { if (API_Assignment.asgQListRequestDone) { for (int i = 0; i < API_Assignment.jsonNodeAsgQ.Count; i++) { for (int j = 0; j < API_Assignment.jsonNodeAsgQ[i].Count; j++) { asgQuestionList.Add(new AssignmentQuestion(API_Assignment.jsonNodeAsgQ[i][j])); } } API_Assignment.jsonNodeAsgQ.Clear(); API_Assignment.asgQListRequestDone = false; current_question = asgQuestionList[0]; populateFields(current_question); originLength = asgQuestionList.Count; panelObject.gameObject.SetActive(true); } if (API_Assignment.asgQAddDone) { API_Assignment.jsonNodeAsgQ.Clear(); API_Assignment.asgQAddDone = false; } }
// Calls API, takes the assignment with the corresponding access code and creates questions IEnumerator CheckDoneAssignmentBeforeAPI() { Debug.Log(AccessCodeField.text); string AccessCode = AccessCodeField.text; Debug.Log(AccessCode); string AccessCodeUrl = BaseURL + AccessCode + "&username="******"") { DoneBeforeText.text = "Access Code is required before proceeding"; DoneBeforeText.gameObject.SetActive(true); } else if (file["status_code"] != 200) { string temp = file["message"]; DoneBeforeText.text = temp; Debug.Log(file["message"]); DoneBeforeText.gameObject.SetActive(true); } else { if (DoneBeforeText.isActiveAndEnabled) { DoneBeforeText.gameObject.SetActive(false); } // adds to current AssignmentList for easier reference int AssignmentQuestionsCount = file["message"].Count; Debug.Log(AssignmentQuestionsCount); for (int i = 0; i < AssignmentQuestionsCount; i++) { AssignmentQuestion tempQuestion = new AssignmentQuestion(); Debug.Log("Loading Question Number " + i); tempQuestion.answer = file["message"][i]["answer"]; tempQuestion.option1 = file["message"][i]["option1"]; tempQuestion.option2 = file["message"][i]["option2"]; tempQuestion.option3 = file["message"][i]["option3"]; tempQuestion.option4 = file["message"][i]["option4"]; tempQuestion.question = file["message"][i]["question"]; Debug.Log(file["message"][i]["question"]); AssignmentQuestionList.Add(tempQuestion); } // Display first question QuestionText.text = AssignmentQuestionList[0].question; Option1Text.text = AssignmentQuestionList[0].option1; Option2Text.text = AssignmentQuestionList[0].option2; Option3Text.text = AssignmentQuestionList[0].option3; Option4Text.text = AssignmentQuestionList[0].option4; CurrentQuestionNumber = 1; // If next question is final question, change from 'next question' button to 'submint assignment' if (CurrentQuestionNumber == AssignmentQuestionList.Count) { string temp = "Submit Assignment"; NextQuestionButton.GetComponentInChildren <TMP_Text>().text = temp; NextQuestionButton.GetComponentInChildren <TMP_Text>().enableAutoSizing = true; } AssignmentFirstPanel.SetActive(true); } }
//public RiskAssessmentViewModel GetSingleWithTeam(int id) //{ // RiskAssessment data = base.GetByID(id); // RiskAssessmentViewModel model = Mapper.Map<RiskAssessment, RiskAssessmentViewModel>(data); // var teams = this._IRiskAssessmentTeamRepository.GetAllWithRiskAssessmentId(model.RiskAssessmentId); // if (teams != null && teams.Any()) // { // model.RiskAssessmentTeamViewModel = Mapper.Map<List<RiskAssessmentTeam>, List<RiskAssessmentTeamViewModel>>(teams); // } // return model; //} public void Update(AssignmentQuestion entity, int LoggedInUserId, int LoggedInOrganizationId) { base.Update(entity); _unitOfWork.Save(); }
public AssignmentQuestionIdForAPI(AssignmentQuestion asgQuestion) { assignmentQuestionId = asgQuestion.assignmentQuestionId; }
public void ClickPrevious() { current_question = asgQuestionList[--cur]; populateFields(current_question); }
public async Task ImportsAssignmentQuestions() { // Arrange const string name = "assignment question"; var fileNames = new[] { "file1", "file2" }; var questionnaire = new Questionnaire { Revision = 1, Name = name }; var question1 = new AssignmentQuestion { Revision = 1, Text = "AssignmentQuestion1", Options = new List <AssignmentOption> { new AssignmentOption { Text = "AssignOpt1" }, new AssignmentOption { Text = "AssignOpt2" }, new AssignmentOption { Text = "AssignOpt3" } } }; var q1Opts = question1.Options.ToList(); var q1Answers = (question1.Answers = new List <AssignmentAnswer> { new AssignmentAnswer { Text = "AssignAnswer1", CorrectOption = question1.Options.First() }, new AssignmentAnswer { Text = "AssignAnswer2", CorrectOption = question1.Options.Skip(1).First() }, new AssignmentAnswer { Text = "AssignAnswer3", CorrectOption = question1.Options.Skip(2).First() } }).ToList(); var question2 = new AssignmentQuestion { Revision = 1, Text = "AssignmentQuestion2", Options = new List <AssignmentOption> { new AssignmentOption { Text = "AssignOpt21" }, new AssignmentOption { Text = "AssignOpt23" } } }; var q2Opts = question2.Options.ToList(); var q2Answers = (question2.Answers = new List <AssignmentAnswer> { new AssignmentAnswer { Text = "AssignAnswer21", CorrectOption = question2.Options.Skip(1).First() }, new AssignmentAnswer { Text = "AssignAnswer22", CorrectOption = question2.Options.First() } }).ToList(); var question3 = new AssignmentQuestion { Revision = 1, Text = "AssignmentQuestion2", Options = new List <AssignmentOption> { new AssignmentOption { Text = "AssignOpt31" }, new AssignmentOption { Text = "AssignOpt32" }, new AssignmentOption { Text = "AssignOpt33" } } }; var q3Opts = question3.Options.ToList(); var q3Answers = (question3.Answers = new List <AssignmentAnswer> { new AssignmentAnswer { Text = "AssignAnswer31", CorrectOption = question3.Options.Skip(2).First() }, new AssignmentAnswer { Text = "AssignAnswer32", CorrectOption = question3.Options.First() } }).ToList(); var fileText1 = "0;\n" + "Text;Opt1;Opt2;Opt3;;Assign1Text;Assign1Opt;Assign2Text;Assign2Opt;Assign3Text;Assign3Opt\n" + $"\"{question1.Text}\";{q1Opts[0].Text};{q1Opts[1].Text};{q1Opts[2].Text};;{q1Answers[0].Text};1;{q1Answers[1].Text};2;{q1Answers[2].Text};3\n" + $"\"{question2.Text}\";{q2Opts[0].Text};{q2Opts[1].Text};;;{q1Answers[0].Text};2;{q1Answers[1].Text};1;;"; var fileText2 = "0;\n" + "Text;Opt1;Opt2;Opt3;;Assign1Text;Assign1Opt;Assign2Text;Assign2Opt;Assign3Text;Assign3Opt\n" + $"{question3.Text};{q3Opts[0].Text};{q3Opts[1].Text};{q3Opts[2].Text};;{q3Answers[0].Text};3;{q3Answers[1].Text};1;;;\n" + $""; var expectedImportedQuestions = new Dictionary <string, List <string> > { [fileNames[0]] = new List <string> { question1.Text, question2.Text }, [fileNames[1]] = new List <string> { question3.Text } }; var questionsUow = A.Fake <IQuestionsUnitOfWork>(); var questionnairesUow = A.Fake <IQuestionnairesUnitOfWork>(); var file = A.Fake <IFile>(); A.CallTo(() => file.ReadAllText(A <string> .That.Matches(_ => _ == fileNames[0]))) .Returns(fileText1); A.CallTo(() => file.ReadAllText(A <string> .That.Matches(_ => _ == fileNames[1]))) .Returns(fileText2); var testee = new ImportExportService(questionnairesUow, questionsUow, file); // Act (Dictionary <string, List <string> > importedQuestions, List <string> erroredFiles) = await testee.Import(name, "", fileNames); // Assert importedQuestions.Should().BeEquivalentTo(expectedImportedQuestions); erroredFiles.Should().BeNullOrEmpty(); A.CallTo(() => questionnairesUow.QuestionnairesRepo.Add(A <Questionnaire> .That.Matches(_ => this.matchEntity(_, questionnaire)))) .MustHaveHappened(); A.CallTo(() => questionsUow.AssignmentQuestionsRepo.Add(A <AssignmentQuestion> .That.Matches(_ => this.matchEntity(_, question1)))) .MustHaveHappened(); A.CallTo(() => questionsUow.AssignmentQuestionsRepo.Add(A <AssignmentQuestion> .That.Matches(_ => this.matchEntity(_, question2)))) .MustHaveHappened(); A.CallTo(() => questionsUow.AssignmentQuestionsRepo.Add(A <AssignmentQuestion> .That.Matches(_ => this.matchEntity(_, question3)))) .MustHaveHappened(); A.CallTo(() => questionnairesUow.Complete()) .MustHaveHappened(); A.CallTo(() => questionsUow.Complete()) .MustHaveHappened(Repeated.Exactly.Times(4)); }
/// <summary> /// Creates a new student question result. /// </summary> public StudentQuestionResult CreateQuestionResult( AssignmentQuestion question, User user, IList <UserQuestionSubmission> submissions, DateTime?dueDate) { var assignmentQuestionId = question.Id; var assignmentId = question.AssignmentId; var userId = user.Id; var combinedSubmissions = question.Assignment.CombinedSubmissions; var questionName = question.Name; var questionPoints = question.Points; var scoredSubmissions = submissions .OrderBy(submission => submission.DateSubmitted) .Select ( submission => new { Submission = submission, RawScore = submission.Score, ScoreInAssignment = _questionScoreCalculator.GetSubmissionScore ( submission, dueDate, questionPoints, withLateness: true ) } ).ToList(); var bestSubmission = submissions.Count > 0 ? scoredSubmissions .OrderByDescending(result => result.ScoreInAssignment) .ThenByDescending(result => result.RawScore) .First() : null; var rawScore = bestSubmission?.RawScore ?? 0.0; var scoreInAssignment = bestSubmission?.ScoreInAssignment ?? 0.0; var dateSubmitted = bestSubmission?.Submission?.DateSubmitted; var status = _submissionStatusCalculator.GetStatusForQuestion ( dateSubmitted, dueDate, question.IsInteractive(), rawScore ); bool includeSubmissions = !question.IsInteractive() && !question.Assignment.CombinedSubmissions; var submissionResults = includeSubmissions ? scoredSubmissions.Select ( scoredSubmission => new QuestionSubmissionResult ( question.Id, question.AssignmentId, userId, scoredSubmission.Submission.DateSubmitted, _submissionStatusCalculator.GetStatusForQuestion ( scoredSubmission.Submission.DateSubmitted, dueDate, false /*interactive*/, scoredSubmission.RawScore ), scoredSubmission.ScoreInAssignment, question.Points ) ).ToList() : null; return(new StudentQuestionResult ( assignmentQuestionId, assignmentId, userId, combinedSubmissions, questionName, questionPoints, scoreInAssignment, status, submissionResults )); }
public AssignmentQuestionForAPI(AssignmentQuestion asgQ) { question = asgQ; }