diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml
index ebab2a6..f8dc2c3 100644
--- a/test/fixtures/users.yml
+++ b/test/fixtures/users.yml
@@ -18,6 +18,18 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
+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:
diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb
index 99dcb1e..7472d4a 100644
--- a/test/functional/attachments_controller_test.rb
+++ b/test/functional/attachments_controller_test.rb
@@ -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
diff --git a/test/functional/courses_controller_test.rb b/test/functional/courses_controller_test.rb
index b54a785..aab7d95 100644
--- a/test/functional/courses_controller_test.rb
+++ b/test/functional/courses_controller_test.rb
@@ -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
diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb
index cf77ae3..30ac4d1 100644
--- a/test/functional/wiki_controller_test.rb
+++ b/test/functional/wiki_controller_test.rb
@@ -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$} x" }
+ setup { get :preview, text: "hello {$x$} x" }
should respond_with :success
@@ -114,50 +113,53 @@ class WikiControllerTest < ActionController::TestCase
end
context "with invalid markup" do
- setup { get :preview, :text => " @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
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 4a19bcb..5bc4cd7 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -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