More tests for users, attachments and wiki pages
This commit is contained in:
14
test/fixtures/users.yml
vendored
14
test/fixtures/users.yml
vendored
@@ -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 user" do
|
||||
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
|
||||
# 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,7 +33,7 @@ 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
|
||||
@@ -37,31 +47,31 @@ class ActiveSupport::TestCase
|
||||
when :xml
|
||||
assert_select element.to_s.dasherize, 1, snippet
|
||||
else
|
||||
raise ArgumentError
|
||||
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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user