require File.dirname(__FILE__) + '/../test_helper' class MilestoneTest < Test::Unit::TestCase fixtures :milestones, :projects, :tickets, :users, :groups, :statuses def setup RetroCM.reload end def test_crud pj = projects(:retro) o1 = Milestone.new(:name => 'Some Milestone', :project_id => pj.id) assert(o1.save) o2 = Milestone.find(o1.id) assert_equal(o1.name, o2.name) o2.name = 'New name' assert(o2.save) assert_not_equal(o1.name, o2.name) o1.reload assert_equal(o1.name, o2.name) assert(o1.destroy) end def test_validations o1 = Milestone.new assert(!o1.save) assert_not_nil(o1.errors[:name]) assert_not_nil(o1.errors[:project_id]) pj1 = projects(:retro) pj2 = Project.new(:name => 'Project 2') assert(pj2.save) o1 = pj1.milestones.first o2 = Milestone.new(:name => o1.name, :project_id => pj1.id) assert(!o2.save) assert_not_nil(o2.errors[:name]) o2 = Milestone.new(:name => o1.name, :project_id => pj2.id) assert(o2.save) end def test_default_database_sorting options = {:order => 'CASE WHEN due IS NULL THEN 1 ELSE 0 END, due ASC, finished_on DESC' } milestones = Milestone.find(:all, options) assert_equal(milestones, milestones.sort{|m1, m2| m2.due.blank? ? 0 : (m1.due.blank? ? 1 : m1.due <=> m2.due) }) end def test_attributes Milestone.find(:all).each do |ms| assert_equal(ms.total_tickets, ms.tickets.size) assert_equal(ms.open_tickets + ms.closed_tickets, ms.tickets.size) if ms.finished_on assert(ms.completed?) else assert(!ms.completed?) end end end def test_ticket_percentage_count ms_without_tickets = Milestone.find(1) assert_equal(0, ms_without_tickets.total_tickets) assert_equal(0, ms_without_tickets.percent_completed) ms_with_tickets = Milestone.find(3) assert_equal(3, ms_with_tickets.total_tickets) assert_equal(1, ms_with_tickets.closed_tickets) assert_equal(33, ms_with_tickets.percent_completed) end end