CSC/ECE 517 Fall 2015/ossE1572VGA: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
Line 18: Line 18:
==Reviewer Instructions==
==Reviewer Instructions==
===Clone the reopsitory===
===Clone the reopsitory===
Visit [https://github.com/expertiza/expertiza Github repo] for the repository URL. Make sure you're logged in if you have commit access, because the URL will be different.
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 52: Line 52:


     rspec spec/features/assignment_creation_spec.rb
     rspec spec/features/assignment_creation_spec.rb


==Classes Involved==
==Classes Involved==

Revision as of 21:50, 31 October 2015

Template:Student sandbox

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:

  1. Understand the flow of the Assignment creation by instructor manually.
  2. Mock the same steps using capybara
  3. 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

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.

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