E1838 Project Red: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
 
(40 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Introduction==
==Introduction==
==='''Problem Statement'''===
==='''Problem Statement'''===
In Expertiza, students may submit links (which go into the Expertiza db) or files (which go into a directory in the Expertiza filespace).  A persistent problem in Expertiza has been that instructors have created multiple assignments that had the same submission directory.  In this case, the students’ submissions for one assignment went into the same directory as the submissions for another assignment, and reviewers who thought they were reviewing for one assignment were also presented with work submitted by a different student on another assignment.  The basic problem has been fixed, but there are some special cases that need to be addressed, and tests need to be written.
In Expertiza, if the instructor doesn’t specify the assignment directory for a submission, the directory defaults to the home directory. This can lead to multiple assignment submissions being in the same place and creating confusion. The aim of the project if to handle all the scenarios that can arise when the instructor is not specifying any directory name.
----
 
=='''Issues to be fixed'''==
=='''Issues to be fixed'''==


Line 15: Line 15:
=='''Modified Files'''==
=='''Modified Files'''==


1) assignment_controller.rb
1) /app/views/submitted_content/_submitted_files.html.erb
 
2) assignment.rb


3) assignment/new.html.erb
2) /app/controllers/assignment_controller.rb


3) /app/views/assignments/edit/_general.html.erb
----
----


Line 27: Line 26:
==='''Issue #391 '''===
==='''Issue #391 '''===


-> When an instructor tries to create a new assignment with the storage directory similar to one of the other assignments or a sub-part of other pre-existing assignment the system would warn the instructor about this change and wouldn't save the assignment.
-> When the instructor has not specified a directory path, there is no directory where the files can be stored.
-> The system once gets a create request compares the directory path to paths of all existing directories for similarity and sub-part check (sub part check is required because if not done a directory will have submission files of one assignment as well as a directory for some other assignment) and logs an error if similarity is found.
-> Hence we allow only links to be submitted in such an assignment.
-> If there errors they will be displayed in /assignment/new.html.erb
-> In the view of submitted content controller we disabled the button to upload files in such assignment where the directory path is null.
-> We displayed the message 'Fie submissions are disabled' whenever anyone tries to upload files to such assignment.


Pseudo Code:
Pseudo Code:
    Added following logic in assignment.rb
Added following logic in /app/views/submitted_content/_submitted_files.html.erb
    1) assignment_path (path user is trying to assign to new assignment)
 
    2) for each assignment in assignment_database
      <% if @assignment.directory_path != "" %>
    3)    if assignment.directory_path includes assignment_path
        <% puts "Assign Directory: #{@assignment.directory_path}" %>
    4)      add to errors "Directory is already assigned to some assignment"
        <%= submit_tag 'Upload file', class: 'btn btn-default' %>
   
      <% else %>
    In assignment/new.html.erb
        <%= 'File Submissions are disabled' %>
    1) Display error if any
      <%end%>


Explanation:
If the assignment directory path is specified by the instructor then the button to upload files will be displayed else the warning message 'File submissions are disabled will be displayed'.


==='''Issue #1201'''===
==='''Issue #1201'''===
When an instructor creates a new assignment, (s)he can do it without specifying the directory to which assignment belongs. In this case since the directory is not specified, although the user will not be able to submit any files, he can submit links. Whenever the instructor would click on create assignment it would show an warning stating 'You have not mentioned directory path hence student would not be able to upload files'.
Expertiza has the feature to auto generate the directory names for submissions from the assignment name. However, this may be concerning if two assignments have the same name, in which case the submission folders would be the same and this would again create a problem.
 
Added the following logic in assignments_controller.rb create method
    1) Inserted a check that checks if the assignment directory path is null
    2) If the path is null, raises a warning that the given path is null and only links can be submitted.


==''' How to Test '''==
Approach taken to solve the issue:
Logic for Auto generation of the directory names:
Append assignment_name, assignment_id, course_id to make the directory name unique.


Link to ScreenCast Bug #391 : https://youtu.be/OVVknOBkG6Y
Files modified:  


Link to ScreenCast Bug #404 : https://youtu.be/uvnamlY2wzg
/app/controllers/assignment_controller.rb


==''' Issue #391 '''==
/app/views/assignments/edit/_general.html.erb


Steps to test Issue #391:


1) Login as Instructor
1) /app/views/assignments/edit/_general.html.erb


2) Click on Manage , select assignments.
Pseudo code:


3) New public assignment/ New private assignment
      <td><input type="checkbox" name="assignment_form[check_validate]" /> File submissions are allowed? </td>
