More tests for users, attachments and wiki pages

master
Alinson S. Xavier 10 years ago
parent 0fe336eae1
commit b7ce190883

@ -18,6 +18,18 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
admin:
id: 1000000
login: admin
salt: 1000
name: admin
email: admin@website.com
hashed_password: 77a0d943cdbace52716a9ef9fae12e45e2788d39 # test
display_name: admin
last_seen: <%= Time.now.to_s(:db) %>
admin: true
secret: admin
bob:
id: 1000001
login: bob
@ -27,7 +39,7 @@ bob:
hashed_password: 77a0d943cdbace52716a9ef9fae12e45e2788d39 # test
display_name: bob
last_seen: <%= Time.now.to_s(:db) %>
admin: true
admin: false
secret: bob
existingbob:

@ -85,7 +85,6 @@ class AttachmentsControllerTest < ActionController::TestCase
context "on get to :edit" do
setup { get :edit, :course_id => @course.id, :id => @att.id }
#should render_a_form
should render_template 'edit'
end

@ -25,22 +25,21 @@ require 'courses_controller'
# class CoursesController; def rescue_action(e) raise e end; end
class CoursesControllerTest < ActionController::TestCase
def setup
@course = courses(:course_1)
@course_id = @course.id
@old_course = courses(:old_course)
LogEntry.delete_all
end
context "An anonymous user" do
should_request_login_on_post_to(:new, {})
should_request_login_on_post_to(:create, {})
should_request_login_on_post_to(:edit, id: 1)
should_request_login_on_post_to(:update, id: 1)
should_request_login_on_post_to(:destroy, id: 1)
should_request_login_on_post_to(:enroll, id: 1)
should_request_login_on_post_to(:unenroll, id: 1)
should_request_login_on_post_to(:new)
should_request_login_on_post_to(:create)
should_request_login_on_post_to(:edit, id: 0)
should_request_login_on_post_to(:update, id: 0)
should_request_login_on_post_to(:destroy, id: 0)
should_request_login_on_post_to(:enroll, id: 0)
should_request_login_on_post_to(:unenroll, id: 0)
context "on get to :index" do
setup { get :index }
@ -60,36 +59,153 @@ class CoursesControllerTest < ActionController::TestCase
end
context "on get to :show" do
setup { get :show, id: @course.id }
setup do
get :show, id: @course.id
end
should respond_with :success
should render_template 'show'
should "display the course" do
assert_select 'a[href=?]', course_log_url(@course)
assert_select 'a[href=?]', course_news_url(@course)
assert_select 'a[href=?]', course_events_url(@course)
assert_select 'a[href=?]', new_course_event_url(@course)
assert_select 'a[href=?]', new_course_attachment_url(@course)
assert_select 'a[href=?]', new_course_wiki_instance_url(@course)
assert_select 'h1', @course.full_name
end
end
end
context "An authenticated user" do
setup { login_as :bob }
context "on :show unknown course" do
setup { get :show, id: 891729312 }
should respond_with :missing
end
context "A regular user" do
setup do
login_as :bob
end
should_have_access_denied_on_post_to(:new)
should_have_access_denied_on_post_to(:create)
should_have_access_denied_on_post_to(:edit, id: 0)
should_have_access_denied_on_post_to(:update, id: 0)
should_have_access_denied_on_post_to(:destroy, id: 0)
context "on get to :enroll" do
setup { get :enroll, id: @course.id }
should respond_with :redirect
should redirect_to('courses') { courses_path }
should "enroll on the course" do
assert @user.courses.include?(@course)
end
end
context "on get to :unenroll" do
setup do
@user.courses << @course
get :unenroll, id: @course.id
end
should respond_with :redirect
should redirect_to('courses') { courses_path }
should "disenroll from the course" do
assert !@user.courses.include?(@course)
end
end
end
context "An admin" do
setup do
login_as :admin
end
context "on post to :create" do
setup do
post :create, course: { full_name: 'New Course',
short_name: 'new_course', code: 'CK001',
grade: '1', period: '2007.1', hidden: false,
description: '' }
end
should respond_with :redirect
should set_flash.to(/created/i)
should redirect_to('the new course') { course_path(assigns(:course)) }
end
context "on get to :edit" do
setup { get :edit, id: @course.id }
should respond_with :success
should render_template 'edit'
should 'assign to :course' do
assert assigns(:course)
end
end
context "on post to :update" do
setup do
post :update, id: @course.id,
course: { full_name: 'new full name',
short_name: 'new_short_name',
code: 'CK9999', grade: '999', period: '2999.1',
hidden: true,
description: 'new description' }
end
should respond_with :redirect
should redirect_to('the updated course') { course_path(assigns(:course)) }
should "update attributes of course" do
@course = Course.find(@course.id)
assert @course.full_name == 'new full name'
assert @course.short_name == 'new_short_name'
assert @course.code == 'CK9999'
assert @course.grade == 999
assert @course.period == '2999.1'
assert @course.hidden == true
assert @course.description == 'new description'
end
end
context "on post to :update with invalid data" do
setup do
post :update, id: @course.id,
course: { full_name: '',
short_name: '',
code: '', grade: 'xxx', period: '',
hidden: 'xxx',
description: '' }
end
should respond_with :success
should render_template 'edit'
end
context "on post to :destroy" do
setup { post :destroy, id: @course.id }
should respond_with :redirect
should redirect_to('courses') { courses_path }
should "remove course from db" do
assert_raise ActiveRecord::RecordNotFound do
Course.find(@course.id)
end
end
end
end
#context "A user" do
# context "A user" do
# setup { login_as :bob }
# should_be_restful do |resource|
# resource.create.params = { short_name: 'test', full_name: 'test', description: 'test' }
# resource.update.params = { short_name: 'test', full_name: 'test', description: 'test' }
# end
#end
# end
## REST - usuários quaisquer
#context "A stranger" do
# context "A stranger" do
# setup { logout }
# should_be_restful do |resource|
# resource.create.params = { short_name: 'test', full_name: 'test', description: 'test' }
@ -98,6 +214,5 @@ class CoursesControllerTest < ActionController::TestCase
# resource.denied.redirect = "'/login'"
# resource.denied.flash = /must be logged in/i
# end
#end
# end
end

