autolab / Autolab

Course management service that enables auto-graded programming assignments.
http://www.autolabproject.com/
Apache License 2.0
743 stars 209 forks source link

Fix scoreboard sorting failing on custom scoreboardOrderSubmissions, add more error checking when creating scoreboard entries / displaying #2092

Closed 20wildmanj closed 4 months ago

20wildmanj commented 4 months ago

Description

Motivation and Context

Closes #2086

How Has This Been Tested?

Import the provided assessment: randomlab5_20240217.tar.zip

  1. Upload at least two submissions as students

  2. View scoreboard, see that it renders fine (if it is not rendering fine, upload autograder.taras the autograder)

  3. Upload the assessment config file randomlab5-bad-scoreboard-order.rb (in Edit Assessment you can upload)

    • this test returns a bad sort, causing an ArgumentError
  4. See that you get an error as follows: Screenshot 2024-02-17 at 3 22 59 PM

  5. Try to view scoreboard as a student and see that you get redirected back to assessment index with an error flash

  6. Upload the initial assessment config file back, and then upload autograde-bad.tar as the new autograder

    • this autograder returns just a number instead of an array
  7. Regrade all submissions

  8. view scoreboard as instructor, see that following error appears: Screenshot 2024-02-17 at 3 59 06 PM

  9. View scoreboard as student, see that scoreboard is visible but error icons appear: Screenshot 2024-02-17 at 4 03 59 PM

  10. Upload the old autograder.tar back, and regrade all

  11. Then add this code after line 296 in scoreboards_controller.rb:

    if [true, false].sample
      parsed["scoreboard"] = 0
    end

    ( you may need to also reload the config file)

    • this replicates the scenario where sometimes the scoreboard results aren't correct / autograder failed
  12. view the scoreboard as an instructor, see the following error Screenshot 2024-02-17 at 4 41 53 PM

  13. As a student, see something like this (all the bad scoreboard entries are at the bottom) Screenshot 2024-02-17 at 2 30 28 PM

Types of changes

coderabbitai[bot] commented 4 months ago

Walkthrough

This set of changes introduces improved error handling and sorting logic in the scoreboards_controller.rb, alongside UI adjustments in scoreboards/show.html.erb to enhance user experience when encountering errors. The modifications aim to address specific bugs and enhance the robustness of the application by preventing crashes and displaying more informative error messages.

Changes

File Path Change Summary
app/controllers/scoreboards_controller.rb Error handling in show, sorting logic adjustment, enhanced error messages and logging.
app/views/scoreboards/_form.html.erb Modified form_for declaration and updated styling for error messages.
app/views/scoreboards/show.html.erb Added error handling section and updated logic to prevent index out of bounds errors.
config/routes.rb Removed get "help", on: :member route declaration within the scoreboard resource configuration.

Assessment against linked issues

Objective Addressed Explanation
ArgumentError in scoreboards#show due to Hash comparison [#2086]
Improve error handling and logging in scoreboard processing [#2086]
Ensure UI gracefully handles errors and prevents index out of bounds [#2086]

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 - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

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 .` - `Generate unit-tests for this file.` - 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 tests 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 from git and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit tests.` - `@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](https://coderabbit.ai/integrations/coderabbit-overrides.v2.json). - 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](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback.
damianhxy commented 4 months ago

When updating the assessment rb file, if you go straight to the scoreboard (i.e. don't load the assessment index page), there is an error about an undefined method.

Screenshot 2024-02-21 at 02 19 53

However, after loading the assessment index page at least once, the error message is now as expected

Screenshot 2024-02-21 at 02 31 54

Suspect it is because reload_config_file is not called by assessments_controller.rb#update

20wildmanj commented 4 months ago

When updating the assessment rb file, if you go straight to the scoreboard (i.e. don't load the assessment index page), there is an error about an undefined method.

Screenshot 2024-02-21 at 02 19 53

However, after loading the assessment index page at least once, the error message is now as expected

Screenshot 2024-02-21 at 02 31 54

Suspect it is because reload_config_file is not called by assessments_controller.rb#update

I noticed this while testing, not sure why going to index would resolve this though because doesn't seem that index doesn't do any calls to reload the config file? Not sure if it's worth looking into a fix for a hook that very few classes use (and the ones that do should understand how to reload the config file)