CSC/ECE 517 Spring 2018/E1823 Write integration tests for users controller.rb
This wiki page is a description of E1813 final project for Spring 2018, CSC/ECE 517.
Project Statement
Introduction
users_controller.rb is a file under app/controllers that manages different kinds of methods related to users. This project is to write integration tests for users_controller.rb by using rspec, so our goal is to create a file named users_controller_spec.rb under spec/controllers folder and write integration tests to make the path coverage of users_controller.rb more than 90% and achieve the highest possible branch coverage.
All methods used in this file that can render or redirect to one or more user-related views will be thoroughly tested.(16 in total) We do not need to test private or protected methods directly because these methods should be tested when testing other public methods in the same file.
Files Involved
Newly-created file:
spec/users_controller_spec.rb
Tested file:
app/controllers/users_controller.rb
Related view files:
app/views/users/edit.html.erb
app/views/users/keys.html.erb
app/views/users/list.html.erb
app/views/users/list_pending_requested.erb
app/views/users/new.html.erb
app/views/users/request_new.html.erb
app/views/users/show.html.erb
Team Members
1. Sandeep Rajendran(srajend@ncsu.edu)
2. Xiao Ma(xma21@ncsu.edu)
3. Zekun Zhang(zzhang56@ncsu.edu)
4. Zhiyu Chen(zchen45@ncsu.edu)
Functionality of the Controller
Table
Methods
1. index
This method is used to list all the users in the database. A permissions check is done first to verify that the current user has permission to view the list of users. If the user is a student, he is redirected away from the page. All other user roles have access to the page.
2. auto_complete_for_user_name
The method finds all users who have names similar to the one being typed and displays only those that have a lower role than the current user. The page is rendered again showing all these suggestions.
3. set_anonymized_view
4. list
13. edit
resources :users in routing rule maps /users/1/edit (assuming user's id is 1) to edit action in UsersController.
Thus, this edit method is called when accessing user's edit page and will pull the relevant user out of the database via user's id that stored in params[:id].
14. update
resources :users in routing rule makes update action get called when the form in user's edit page is submitted.
This method will first find the relevant user by user's id that stored in params[:id] and then updates the user's information in the database based on the submitted params hash. If the update is successful it shows a success flash and redirects to user's show page otherwise it renders user's edit page.
15. destroy
resources :users in routing rule makes destroy action response to the delete method and thus accomplishing the user deletion.
When this method is called, it will first find the relevant user via user's id that stored in params[:id] and then delete related AssignmentParticipant, TeamsUser and AssignmentQuestionnaire models if any (These models are found through their foregin key: user_id). Finally, the user is deleted from the database and it will show a success flash. If any of the above steps fails, it will throw an error flash.
16. keys