// 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;
            }
        }
    }
Example #7
0
    // 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;
    }
Example #8
0
    // 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();
     }
 }
Example #13
0
 /// <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
            ));
 }
Example #14
0
 /// <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);
        }
Example #17
0
 /// <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
            ));
 }
Example #18
0
    // 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;
     }
 }
Example #23
0
    // 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();
        }
Example #25
0
 public AssignmentQuestionIdForAPI(AssignmentQuestion asgQuestion)
 {
     assignmentQuestionId = asgQuestion.assignmentQuestionId;
 }
 public void ClickPrevious()
 {
     current_question = asgQuestionList[--cur];
     populateFields(current_question);
 }
Example #27
0
        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
                   ));
        }
Example #29
0
 public AssignmentQuestionForAPI(AssignmentQuestion asgQ)
 {
     question = asgQ;
 }