Explanation: Added a checkbox in the view for creating an assignment. An instructor can select if file submissions are allowed. If he selects 'yes' then if the instructor has given an empty directory path, the name of the directory for the assignment will be auto generated.


4) Fill in the details and remember the directory path
2) /app/controllers/assignment_controller.rb
 
      if quesparams[:assignment][:directory_path] == "" and quesparams[:check_validate] == "on"
        quesparams[:assignment][:directory_path] = "#{quesparams[:assignment][:name]}_#{quesparams[:assignment][:id]}_#{quesparams[:assignment][:course_id]}"
      end


5) Save
Explanation: If the check box is checked, it will pass the value "on" to the assignment controller and the directory name will be auto generated.


6) Create New assignment
[[File:Blank_Diagram.jpeg]]


7) Fill in the details and keep the directory path same as the one before.
==''' How to Test '''==


8) You will see an error displayed on top of the page.
Link to ScreenCast Bug #391 : https://youtu.be/OVVknOBkG6Y


Link to ScreenCast Bug #404 : https://youtu.be/uvnamlY2


==''' Issue #404 '''==
==''' Test Plan'''==
=='''issue #391 and issue #1201 '''==


Steps to Test Issue #404:
Steps to test Issue #391 and #1201


1) Login as Instructor
1) Login as Instructor
Line 84: Line 91:
2) Click on Manage , select assignments.
2) Click on Manage , select assignments.


3) Find out an assignment which isn't assigned to a course.
3) New public assignment/ New private assignment
 
4) Select assign to course badge
 
5) Select course from available radio button
 
6) Click Save


7) Now you will the updated path on assignment display list and instead of assign to course remove from course badge will be visible.
4) Fill in the details


==''' Automated tests for Issue #391 and #404 '''==
5) Select if you want to allow file submissions


Following RSPEC Code is added to assignment_spec.rb:
6) If 'yes', then file directory name will be auto generated as 'assignment_name'_'assignment_id'_'course_name'


1) To check if the directory storage path specified by the user is a part of any other submissions directory we check if the assignment.directory_path is a part of any existing directory path:
7) If 'no'
    1)describe 'check_directory_path' do:
    2)    it 'returns false if directory path already in use' do:
    3)        @assignment = create(:assignment)
    4)        expect(@assignment.check_directory_path).to eql(false)
    5)    end
    6)end


8) Login as a student and you can see that only links can be submitted and file submissions are disabled since the directory is not specified


2) To check that an assignment object cannot be saved until a submission directory path is provided for that assignment:
==''' Automated tests for Issue #1190 '''==


1)it 'is not valid without directory_path' do
Following RSPEC Code is added to assignments_controller_spec.rb:
2)    assignment.directory_path = nil
3)    assignment.should_not be_valid
4)end


3)  To check if after assigning course to an assignment is the directory path updated to contain the course path:
The below code RSPEC snippet tests for the issue where in the assignment which is duplicated does not have the same directory for submissions as the original assignment.


1)it 'should contain course in path name' do
    context 'when new assignment directory is same as old' do
2)   @assignment = create(:assignment)
      it 'should show an error and redirect to assignments#edit page' do
3)   @assignment.directory_path = Course.first.directory_path.to_s + "/finaltest"
        allow(new_assignment).to receive(:save).and_return(true)
4)    expect(@assignment.directory_path).to include(Course.first.directory_path)
        allow(Assignment).to receive(:find).with(2).and_return(new_assignment)
5)end
        params = {id: 1}
** To test the changes clone the following repository https://github.com/daxamin/expertiza .
        get :copy, params
        expect(flash[:note]).to eq("Warning: The submission directory for the copy of this assignment will be the same as the submission directory "\
          "for the existing assignment. This will allow student submissions to one assignment to overwrite submissions to the other assignment. "\
          "If you do not want this to happen, change the submission directory in the new copy of the assignment.")
        expect(flash[:error]).to eq('The assignment was not able to be copied. Please check the original assignment for missing information.')
        expect(response).to redirect_to('/tree_display/list')
      end

Latest revision as of 23:59, 9 November 2018

Introduction

Problem Statement

In Expertiza, if the instructor doesn’t specify the assignment directory for a submission, the directory defaults to the home directory. This can lead to multiple assignment submissions being in the same place and creating confusion. The aim of the project if to handle all the scenarios that can arise when the instructor is not specifying any directory name.

Issues to be fixed

