Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed faulty nil checks #2139

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

coder6583
Copy link
Contributor

Description

  • Fixed faulty nil checks produced by using .find instead of .find_by
  • Wrote more nil checks that redirect users to valid URLs

Motivation and Context

It prevents the website from responding with ruby errors, and redirects users to valid website and shows them their error.
Issue #2128

How Has This Been Tested?

  • grading.rb
    • Accessed /courses/:course_name/assessments/:assessment_name/score_grader_info/:id with an invalid id and made sure it redirects the user back to the assessment page
    • Accessed gradebook and made sure it shows the correct scores
  • course_user_data_controller.rb
    • Accessed /course/:course_name/course_user_data/:id with a valid id and made sure that it showed the user
    • Accessed /course/:course_name/course_user_data/:id with an invalid id and made sure that it went back to the user list with the correct error
  • courses_controller.rb
    • Ran MOSS cheat checker and made sure it works
  • groups_controller.rb
    • Created two assignments with two users, one with and one without a group. Imported the group into the one without a group
  • users_controller.rb
    • Accessed /users and checked there are users
    • Accessed /users/:id with valid user id and checked that it shows the user
    • Accessed /users/:id with an invalid user id and check that it goes back to /users
  • schedulers_controller.rb, lti_nrps_controller.rb, updateGradebook.rb
    • Could not figure out how to test them

Types of changes

  • Bug fix (non-breaking change which fixes an issue)

Checklist:

  • I have run rubocop and erblint for style check. If you haven't, run overcommit --install && overcommit --sign to use pre-commit hook for linting

Other issues / help required

I need some help on testing schedulers_controller.rb, lti_nrps_controller.rb, updateGradebook.rb.

Copy link
Contributor

coderabbitai bot commented Apr 1, 2024

Walkthrough

Walkthrough

This update addresses a common issue across several controllers and a script within the application, focusing on enhancing error handling and data retrieval methods. The changes involve modifying how the application searches for and verifies the existence of database records, likely to improve reliability and user feedback when records are not found.

Changes

Files Summary
app/controllers/.../grading.rb Updated error handling and data retrieval methods
app/controllers/assessments_controller.rb Updated error handling and data retrieval methods
app/controllers/.../course_user_data_controller.rb Updated error handling and data retrieval methods
app/controllers/courses_controller.rb Updated error handling and data retrieval methods
app/controllers/groups_controller.rb Updated error handling and data retrieval methods
app/controllers/lti_nrps_controller.rb Updated error handling and data retrieval methods
app/controllers/schedulers_controller.rb Updated error handling and data retrieval methods
app/controllers/users_controller.rb Updated error handling and data retrieval methods
script/updateGradebook.rb Updated error handling and data retrieval methods

Possibly related issues

  • Faulty nil checks after using a find method #2128: The issue discusses the improper use of .find followed by .nil? checks across several controllers, which is addressed by this PR's focus on improving error handling and data retrieval methods. This PR likely implements the suggested switch to find_by and corrects the nil checks, directly addressing the concerns raised in the issue.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share

Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

@coder6583 coder6583 linked an issue Apr 1, 2024 that may be closed by this pull request
@coder6583 coder6583 requested review from a team and 20wildmanj and removed request for a team April 1, 2024 21:22
Comment on lines +458 to +465
@problem = @assessment.problems.find_by(params[:problem])
if @problem.nil?
flash[:error] = "Could not find problem #{params[:problem]}"
end
@submission = @assessment.submissions.find_by(params[:submission])
if @submission.nil?
flash[:error] = "Could not find submission #{params[:submission]}"
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using find_by improves nil handling, but the way params are passed to it might not work as expected. find_by expects key-value pairs, but params[:problem] and params[:submission] are likely to be single values (IDs). Consider specifying the column names explicitly, for example, find_by(id: params[:problem]). This ensures clarity and prevents potential bugs if the parameters structure changes.

- @problem = @assessment.problems.find_by(params[:problem])
+ @problem = @assessment.problems.find_by(id: params[:problem])
- @submission = @assessment.submissions.find_by(params[:submission])
+ @submission = @assessment.submissions.find_by(id: params[:submission])

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
@problem = @assessment.problems.find_by(params[:problem])
if @problem.nil?
flash[:error] = "Could not find problem #{params[:problem]}"
end
@submission = @assessment.submissions.find_by(params[:submission])
if @submission.nil?
flash[:error] = "Could not find submission #{params[:submission]}"
end
@problem = @assessment.problems.find_by(id: params[:problem])
if @problem.nil?
flash[:error] = "Could not find problem #{params[:problem]}"
end
@submission = @assessment.submissions.find_by(id: params[:submission])
if @submission.nil?
flash[:error] = "Could not find submission #{params[:submission]}"
end

Comment on lines +460 to +465
flash[:error] = "Could not find problem #{params[:problem]}"
end
@submission = @assessment.submissions.find_by(params[:submission])
if @submission.nil?
flash[:error] = "Could not find submission #{params[:submission]}"
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting error messages in the flash is a good practice when handling nil values. However, after setting the error message, consider redirecting the user to a relevant page (e.g., the assessments index or a custom error page). This prevents the execution of further code that assumes @problem and @submission are not nil and enhances the user experience by not leaving them on a potentially broken page.

if @problem.nil?
  flash[:error] = "Could not find problem #{params[:problem]}"
  redirect_to assessments_path and return
end
if @submission.nil?
  flash[:error] = "Could not find submission #{params[:submission]}"
  redirect_to assessments_path and return
end

@@ -174,7 +176,7 @@ def update

action_auth_level :destroy, :instructor
def destroy
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

destroy / destroyConfirm don't actually seem to be routes that are currently used, might be worth removing.

@@ -3,7 +3,7 @@
require File.expand_path(File.dirname(__FILE__)+'/../config/environment')

course_id = ARGV[0]
@course = Course.find(course_id)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this script is unused, should delete

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can I delete the whole file?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

Copy link
Contributor

@20wildmanj 20wildmanj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to be honest don't know how to check scheduler either but otherwise looks good to me! If you could remove the unused code that would be good.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Faulty nil checks after using a find method
2 participants