CSC/ECE 517 Fall 2015/ossE1572VGA: Difference between revisions
(→Code) |
|||
(12 intermediate revisions by the same user not shown) | |||
Line 12: | Line 12: | ||
==Project Links== | ==Project Links== | ||
* [ | * [https://github.com/gmeneze/expertiza Github repo] | ||
* [http://www.wikipedia.org Expertiza pull request] | * [http://www.wikipedia.org Expertiza pull request] | ||
* [ | * [https://www.youtube.com/watch?v=yC_heDL6GSw Youtube video manual] | ||
==Reviewer Instructions== | ==Reviewer Instructions== | ||
===Clone the reopsitory=== | ===Clone the reopsitory=== | ||
Visit [https://github.com/ | Visit [https://github.com/gmeneze/expertiza Github repo] for the repository URL. Make sure you're logged in if you have commit access, because the URL will be different. | ||
git clone (repository URL) | git clone (repository URL) | ||
Line 53: | Line 53: | ||
rspec spec/features/assignment_creation_spec.rb | rspec spec/features/assignment_creation_spec.rb | ||
'''Note''' : As our project involves implementation of feature tests for assignment creation rather than refactoring, we do not test the new code via UI (as the new code added are themselves tests). | |||
'''Note''' : Travis CI build fails because we are directly using the development database for our tests, thus Travis CI is not able to locate the login information. This was done because it was not possible to create factories or fixtures for our tests. So, please don’t consider the build failure in the pull request to be a valid error. | |||
==Solutions to problems while setting up the repository== | |||
===rjb gem error=== | |||
* To solve this, make sure that you have java installed on your system or else you could do that from [https://help.ubuntu.com/community/Java here]. | |||
* Then set the JAVA_HOME environment variable by typing this on the terminal | |||
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 | |||
* Run bundle install again. | |||
===pg gem error=== | |||
* To solve this, we have to install PostgreSQL. | |||
* Then type in the following set of commands in the terminal | |||
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list" | |||
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - | |||
sudo apt-get update | |||
sudo apt-get install postgresql-common | |||
sudo apt-get install postgresql-9.3 libpq-dev | |||
*Run bundle install again | |||
===Database related errors=== | |||
* Here is the link of Expertiza scrubbed DB (https://drive.google.com/a/ncsu.edu/file/d/0B2vDvVjH76uESEkzSWpJRnhGbmc/view?usp=sharing) | |||
* Download the file, unzip it and dump to MySQL. | |||
* Then type | |||
rake db:migrate RAILS_ENV=development | |||
rake db:migrate RAILS_ENV=test | |||
===Other errors=== | |||
For any other kind of errors faced during setting up the repository, you can write to us at any of the following ids. | |||
* aslingwa@ncsu.edu | |||
* gmeneze@ncsu.edu | |||
* vpaul@ncsu.edu | |||
==Classes Involved== | ==Classes Involved== | ||
Line 59: | Line 98: | ||
* rails_helper.rb | * rails_helper.rb | ||
The assignment_creation.rb contains the feature tests written to test the creation of the assignment. The rails_helper is copied to spec/ when you run 'rails generate rspec:install'. All the rspec-expectations config goes into the spec_helper_file. We have used Capybara and RSpec to test our application. Capybara helps you test web applications by simulating how a real user would interact with your app. | The assignment_creation.rb contains the feature tests written to test the creation of the assignment. The rails_helper is copied to spec/ when you run 'rails generate rspec:install'. All the rspec-expectations config goes into the spec_helper_file. We have used Capybara and RSpec to test our application. Capybara helps you test web applications by simulating how a real user would interact with your app. One of the major reasons for selecting Capybara to write our tests was that it has an intuitive API which mimics the language an actual user would use and also we can run tests from fast headless mode to an actual browser with no changes to our tests. | ||
==Scenarios Tested== | |||
No matter which combination of parameters are selected in the creation of the assignment, the test cases should pass. Following are some of the scenarios which we have tested. | |||
===Scenarios for private assignment=== | |||
*Create Assignment with Has teams parameter | |||
*Create Assignment with Has quiz parameter | |||
*Create Assignment with Wiki assignment parameter | |||
*Create Assignment with Micro-task assignment parameter | |||
*Create Assignment with Reviews visible to all other reviewers parameter | |||
*Create Assignment with Is code submission required parameter | |||
*Create Assignment with Available to students parameter | |||
*Create Assignment with all options | |||
*Create Assignment with no options | |||
*Create Assignment with Has teams and Has quiz parameters | |||
*Create Assignment with Micro-task assignment and Reviews visible to all other reviewers parameters | |||
*Create Assignment with Is code submission required and Available to students parameters | |||
*Create Assignment with Has team, Has quiz and Wiki assignment parameters | |||
*Create Assignment with negative scenario | |||
===Scenarios for public assignment=== | |||
*Create Assignment with has teams parameter | |||
*Create Assignment with has quiz parameter | |||
*Create Assignment with has Wiki Assignment parameter | |||
*Create Assignment with has Micro-task assignment parameter | |||
*Create Assignment with has Reviews visible to all other reviewers parameter | |||
*Create Assignment with has Is code submission required parameter | |||
==Flow of our test== | |||
[[File:test flow.png]] | |||
==Code== | ==Code== |
Latest revision as of 15:04, 7 November 2015
Introduction
This page provides a description of the Expertiza based OSS project. Expertiza is an open source rails application developed on ruby and rails. The application allows students to submit and peer-review learning objects (articles, code, web sites, etc). The instructors can create assignments using this application and customize and manage them. It also helps to introduce the peer review system by which students can review the projects of their colleagues.
Problem Statement
We were expected to write a feature test which mocks the creation of an Assignment. For Expertiza Assignment management is the central part of the workflow. Goals:
- Understand the flow of the Assignment creation by instructor manually.
- Mock the same steps using capybara
- Create multiple assignments with different options and testing their existence.
Project Links
Reviewer Instructions
Clone the reopsitory
Visit Github repo for the repository URL. Make sure you're logged in if you have commit access, because the URL will be different.
git clone (repository URL)
See https://help.github.com for help on setting up git, authenticating with SSH keys, and checking out a repository.
Installing Gems (ruby dependencies)
In the expertiza directory:
bundle install
Set up databses
- Go to the expertiza directory.
cd expertiza
- Create the development and test databases.
rake db:create:all
- If available, import the database dump that you received in class to pre-populate your database. eg:
mysql -u root expertiza_development < expertiza-scrubbed.sql
- Run the Expertiza database migrations. This should populate your database with the current tables of the schema.
rake db:migrate
Running the tests
- Go to the expertiza directory if you are not already there.
- Run the test
rspec spec/features/assignment_creation_spec.rb
Note : As our project involves implementation of feature tests for assignment creation rather than refactoring, we do not test the new code via UI (as the new code added are themselves tests).
Note : Travis CI build fails because we are directly using the development database for our tests, thus Travis CI is not able to locate the login information. This was done because it was not possible to create factories or fixtures for our tests. So, please don’t consider the build failure in the pull request to be a valid error.
Solutions to problems while setting up the repository
rjb gem error
- To solve this, make sure that you have java installed on your system or else you could do that from here.
- Then set the JAVA_HOME environment variable by typing this on the terminal
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
- Run bundle install again.
pg gem error
- To solve this, we have to install PostgreSQL.
- Then type in the following set of commands in the terminal
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list" wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get install postgresql-common sudo apt-get install postgresql-9.3 libpq-dev
- Run bundle install again
- Here is the link of Expertiza scrubbed DB (https://drive.google.com/a/ncsu.edu/file/d/0B2vDvVjH76uESEkzSWpJRnhGbmc/view?usp=sharing)
- Download the file, unzip it and dump to MySQL.
- Then type
rake db:migrate RAILS_ENV=development rake db:migrate RAILS_ENV=test
Other errors
For any other kind of errors faced during setting up the repository, you can write to us at any of the following ids.
- aslingwa@ncsu.edu
- gmeneze@ncsu.edu
- vpaul@ncsu.edu
Classes Involved
- assignment_creation.rb
- spec_helper.rb
- rails_helper.rb
The assignment_creation.rb contains the feature tests written to test the creation of the assignment. The rails_helper is copied to spec/ when you run 'rails generate rspec:install'. All the rspec-expectations config goes into the spec_helper_file. We have used Capybara and RSpec to test our application. Capybara helps you test web applications by simulating how a real user would interact with your app. One of the major reasons for selecting Capybara to write our tests was that it has an intuitive API which mimics the language an actual user would use and also we can run tests from fast headless mode to an actual browser with no changes to our tests.
Scenarios Tested
No matter which combination of parameters are selected in the creation of the assignment, the test cases should pass. Following are some of the scenarios which we have tested.
Scenarios for private assignment
- Create Assignment with Has teams parameter
- Create Assignment with Has quiz parameter
- Create Assignment with Wiki assignment parameter
- Create Assignment with Micro-task assignment parameter
- Create Assignment with Reviews visible to all other reviewers parameter
- Create Assignment with Is code submission required parameter
- Create Assignment with Available to students parameter
- Create Assignment with all options
- Create Assignment with no options
- Create Assignment with Has teams and Has quiz parameters
- Create Assignment with Micro-task assignment and Reviews visible to all other reviewers parameters
- Create Assignment with Is code submission required and Available to students parameters
- Create Assignment with Has team, Has quiz and Wiki assignment parameters
- Create Assignment with negative scenario
Scenarios for public assignment
- Create Assignment with has teams parameter
- Create Assignment with has quiz parameter
- Create Assignment with has Wiki Assignment parameter
- Create Assignment with has Micro-task assignment parameter
- Create Assignment with has Reviews visible to all other reviewers parameter
- Create Assignment with has Is code submission required parameter
Flow of our test
Code
assignment_creation.rb
require 'rails_helper' require 'spec_helper' def GenerateAssignmentName() (rand(1000) + 1).to_s + 'RSpecID' + (1 + rand(1000)).to_s end RSpec.feature "create private assignment" do before(:each) do |example| unless example.metadata[:skip_before] visit root_path fill_in('login_name', :with => 'instructor6') fill_in('login_password', :with => 'password') click_on('SIGN IN') expect(page).to have_content('Manage') within(".content") do click_on("Assignments") click_button 'New private assignment' fill_in('assignment_form_assignment_name',:with => GenerateAssignmentName()) select('CSC 517 Fall 2010', from: 'assignment_form_assignment_course_id') fill_in('assignment_form_assignment_directory_path',:with => '/') fill_in('assignment_form_assignment_spec_location',:with => 'google.com') end end end
Given above is a portion of the code which we have to execute before testing each scenario. This is encapsulated within before(:each). In order to be able to create assignments, the instructor has to first login. So we set up the environment of logging in in the before(:each) block and navigating to the page where assignments can be created.
We have written a total of 27 test cases in the assignment_creation.rb testing all the permutations and combinations with which an instructor can create an assignment. Listed below are a few of those test cases for the creation of a private assignment.
scenario "Create Assignment with Has teams?", :js => true do uncheck('assignment_form_assignment_availability_flag') check('team_assignment') click_on('Create') click_on('Rubrics') within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]').first() end within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end within('#questionnaire_table_AuthorFeedbackQuestionnaire') do select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end expect(page).to have_content("Rubrics") click_on('submit_btn') expect(page).to have_content("successfully",:wait=>5) end
scenario "Create Assignment with Has quiz?", :js => true do uncheck('assignment_form_assignment_availability_flag') check('assignment_form_assignment_require_quiz') click_on('Create') click_on('Rubrics') within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]').first() end within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end within('#questionnaire_table_AuthorFeedbackQuestionnaire') do select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end expect(page).to have_content("Rubrics") click_on('submit_btn') expect(page).to have_content("successfully",:wait=>5) end
The test cases written also contain tests for the creation of public assignments. Listed below are the following tests. Once again we need to sign in the instructor before he can create any assignments.
RSpec.feature "create public assignment" do before(:each) do #@user = FactoryGirl.create(:user) visit root_path fill_in('login_name', :with => 'instructor6') fill_in('login_password', :with => 'password') click_on('SIGN IN') expect(page).to have_content('Manage') within(".content") do click_on("Assignments") end end
scenario "Create Assignment has teams",:js => true do click_button 'New public assignment' fill_in('assignment_form_assignment_name',:with => GenerateAssignmentName()) select('CSC 517 Fall 2010', from: 'assignment_form_assignment_course_id') fill_in('assignment_form_assignment_directory_path',:with => '/') fill_in('assignment_form_assignment_spec_location',:with => 'google.com') check('team_assignment') check('assignment_form_assignment_availability_flag') #find(:xpath, "//input[@id=]").set "0" click_on('Create') click_on('Rubrics') within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end within('#questionnaire_table_AuthorFeedbackQuestionnaire') do select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end expect(page).to have_content("Rubrics") click_on('submit_btn') expect(page).to have_content("successfully",:wait=>5) end
scenario "Create Assignment has quiz",:js => true do click_button 'New public assignment' fill_in('assignment_form_assignment_name',:with => GenerateAssignmentName()) select('CSC 517 Fall 2010', from: 'assignment_form_assignment_course_id') fill_in('assignment_form_assignment_directory_path',:with => '/') fill_in('assignment_form_assignment_spec_location',:with => 'google.com') check('assignment_form_assignment_require_quiz') check('assignment_form_assignment_availability_flag') #find(:xpath, "//input[@id=]").set "0" click_on('Create') click_on('Rubrics') within('#questionnaire_table_ReviewQuestionnaire') do select('Animation', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end within('#questionnaire_table_AuthorFeedbackQuestionnaire') do select('Author feedback OTD1', from: 'assignment_form[assignment_questionnaire][][questionnaire_id]') end expect(page).to have_content("Rubrics") click_on('submit_btn') expect(page).to have_content("successfully",:wait=>5) end