@ -22,20 +22,18 @@ require File.dirname(__FILE__) + '/../test_helper'
require 'wiki_controller'
# Re-raise errors caught by the controller.
class WikiController;
class WikiController
def rescue_action(e)
raise e
fail e
end
;
end
class WikiControllerTest < ActionController::TestCase
def setup
@course = Course.first
@wiki_page = @course.wiki_pages.new(:title => 'test1',
:content => 'content1', :description => 'test', :front_page => true)
@wiki_page = @course.wiki_pages.new(title: 'test1',
content: 'content1', description: 'test', front_page: true)
@wiki_page.user = users(:bob)
@wiki_page.version = 1
@wiki_page.save!
@ -43,8 +41,8 @@ class WikiControllerTest < ActionController::TestCase
@wiki_page.title = 'new title'
@wiki_page.save!
@another_wiki_page = @course.wiki_pages.new(:title => 'another',
:content => 'another', :description => 'test', :front_page => true)
@another_wiki_page = @course.wiki_pages.new(title: 'another',
content: 'another', description: 'test', front_page: true)
@another_wiki_page.user = users(:bob)
@another_wiki_page.version = 1
@another_wiki_page.save!
@ -57,22 +55,23 @@ class WikiControllerTest < ActionController::TestCase
end
context "An anonymous user" do
should_request_login_on_post_to(:new, { course_id: 1 })
should_request_login_on_post_to(:create, { course_id: 1 })
should_request_login_on_post_to(:edit, { course_id: 1, id: 1 })
should_request_login_on_post_to(:update, { course_id: 1, id: 1 })
should_request_login_on_post_to(:destroy, { course_id: 1, id: 1 })
should_request_login_on_post_to(:move_up, { course_id: 1, id: 1 })
should_request_login_on_post_to(:move_down, { course_id: 1, id: 1 })
should_request_login_on_post_to(:new, {:course_id => 1})
should_request_login_on_post_to(:create, {:course_id => 1})
should_request_login_on_post_to(:edit, {:course_id => 1, :id => 1})
should_request_login_on_post_to(:update, {:course_id => 1, :id => 1})
should_request_login_on_post_to(:destroy, {:course_id => 1, :id => 1})
should_request_login_on_post_to(:move_up, {:course_id => 1, :id => 1})
should_request_login_on_post_to(:move_down, {:course_id => 1, :id => 1})
context "on get to :index" do
setup { get :index, course_id: @course.id }
#context "on get to :index" do
# setup { get :index, :course_id => @course.id }
# should redirect_to('the course page') { course_url(@course) }
#end
should respond_with :success
should render_template 'index'
end
context "on get to :show" do
setup { get :show, :course_id => @course.id, :id => @wiki_page.id }
setup { get :show, course_id: @course.id, id: @wiki_page.id }
should respond_with :success
should render_template 'show'
@ -83,27 +82,27 @@ class WikiControllerTest < ActionController::TestCase
should "show the selected version" do
@wiki_page.revert_to(1)
get :show, :course_id => @course.id, :id => @wiki_page.id, :version => 1
get :show, course_id: @course.id, id: @wiki_page.id, version: 1
assert_select 'h1.title', @wiki_page.title
end
end
context "on get to :versions" do
setup { get :versions, :course_id => @course.id, :id => @wiki_page.id }
setup { get :versions, course_id: @course.id, id: @wiki_page.id }
should respond_with :success
should render_template 'versions'
should "show the wiki page versions" do
@wiki_page.versions.each do |v|
assert_select 'a[href=?]', course_wiki_instance_url(@course, @wiki_page, :version => v.version)
assert_select 'a[href=?]', course_wiki_instance_url(@course, @wiki_page, version: v.version)
end
end
end
context "on get to :preview" do
context "with valid markup" do
setup { get :preview, :text => "hello {$x$} <script>foo();</script> <i onclick='foo()'>x</i>" }
setup { get :preview, text: "hello {$x$} <script>foo();</script> <i onclick='foo()'>x</i>" }
should respond_with :success
@ -114,50 +113,53 @@ class WikiControllerTest < ActionController::TestCase
end
context "with invalid markup" do
setup { get :preview, :text => "<a" }
setup { get :preview, text: "<a" }
should respond_with :bad_request
end
end
context "on get to :diff" do
setup { get :diff, :course_id => @course.id, :id => @wiki_page.id, :from => 1, :to => 2 }
setup { get :diff, course_id: @course.id, id: @wiki_page.id, from: 1, to: 2 }
should respond_with :success
#should assign_to :diff
# should assign_to :diff
end
end
context "An authenticated user" do
setup { login_as :bob }
context "on get to :new" do
setup { get :new, :course_id => @course.id }
#should render_a_form
setup { get :new, course_id: @course.id }
should respond_with :success
end
context "on post to :create" do
setup do
assert_nil @course.wiki_pages.find_by_title('test2')
post :create, :course_id => @course.id, :wiki_page => {:title => 'test2', :content => 'test2'}
@wiki_page = @course.wiki_pages.find_by_title('test2')
post :create, course_id: @course.id,
wiki_page: { title: 'New Wiki Page',
content: 'This is a new wiki page.' }
end
should respond_with :redirect
should set_flash.to(/created/i)
should redirect_to('the wiki page') { course_wiki_instance_url(@course, @wiki_page) }
should_create_log_entry { [WikiCreateLogEntry, @wiki_page.id, users(:bob).id] }
should redirect_to('the wiki page') {
course_wiki_instance_url(@course, assigns(:wiki_page))
}
should_create_log_entry do
[WikiCreateLogEntry, assigns(:wiki_page).id, users(:bob).id]
end
should "create a new wiki page" do
assert @wiki_page
assert_equal @wiki_page.version, 1
assert_equal users(:bob).id, @wiki_page.user_id
assert assigns(:wiki_page)
assert_equal assigns(:wiki_page).version, 1
assert_equal users(:bob).id, assigns(:wiki_page).user_id
end
end
context "on get to :edit" do
setup { get :edit, :course_id => @course.id, :id => @wiki_page.id }
setup { get :edit, course_id: @course.id, id: @wiki_page.id }
#should render_a_form
# should render_a_form
should render_template 'edit'
should "render a form with the correct fields" do
@ -168,7 +170,7 @@ class WikiControllerTest < ActionController::TestCase
should "edit the selected version" do
@wiki_page.revert_to(1)
get :edit, :course_id => @course.id, :id => @wiki_page.id, :version => 1
get :edit, course_id: @course.id, id: @wiki_page.id, version: 1
assert_select "input[name='wiki_page[title]'][value=?]", @wiki_page.title
assert_select 'textarea', @wiki_page.content
end
@ -177,22 +179,22 @@ class WikiControllerTest < ActionController::TestCase
context "on post to :update" do
context "with unmodified data" do
setup do
post :update, :course_id => @course.id, :id => @wiki_page.id, :wiki_page => {
:title => @wiki_page.title, :content => @wiki_page.content}
post :update, course_id: @course.id, id: @wiki_page.id, wiki_page: {
title: @wiki_page.title, content: @wiki_page.content }
end
should_not set_flash
should redirect_to('the wiki page') { course_wiki_instance_url(@course, @wiki_page) }
should "not create a new log entry" do
assert_nil WikiEditLogEntry.find(:first, :conditions => {:target_id => @wiki_page.id})
assert_nil WikiEditLogEntry.find(:first, conditions: { target_id: @wiki_page.id })
end
end
context "with new data" do
setup do
post :update, :course_id => @course.id, :id => @wiki_page.id, :wiki_page => {
:title => 'brand new title', :content => 'brand new content'}
post :update, course_id: @course.id, id: @wiki_page.id, wiki_page: {
title: 'brand new title', content: 'brand new content' }
@wiki_page.reload
end
@ -210,7 +212,7 @@ class WikiControllerTest < ActionController::TestCase
end
context "on post to :destroy" do
setup { post :destroy, :course_id => @course.id, :id => @wiki_page.id }
setup { post :destroy, course_id: @course.id, id: @wiki_page.id }
should set_flash.to(/removed/i)
should redirect_to('the course page') { course_url(@course) }
@ -226,7 +228,7 @@ class WikiControllerTest < ActionController::TestCase
setup do
assert_equal 1, @wiki_page.position
assert_equal 2, @another_wiki_page.position
get :move_up, :course_id => @course.id, :id => @another_wiki_page.id
get :move_up, course_id: @course.id, id: @another_wiki_page.id
end
should redirect_to('the course page') { course_url(@course) }
@ -243,7 +245,7 @@ class WikiControllerTest < ActionController::TestCase
setup do
assert_equal 1, @wiki_page.position
assert_equal 2, @another_wiki_page.position
get :move_down, :course_id => @course.id, :id => @wiki_page.id
get :move_down, course_id: @course.id, id: @wiki_page.id
end
should redirect_to('the course page') { course_url(@course) }
@ -255,21 +257,5 @@ class WikiControllerTest < ActionController::TestCase
assert_equal 1, @another_wiki_page.position
end
end
end
#def test_should accept_text_on_show
# get :show, :format => 'txt', :course_id => 1, :id => @wiki_page.id
# assert_formatted_response :text
#end
#def test_should accept_html_on_versions
# get :versions, :course_id => 1, :id => @wiki_page.id
# assert_response :success
#end
#def test_should accept_xml_on_versions
# get :versions, :format => 'xml', :course_id => 1, :id => @wiki_page.id
# assert_formatted_response :xml, :versions
#end
end

