CSC/ECE 517 Spring 2022 - E2217: Refactor questionnaires controller

From Expertiza_Wiki
Jump to navigation Jump to search

This page describes the changes made for the Spring 2022 OSS Project E2217: Refactoring Questionnaires Controller

Description

This project focused on sanding down the rough edges of questionnaires_controller.rb through the removal of the unused create_questionnaire method, breaking up the exceedingly long create method, transfer of hardcoded values in the add_new_questions method, and general code cleanup.

Problems and Solutions

Problem: The create_questionnaire method is not used.create_questionnaire has no immediate apparent calls, and appears to have the same functionality as create.

  • Solution:

Problem: The create method is 49 lines long, and needs to be broken up

  • Solution:

Problem: There are three checks for whether a question is a QuizQuestionnaire. These checks are likely unnecessary, and testing the class of an object carries potential problems.

  • Solution:

Problem: There are assignment values hardwired into the code in add_new_questions. Although these fields are okay to default to the given values, these should be defined constants

  • Solution: As these values related to ScoredQuestion items, constants were created in scored_question.rb. add_new_questions now uses these class constants when assigning default values for fields. These values are all changeable in the UI after initialization.

Addition of constants to scored_question.rb:

Problem: Several methods have a questionnaire_id as a parameter, this may be unnecessary in several situations where params[:id] would suffice

  • Solution: Where applicable, questionnaire_id was changed to params[:id]. This was done in methods where params[:id].nil? was not called, and in methods where questionnaire_id = params[:id] was called

Change of questionnaire_id to params[:id] in save_all_questions:

Problem: Several bad if statements exist

  • Solution: Line 96: if @questionnaire.type != "QuizQuestionnaire" checking if it is a QuizQuestionnaire is not necessary so this line has been removed because the QuizQuestionnaire is same as the other questionnaire types.

Line 244 & 266 : if @questionnaire.type != "QuizQuestionnaire" checking if it is a QuizQuestionnaire is not necessary so this line has been removed because the for saving a new question there is no need to check for the QuizQuestionnaire and weights used in this check are not used anywhere.

Modified Files

(Add modified files and list of changes here)

Testing

Running Tests

  rspec ./spec/controllers/questionnaires_controller_spec.rb

Future Improvements

Pull Request

GitHub link: https://github.com/expertiza/expertiza/pull/2320