Issue #391: In Expertiza, if the instructor doesn’t specify the assignment directory for a submission, the directory defaults to the home directory. This can lead to multiple assignment submissions being in the same place and creating confusion. Please take a look at the Github issue for suggestions on how to solve this.

Issue #1190: An issue with conflicting directories for copied assignments was fixed. You need to write the test to verify that this issue doesn’t recur. This test should check that the assignment directories for copied assignments are distinct from the original directories.

Issue #1201: Expertiza has the feature to auto generate the directory names for submissions from the assignment name. However, this may be concerning if two assignments have the same name, in which case the submission folders would be the same and this would again create a problem. This needs to be fixed.


Modified Files

1) /app/views/submitted_content/_submitted_files.html.erb

2) /app/controllers/assignment_controller.rb

3) /app/views/assignments/edit/_general.html.erb


Approach taken to resolve the issues

Issue #391

-> When the instructor has not specified a directory path, there is no directory where the files can be stored. -> Hence we allow only links to be submitted in such an assignment. -> In the view of submitted content controller we disabled the button to upload files in such assignment where the directory path is null. -> We displayed the message 'Fie submissions are disabled' whenever anyone tries to upload files to such assignment.

Pseudo Code: Added following logic in /app/views/submitted_content/_submitted_files.html.erb

     <% if @assignment.directory_path != "" %>
       <% puts "Assign Directory: #{@assignment.directory_path}" %>
       <%= submit_tag 'Upload file', class: 'btn btn-default' %>
     <% else %>
       <%= 'File Submissions are disabled' %>
     <%end%>

Explanation: If the assignment directory path is specified by the instructor then the button to upload files will be displayed else the warning message 'File submissions are disabled will be displayed'.

Issue #1201

Expertiza has the feature to auto generate the directory names for submissions from the assignment name. However, this may be concerning if two assignments have the same name, in which case the submission folders would be the same and this would again create a problem.

Approach taken to solve the issue: Logic for Auto generation of the directory names: Append assignment_name, assignment_id, course_id to make the directory name unique.

Files modified:

/app/controllers/assignment_controller.rb

/app/views/assignments/edit/_general.html.erb


1) /app/views/assignments/edit/_general.html.erb

Pseudo code:

<input type="checkbox" name="assignment_form[check_validate]" /> File submissions are allowed?

Explanation: Added a checkbox in the view for creating an assignment. An instructor can select if file submissions are allowed. If he selects 'yes' then if the instructor has given an empty directory path, the name of the directory for the assignment will be auto generated.

2) /app/controllers/assignment_controller.rb

     if quesparams[:assignment][:directory_path] == "" and quesparams[:check_validate] == "on"
       quesparams[:assignment][:directory_path] = "#{quesparams[:assignment][:name]}_#{quesparams[:assignment][:id]}_#{quesparams[:assignment][:course_id]}"
     end

Explanation: If the check box is checked, it will pass the value "on" to the assignment controller and the directory name will be auto generated.

How to Test

Link to ScreenCast Bug #391 : https://youtu.be/OVVknOBkG6Y

Link to ScreenCast Bug #404 : https://youtu.be/uvnamlY2

Test Plan

issue #391 and issue #1201

Steps to test Issue #391 and #1201

1) Login as Instructor

2) Click on Manage , select assignments.

3) New public assignment/ New private assignment

4) Fill in the details

5) Select if you want to allow file submissions

6) If 'yes', then file directory name will be auto generated as 'assignment_name'_'assignment_id'_'course_name'

7) If 'no'

8) Login as a student and you can see that only links can be submitted and file submissions are disabled since the directory is not specified

Automated tests for Issue #1190

Following RSPEC Code is added to assignments_controller_spec.rb:

The below code RSPEC snippet tests for the issue where in the assignment which is duplicated does not have the same directory for submissions as the original assignment.

    context 'when new assignment directory is same as old' do
     it 'should show an error and redirect to assignments#edit page' do
       allow(new_assignment).to receive(:save).and_return(true)
       allow(Assignment).to receive(:find).with(2).and_return(new_assignment)
       params = {id: 1}
       get :copy, params
       expect(flash[:note]).to eq("Warning: The submission directory for the copy of this assignment will be the same as the submission directory "\
         "for the existing assignment. This will allow student submissions to one assignment to overwrite submissions to the other assignment. "\
         "If you do not want this to happen, change the submission directory in the new copy of the assignment.")
       expect(flash[:error]).to eq('The assignment was not able to be copied. Please check the original assignment for missing information.')
       expect(response).to redirect_to('/tree_display/list')
     end