CSC/ECE 517 Fall 2021 - E2121. Refactor suggestion controller.rb
This page provides a description of the Expertiza based OSS project.
Introduction
About Expertiza
Expertiza is an open-source educational project based on Ruby on Rails framework.
Related Functions
- Files Involved: suggestion_controller.rb, assignment_team.rb, sign_up_topic.rb, suggestion_controller_spec.rb (create)
- The following functions are related to E2121:
- Students could submit suggestions of topic
- Instructors could approve or reject suggested topics of students
- Instructors and students could create teams
Tasks Statement
The following tasks were accomplished in this project:
- Line 76 and 77: use more Ruby-like String concepts
- Line 94: Refactor create_new_team to assignment_team.rb
- Line 125: Refactor notification to simplify control logic.
- Line 160: Refactor approve_suggestion to indicate that notification is being sent.
- Test functions and increase coverage:
- Check error in approve
- Test reject_suggestion
- Test when topic_id.nil? to make sure the waitlist is cleared.
- Test the submit, student_view, student_edit, update_suggestion, add_comment function
Procedure to Test Our project Manually
- Click the link E2121.
- Test Steps
Refactor Suggestion Controller.rb
Line 76 and 77: use more Ruby-like String concepts
Use Ruby-like string concepts .empty? to replace == " " expression.
Change from:
flash[:success] = 'Thank you for your suggestion!' if @suggestion.unityID != '' " flash[:success] = 'You have submitted an anonymous suggestion. It will not show in the suggested topic table below.' if @suggestion.unityID == '' "
to:
flash[:success] = 'Thank you for your suggestion!' unless @suggestion.unityID.empty? flash[:success] = 'You have submitted an anonymous suggestion. It will not show in the suggested topic table below.' if @suggestion.unityID.empty?
Line 94: Refactor create_new_team to assignment_team.rb
Move create_new_team function from suggestion controller.rb to assignment_team.rb.
Line 125: Refactor notification to simplify control logic
Line 160: Refactor approve_suggestion to indicate that notification is being sent
Originally, there is an error when the instructor approves a topic:
To fix it, we added new_topic_from_suggestion to app/models/sign_up_topic.rb and used it in approve function of app/controllers/suggestion_controller.rb.
def self.new_topic_from_suggestion(suggestion) signuptopic = SignUpTopic.new signuptopic.topic_identifier = 'S' + Suggestion.where("assignment_id = ? and id <= ?", suggestion.assignment_id, suggestion.id).size.to_s signuptopic.topic_name = suggestion.title signuptopic.assignment_id = suggestion.assignment_id signuptopic.max_choosers = 1 #return this model based on these checks if signuptopic.save && suggestion.update_attribute('status', 'Approved') return signuptopic else return 'failed' end end
Then the approving bug is fixed:
Test by RSpec
Add factory :suggestion to spec/factories/factories.rb as following:
factory :suggestion, class: Suggestion do id 1 assignment_id 1 title 'oss topic' description 'add oss topic' status 'Initiated' unityID 'student2065' signup_preference 'Y' end
Check Error in Approve
TBD
Test reject_suggestion
TBD
Test When topic_id.nil? to Make Sure the Waitlist is Cleared
Test the submit, student_view, student_edit, update_suggestion, add_comment function
- Test student_view
describe '#student_view' do it 'renders suggestions#student_view' do get :student_view, id: 1 expect(response).to render_template(:student_view) end end
- Test student_edit
describe '#student_edit' do it 'renders suggestions#student_edit' do get :student_edit, id: 1 expect(response).to render_template(:student_edit) end end