CSC/ECE 517 Fall 2021 - E2126. Refactor account request controller.rb: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 46: Line 46:
== Original Method ==
== Original Method ==
<pre>
<pre>
     it 'should return an empty string when comment does not exist' do
  def create_approved_user
       result = helper.list_hyperlink_submission(@response_map.id, @question.id)
     if params[:selection] == nil
       expect(result).to eq('')
      flash[:error] = "Please Approve or Reject before submitting"
     end  
      redirect_to action: 'list_pending_requested'
      return  
    end
    is_approved = (params[:commit] == "Accept"? "Approved" : "Rejected")
    users = params[:selection]
    users.each do |user|
      requested_user = AccountRequest.find_by(id: user.first)
       requested_user.status = is_approved
      if requested_user.status.nil?
        flash[:error] = "Please Approve or Reject before submitting"
      elsif requested_user.update_attributes(params[:user])
        flash[:success] = "The user \"#{requested_user.name}\" has been successfully updated."
      end
      if requested_user.status == "Approved"
        new_user = User.new
        new_user.name = requested_user.name
        new_user.role_id = requested_user.role_id
        new_user.institution_id = requested_user.institution_id
        new_user.fullname = requested_user.fullname
        new_user.email = requested_user.email
        new_user.parent_id = session[:user].id
        new_user.timezonepref = User.find_by(id: new_user.parent_id).timezonepref
        if new_user.save
          password = new_user.reset_password
          # Mail is sent to the user with a new password
          prepared_mail = MailerHelper.send_mail_to_user(new_user, "Your Expertiza account and password have been created.", "user_welcome", password)
          prepared_mail.deliver_now
          flash[:success] = "A new password has been sent to new user's e-mail address."
          undo_link("The user \"#{requested_user.name}\" has been successfully created. ")
        else
          foreign
        end
      elsif requested_user.status == "Rejected"
        # If the user request has been rejected, a flash message is shown and redirected to review page
        if requested_user.update_columns(status: is_approved)
          flash[:success] = "The user \"#{requested_user.name}\" has been Rejected."
          # redirect_to action: 'list_pending_requested'
          # return
        else
          flash[:error] = "Error processing request."
        end
      end
    end
    redirect_to action: 'list_pending_requested'
  end
</pre>
 
== Refactored Method ==
 
This method was refactored so the creation of the new user is handled in a separate method
 
<pre>
  def create_approved_user
    if params[:selection] == nil
      flash[:error] = "Please Approve or Reject before submitting"
      redirect_to action: 'list_pending_requested'
      return
    end
    is_approved = (params[:commit] == "Accept"? "Approved" : "Rejected")
    users = params[:selection]
    users.each do |user|
      requested_user = AccountRequest.find_by(id: user.first)
      requested_user.status = is_approved
      puts "Here"
      if requested_user.status.nil?
        flash[:error] = "Please Approve or Reject before submitting"
      elsif requested_user.update_attributes(params[:user])
        flash[:success] = "The user \"#{requested_user.name}\" has been successfully updated."
       end
      if requested_user.status == "Approved"
        user_new(requested_user)
      elsif requested_user.status == "Rejected"
        # If the user request has been rejected, a flash message is shown and redirected to review page
        if requested_user.update_columns(status: is_approved)
          flash[:success] = "The user \"#{requested_user.name}\" has been Rejected."
          # redirect_to action: 'list_pending_requested'
          # return
        else
          flash[:error] = "Error processing request."
        end
      end
    end
    redirect_to action: 'list_pending_requested'
  end
 
  def user_new(requested_user)
     puts requested_user.inspect
    new_user = User.new
    new_user.name = requested_user.name
    new_user.role_id = requested_user.role_id
    new_user.institution_id = requested_user.institution_id
    new_user.fullname = requested_user.fullname
    new_user.email = requested_user.email
    new_user.parent_id = session[:user].id
    new_user.timezonepref = User.find_by(id: new_user.parent_id).timezonepref
    if new_user.save
      password = new_user.reset_password
      # Mail is sent to the user with a new password
      prepared_mail = MailerHelper.send_mail_to_user(new_user, "Your Expertiza account and password have been created.", "user_welcome", password)
      prepared_mail.deliver_now
      flash[:success] = "A new password has been sent to new user's e-mail address."
      undo_link("The user \"#{requested_user.name}\" has been successfully created. ")
    else
      foreign
    end
  end
</pre>
</pre>



Revision as of 23:12, 19 October 2021

About Expertiza

Expertiza is an open source project based on Ruby on Rails framework that supports submission across different document types, including theURLs and wiki pages. It allows the instructor not only to create and customize new or existing assignments but also 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.


Description about project

This page is a description of Expertiza OSS project E2126 which refactoring the account_request_controller.rb file. This file allows Super Administrators to manage the approval process for new users. Our job was to refactor some of the longer methods in this file, make error messages more intuitive, and add a security captcha to the approval/rejection process.

Team

Connor Smith (cpsmith6)

Abir Majumder (aamajumd)

Joshua Myers (jamyers3)

