CSC/ECE 517 Fall 2019 - E1960. Create new late policy successfully and fixing "Back" link
About Expertiza
Expertiza is an open-source project based on Ruby on Rails framework. Expertiza allows the instructor to create new assignments and customize new or existing assignments. It also allows the instructor to create a list of topics the students can sign up for. Students can form teams in Expertiza to work on various projects and assignments. Students can also peer review other students' submissions. Expertiza supports submission across various document types, including the URLs and wiki pages
Project Description
Problem Statement
E1960. Create new late policy successfully and fixing "Back" link
Background
- An instructor can create late policies for any assignment, wherein the instructor can specify the points per unit and the maximum penalty that can be applied for any assignment submission.
Issue 1
If an instructor while creating a policy, clicks on “Create” (Step 5), following error message is displayed on the top of the page “The following error occurred while saving the penalty policy:” and the policy is not created and added to the list of policies.
Issue 2
If an instructor, while creating a policy, clicks on "Back" link (Step 6) and wants to go back to the previous page, (s)he is directed to the list of policies instead of “Due Date” tab of assignment edit page (Step 2 above).
Problems in Current Implementation
Problem 1: Failure to create a new policy
The create button on the new page of late_policy is not working. Whenever the data for the form is filled and submitted by clicking on the Create button, an error message is shown saying “The following error occurred while saving the penalty policy:” and the policy is not created and added to the list of policies.
Problem 2: Back link redirects to the wrong page
An instructor can choose to go back to the previous page from the create new policy page. When the Back button on the create new late policy is clicked, it should be redirected to the Due Date tab of the assignment it came from but it is redirected to the index page of late policies.
Solutions to Problems in Current Implementation
Problem 1: Failure to create a new policy
Solution: There was no provision to handle the validations of the form in the new late_policy page. A new late policy would not be created if any of the validations fail and the user would be notified of the errors by a flash error message
Updated File: app/views/late_policies/new.html.erb
<% if @late_policy.errors.any? %> <div id="error_explanation"> <% flash[:error] = @late_policy.errors.full_messages.join("<br/>").html_safe %> </div> <% end %>
Problem 2: Back link redirects to the wrong page
An instructor can choose to go back to the previous page from the create new policy page. When Back button on the create new late policy is clicked, it should be redirected to the Due Date tab of the assignment it came from but it is redirected to the list of late policies page
Solution: We tried to store the assignment id of the page from where the create new policy was clicked. This way when we have to redirect after the back button, we can send it to this particular assignment with the help of assignment id.
update method at app/controllers/assignments_controller.rb
session[:assignment_id] = @assignment_form.assignment.id
app/views/late_policies/new.html.erb
<%= f.hidden_field :assign_id, value: params[:id] %> <%= link_to 'Back', :controller => 'assignments', :action => 'edit', :id => session[:assignment_id] , :anchor => "tabs-5" %>
app/controllers/late_policies_controller.rb
redirect_to action: 'index', id: params[:late_policy][:assign_id]
app/views/late_policies/index.html.erb
<%= link_to 'New late policy', :action => 'new', :id => params[:id]%>
Back Case - 1
Step 1: Click Back on Create New Policy page
Step 2: Redirected to the Due Dates tab of the assignment page it came from
Back Case - 2
Step 1: On Index Page of Late Policies. Click Create New Policy
Step 2: Click Back
Step 3: Redirected to the due dates tab of assignment page it came from
Test Plan
For users intending to view the deployed Expertiza associated with this assignment, the credentials are below: Instructor Login: username -> instructor6, password -> password
Manual Testing via UI
1. Login to expertiza using the above credentials.
2. Click on Assignments under Manage Notifications.
3. Click on Edit icon under any of the Assignments.
4. Navigate to Due Dates Tab.
5. Scroll Down and click on "New Late Policy".
6. Create/test new Late Policy!
Automated Test Cases for new late policy validations
A new late policy must not be created if any of these validations fail.
- Late Policy Name
- Late Policy Name must not be blank
- Late Policy must be unique
- Penalty Points per unit
- Penalty points must not be blank
- Penalty points must be a number
- penalty points must be less than total penalty points
- Maximum Penalty
- Maximum Penalty must not be blank
- Maximum Penalty must be less than 50
All these test cases have been automatically tested by writing a new RSpec file: spec/models/late_policy_spec.rb
describe LatePolicy do let(:policy) do LatePolicy.new penalty_per_unit: 10.0, max_penalty: 30, penalty_unit: "Day", times_used: 0, instructor_id: 6, policy_name: 'rspectest' end describe '#penalty_per_unit' do it 'returns the penalty_per_unit' do expect(policy.penalty_per_unit).to eq(10.0) end it 'Validate presence of penalty_per_unit which cannot be blank' do policy.penalty_per_unit = nil expect(policy).not_to be_valid end it 'Validate if penalty_per_unit is less than max_penalty' do policy.max_penalty = 20 policy.penalty_per_unit = 30 expect(policy).not_to be_valid end end describe '#max_penalty' do it 'returns the max_penalty' do expect(policy.max_penalty).to eq(30) end it 'Validate presence of max_penalty which cannot be blank' do policy.max_penalty = nil expect(policy).not_to be_valid end it 'Validate if max_penalty is less tha 50' do policy.max_penalty = 60 expect(policy).not_to be_valid end end describe '#penalty_unit' do it 'returns the penalty_unit' do expect(policy.penalty_unit).to eq('Day') end it 'Validate presence of penalty_unit which cannot be blank' do policy.penalty_unit = nil expect(policy).not_to be_valid end end describe '#times_used' do it 'returns times_used' do expect(policy.times_used).to eq(0) end end describe '#policy_name' do it 'returns the policy name' do expect(policy.policy_name).to eq('rspectest') end it 'Validate presence of policy name which cannot be blank' do policy.policy_name = nil expect(policy).not_to be_valid end end end
Tasks Accomplished
Following tasks were accomplished in this project:
1. Corrected the code for the late_policies controller and new late_policy page.
2. Improved the code for the Back button inside the new late_policy page.
3. Added RSPEC test cases for testing changes done in late_policies Controller.
Code Coverage
Team Information
Devarsh Shah
Jay Jagtap
Ritesh Ghorse
Mentor: Yashad Trivedi (ytrived@ncsu.edu)
References
2.GitHub Project Repository Fork
5.Expertiza project documentation wiki
7.Clean Code: A handbook of agile software craftsmanship. Author: Robert C Martin