CSC/ECE 517 Spring 2023 - E2317: Reimplement participant.rb

From Expertiza_Wiki
Jump to navigation Jump to search

This wiki page is for the description of changes made under E2317 OSS assignment for Spring 2023, CSC/ECE 517

About Expertiza

Expertiza is an open source project based on Ruby on Rails framework. It is a web application which is maintained collectively by NC State faculty and students which allows instructors to create new assignments and customize new or existing assignments. It also allows the instructors 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.

Overview of the Classes

participant.rb

The participant.rb is a model class that has many associations with other models. There are many methods present in it such as fullname, name, team and handle. There is a method called delete which checks for any associations before performing the delete operation. The other methods include topic_name, mail_assigned_reviewers, able_to_review, email, authorization and self.sort_by_name. There is one more method self.export that returns the information of the participant as a CSV file.

Backgroud of the Project

The participant.rb model has many new changes to be implemented. The reimplementation has to make sense and while checking the original model, we realised that some of the methods were irrelevant to participants model and that it has to be implemented in some other model. The changes mainly dealt with removing, merging and replacing methods to segregate methods with a single functionality relevant to participants model. Tests were written for all of the methods that were introduced and modified. Existing tests for the methods that were unchanged were run to ensure proper functioning of the model. Comments are added to each method to enhance readability. Further information about the reimplementations are discussed below.

Design Decisions

The following changes were reimplemented in the participant.rb

Tasks Status Testing
Replaced force_delete method with leave_team method Implemented Completed
mail_assigned_reviewers method was removed Implemented N/A
able_to_review method was eliminated Implemented N/A
email method was removed Implemented N/A

Replaced force_delete Method with leave_team Method

The original 'force_delete' method would delete the participant from the team and if there is only one participant in the team then it would delete the team.

A new method 'leave_team' was introduced in place of 'force_delete' as 'force_delete' method is supposed to be present in the teams.rb and not participant.rb. The difference between force_delete method and this is that even if there is only one participant it wouldn't delete the team.

mail_assigned_reviewers Method was Removed

The method 'Mail_assigned_reviewers' is responsible for sending an email to the assigned reviewer whenever a new submission is made. It would be more appropriate for this method to be included in teams.rb rather than participant.rb. Hence, this method was removed.

able_to_review Method was Removed

'able_to_review' method is just using can_review value. This method can be eliminated.

email Method was Removed

'email' method was removed as it was not required.

Merged export and export_fields Methods

We didn't implement this task as merging two functions became a hassle for debugging and testing and fixing errors present in the code. Instead, it is generally considered good programming practice to break down large functions into smaller, more manageable ones. This principle is commonly known as the "Single Responsibility Principle," which states that a function or module should have only one reason to change. By breaking down a large function into smaller functions, made our code more modular and easier to read, understand, and maintain.


Testing Plan

The reimplementation codebase originally used Minitest to test the included models: assignment.rb, role.rb, and user.rb. But since Expertiza was originally tested with RSpec, we used RSpec to test out model. The participants.rb contains many methods and associations with other models. Hence, to test the methods in participants, the other dependent methods have to be stubbed. To deal with the models, dummy models/dummy app can be created which will act as the associated classes. We have created all the required dummy classes by scaffolding them.

To create test fixtures and to build the required models, Factory Bot has been used. Two separate files, factories.rb and factory_bot.rb was created to build the factories.

4 participants and other required fields were created as fixtures after which the tests were written.

Note

The dummy classes that were created and other dependencies that were specifically installed for testing have been pushed to a different branch to not lBold textet the main codebase clutter with empty models.

To run the tests, kindly pull from the testing_files branch of the repository and run bundle install to install dependencies like RSpec and Factory Bot.

Tests

Course_controller tests


Test No. Description
1 Tests if the action_allowed disallows all actions when current user is student.
2 Tests if the action_allowed allows all course actions when current user is instructor.
3 Tests if create method returns a 201 Created status code if the resource is successfully created.
4 Tests if create method returns a 422 Unprocessable Entity status code if the resource cannot be created due to validation errors.
5 Tests if the delete method returns a 204 No Content status code if the resource is successfully deleted.
6 Tests if the delete method returns a 404 Not Found status code if the resource cannot be found.
7 Tests if the new method sets the private instance variable.
8 Tests if the update method returns a 200 OK status code if the resource is successfully updated.
9 Tests if the update method returns a 422 Unprocessable Entity status code if the resource cannot be updated due to validation errors.
10 Tests if the topic_name method returns the participant topic name when not nil.
11 Tests if the auto_complete_for_user_name method returns a list of users.
12 Tests if the copy method redirects to new course when new course id fetched successfully.
13 Tests if the view_teaching_assistants method returns list of TAs for the course.
14 Tests if the add_ta method returns a 200 OK status code if a TA added successfully to the course.
13 Tests if the add_ta method returns a 422 Unprocessable Entity status code if a TA cannot be added to the course.
14 Tests if the remove_ta method returns a 204 No Content status code if the ta is successfully removed from the course.
15 Tests if the remove_ta method returns a 404 Not Found status code if the ta cannot be found.
16 Tests if the set_course_fields method sets the course fields.

Relevant Links

Github repository: https://github.com/amarthyasa/reimplementation-back-end/tree/main
Github repository branch for testing: https://github.com/amarthyasa/reimplementation-back-end/tree/testing_files
Pull request: https://github.com/expertiza/reimplementation-back-end/pull/5
Testing video: https://drive.google.com/file/d/1VXMF8dbJgjcj68Y9pRTgXg2cJrfL9-_6/view?usp=sharing

Team

Mentor

Rucha Kolekar

Student Team

Amarthya Sivakumar Annu (asivaku5@ncsu.edu)
Ajay Krishna Raveendar (araveen@ncsu.edu)
Kiron Jayesh (kjayesh@ncsu.edu)