Files Involved

account_request_controller.rb

Running Tests

  rspec ./spec/controllers/account_request_controller.rb

Relevant Methods

  • action_allowed?
  • create_approved_user
  • create_requested_user_record

action_allowed?

This method returns the correct html tag if a review file exist. Otherwise, it should return an empty string when the file does not exist. In the first test, a sudo file created in AssignmentTeam is allowed to find and return a correct html that start with "<a href". In the second test, since the file does not exist, it returns an empty string.

    Insert code here

create_approved_user

This method allows a Super Admin to approve or reject new users, and gives them an error message if the incorrect steps are taken during that process

Original Method

  def create_approved_user
    if params[:selection] == nil
      flash[:error] = "Please Approve or Reject before submitting"
      redirect_to action: 'list_pending_requested'
      return 
    end
    is_approved = (params[:commit] == "Accept"? "Approved" : "Rejected")
    users = params[:selection]
    users.each do |user|
      requested_user = AccountRequest.find_by(id: user.first)
      requested_user.status = is_approved
      if requested_user.status.nil?
        flash[:error] = "Please Approve or Reject before submitting"
      elsif requested_user.update_attributes(params[:user])
        flash[:success] = "The user \"#{requested_user.name}\" has been successfully updated."
      end
      if requested_user.status == "Approved"
        new_user = User.new
        new_user.name = requested_user.name
        new_user.role_id = requested_user.role_id
        new_user.institution_id = requested_user.institution_id
        new_user.fullname = requested_user.fullname
        new_user.email = requested_user.email
        new_user.parent_id = session[:user].id
        new_user.timezonepref = User.find_by(id: new_user.parent_id).timezonepref
        if new_user.save
          password = new_user.reset_password
          # Mail is sent to the user with a new password
          prepared_mail = MailerHelper.send_mail_to_user(new_user, "Your Expertiza account and password have been created.", "user_welcome", password)
          prepared_mail.deliver_now
          flash[:success] = "A new password has been sent to new user's e-mail address."
          undo_link("The user \"#{requested_user.name}\" has been successfully created. ")
        else
          foreign
        end
      elsif requested_user.status == "Rejected"
        # If the user request has been rejected, a flash message is shown and redirected to review page
        if requested_user.update_columns(status: is_approved)
          flash[:success] = "The user \"#{requested_user.name}\" has been Rejected."
          # redirect_to action: 'list_pending_requested'
          # return
        else
          flash[:error] = "Error processing request."
        end
      end
    end
    redirect_to action: 'list_pending_requested'
  end

Refactored Method

This method was refactored so the creation of the new user is handled in a separate method

  def create_approved_user
    if params[:selection] == nil
      flash[:error] = "Please Approve or Reject before submitting"
      redirect_to action: 'list_pending_requested'
      return 
    end
    is_approved = (params[:commit] == "Accept"? "Approved" : "Rejected")
    users = params[:selection]
    users.each do |user|
      requested_user = AccountRequest.find_by(id: user.first)
      requested_user.status = is_approved
      puts "Here"
      if requested_user.status.nil?
        flash[:error] = "Please Approve or Reject before submitting"
      elsif requested_user.update_attributes(params[:user])
        flash[:success] = "The user \"#{requested_user.name}\" has been successfully updated."
      end
      if requested_user.status == "Approved"
        user_new(requested_user)
      elsif requested_user.status == "Rejected"
        # If the user request has been rejected, a flash message is shown and redirected to review page
        if requested_user.update_columns(status: is_approved)
          flash[:success] = "The user \"#{requested_user.name}\" has been Rejected."
          # redirect_to action: 'list_pending_requested'
          # return
        else
          flash[:error] = "Error processing request."
        end
      end
    end
    redirect_to action: 'list_pending_requested'
  end

  def user_new(requested_user)
    puts requested_user.inspect
    new_user = User.new
    new_user.name = requested_user.name
    new_user.role_id = requested_user.role_id
    new_user.institution_id = requested_user.institution_id
    new_user.fullname = requested_user.fullname
    new_user.email = requested_user.email
    new_user.parent_id = session[:user].id
    new_user.timezonepref = User.find_by(id: new_user.parent_id).timezonepref
    if new_user.save
      password = new_user.reset_password
      # Mail is sent to the user with a new password
      prepared_mail = MailerHelper.send_mail_to_user(new_user, "Your Expertiza account and password have been created.", "user_welcome", password)
      prepared_mail.deliver_now
      flash[:success] = "A new password has been sent to new user's e-mail address."
      undo_link("The user \"#{requested_user.name}\" has been successfully created. ")
    else
      foreign
    end
  end

Results

34 out of 34 tests in the review_mapping_helper_spec.rb test file.

Our code changes can be viewed here.

URL link of video of review_mapping_helper_spec.rb tests running and passing:- https://drive.google.com/file/d/1OS4yNI0fDGo4TlkOSxuWNgfMZ4D-XU2f/view

Relevant Links

Main Expertiza Repository can be found here.

Our forked Repository can be found here.