require File.dirname(__FILE__) + '/../test_helper' require 'tasks_controller' # Re-raise errors caught by the controller. class TasksController; def rescue_action(e) raise e end; end class TasksControllerTest < Test::Unit::TestCase fixtures :parties, :users, :groups, :groups_users, :backlogs, :periods, :tasks, :task_files, :works, :estimates def setup @controller = TasksController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new @request.session[:user_id] = 1000001 assert_sequences end def teardown assert_sequences end def test_index get :index assert_redirected_to :controller => 'backlogs' end def test_list get :list assert_redirected_to :controller => 'backlogs' end def test_list_started get :list_started, :id => '1' assert_response :success assert_template 'list_started' assert_not_nil assigns(:tasks) assert_not_nil assigns(:selected_task) end def test_list_started_no_selected_task get :list_started assert_response :success assert_template 'list_started' assert_not_nil assigns(:tasks) assert_nil assigns(:selected_task) end def test_new get :new assert_response :success assert_template 'new' assert_not_nil assigns(:task) end def test_create num_tasks = Task.count post :create, :task => {:description => 'an important task', :backlog_id => '2', :period_id => periods(:active).id.to_s} task = assigns(:task) assert_equal [], task.errors.full_messages assert_response :redirect assert_redirected_to :controller => 'periods', :action => 'show', :id => periods(:active) assert_equal num_tasks + 1, Task.count end def test_create_without_period num_tasks = Task.count post :create, :task => {:description => 'an important task', :backlog_id => '2'} task = assigns(:task) assert_equal [], task.errors.full_messages assert_response :redirect assert_redirected_to :controller => 'backlogs', :action => :edit, :id => 2 assert_equal num_tasks + 1, Task.count end def test_edit get :edit, :id => 1 assert_response :success assert_template 'edit' assert_not_nil assigns(:task) assert assigns(:task).valid? end def test_set_task_description post :set_task_description, "id"=>"2", :value => 'New value' after = Task.find(2) assert_equal 'New value', after.description end def test_set_task_description_on_subtask post :set_task_description, "id"=>"8", :value => 'New value' after = Task.find(8) assert_equal 'New value', after.description end def test_specify post :specify, "id" => tasks(:another).id.to_s after = Task.find(tasks(:another)) assert_equal 1, after.children.size end def test_specify_passed_period assert_raise RuntimeError do post :specify, "id"=>"1" end end def test_update post :update, :id => 2, :task => {:description => 'Two'} assert_response :redirect assert_redirected_to :controller => 'periods', :action => 'show', :id => periods(:active) after = Task.find(2) assert_equal 'Two', after.description end def test_update_make_unplanned before = Task.find(2) post :update, :id => 2, :task => {:period_id => ''} assert_response :redirect assert_redirected_to :controller => 'backlogs', :action => 'show', :id => before.backlog after = Task.find(2) assert_equal nil, after.period_id assert_equal nil, after.period assert_equal 2, after.position end def test_update_make_unplanned_with_detour before = Task.find(2) add_stored_detour post :update, :id => 2, :task => {:period_id => ''} assert_response :redirect assert_redirected_to :controller => 'bogus', :action => :location after = Task.find(2) assert_equal nil, after.period_id assert_equal nil, after.period assert_equal 2, after.position end def test_destroy assert_not_nil Task.find(1) post :destroy, :id => 1 assert_response :redirect assert_redirected_to :controller => 'periods', :action => 'show', :id => periods(:past) assert_raise(ActiveRecord::RecordNotFound) { Task.find(1) } end def test_end_work before = Task.find(1) assert_equal 80, before.total_done post :end_work, :id => 1, :work => {:work_started_at_time => (Time.now - 3600).strftime('%H:%M')} assert_response :redirect assert_redirected_to :controller => 'works', :action => :new, 'work[hours]' => "0.25", 'work[task_id]' => 1, 'work[completed_at]' => Time.next_quarter.iso8601, 'work[started_at]' => Time.previous_quarter.iso8601, 'estimate[todo]' => 1 after = Task.find(1) assert_equal 80, after.total_done end def test_move_to__subtask_to_top subtask = tasks(:subtask) subtask_before = Task.find(subtask.id) supertask = tasks(:supertask) supertask_before = Task.find(supertask.id) post :move_to, :id => subtask.id.to_s, :target_id => supertask.id.to_s assert_response :redirect assert_redirected_to :controller => 'periods', :action => :show_no_layout, :id => subtask_before.root_task.period_id subtask_after = Task.find(subtask.id) assert_equal subtask.root_task.period_id, subtask_after.period_id assert_equal 3, subtask_after.position end def test_start_work task_id = tasks(:first).id post :start_work, :id => task_id after = Task.find(task_id) assert after.work_started? end end