@ -1,6 +1,15 @@
require 'simplecov'
SimpleCov.start
require 'turn/colorize'
module Turn
module Colorize
def self.color_supported?
true
end
end
end
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
@ -14,8 +23,9 @@ class ActiveSupport::TestCase
# Add more helper methods to be used by all tests here...
def login_as(user)
@request.session[:user_id] = users(user).id
@request.env["HTTP_AUTHORIZATION"] = user ? "Basic #{Base64.encode64("#{users(user).login}:test")}" : nil
@user = users(user)
@request.session[:user_id] = @user.id
@request.env["HTTP_AUTHORIZATION"] = user ? "Basic #{Base64.encode64("#{@user.login}:test")}" : nil
end
def logout
@ -23,45 +33,45 @@ class ActiveSupport::TestCase
@request.env["HTTP_AUTHORIZATION"] = nil
end
def assert_formatted_response(type, element=nil)
def assert_formatted_response(type, element = nil)
assert_response :success
snippet = "Body: #{@response.body.first(100).chomp}..."
case type
when :rss
assert_equal Mime::RSS, @response.content_type, snippet
assert_select "channel", 1, snippet
when :ics
assert_equal Mime::ICS, @response.content_type, snippet
when :text
assert_equal Mime::TEXT, @response.content_type, snippet
when :xml
assert_select element.to_s.dasherize, 1, snippet
else
raise ArgumentError
when :rss
assert_equal Mime::RSS, @response.content_type, snippet
assert_select "channel", 1, snippet
when :ics
assert_equal Mime::ICS, @response.content_type, snippet
when :text
assert_equal Mime::TEXT, @response.content_type, snippet
when :xml
assert_select element.to_s.dasherize, 1, snippet
else
fail ArgumentError
end
end
end
class Test::Unit::TestCase
def self.should_request_login_on_post_to(action, params)
def self.should_request_login_on_post_to(action, params = {})
should "request login on post to #{action}" do
post action, params
assert_redirected_to login_url
end
end
def self.should_have_access_denied_on_post_to(action, params)
def self.should_have_access_denied_on_post_to(action, params = {})
should "have access denied on post to #{action}" do
assert_raises AccessDenied do
post action, params
end
post action, params
assert_response 401
end
end
def self.should_create_log_entry(&block)
should "create log entry" do
log_entry_class, target_id, user_id = instance_eval(&block)
assert log_entry_class.find(:first, :conditions => {:user_id => user_id, :target_id => target_id})
assert log_entry_class.find(:first, conditions: { user_id: user_id,
target_id: target_id })
end
end
end