require File.dirname(__FILE__) + '/../test_helper' class TicketTest < Test::Unit::TestCase fixtures :tickets, :ticket_changes, :users, :projects, :groups, :groups_projects, :groups_users, :ticket_property_types, :ticket_properties, :milestones, :priorities, :statuses def setup RetroCM.reload end def test_crud ticket = Ticket.new(:status_id => 1, :priority_id => 4) ticket.author = 'Some author' ticket.summary = 'A summary' ticket.content = 'The content' ticket.project_id = 1 Ticket.without_spam_check do assert(ticket.save) end reference = Ticket.find(ticket.id) rescue nil assert(reference) assert_equal(ticket.author, reference.author) assert_equal(ticket.email, reference.email) reference.author = 'Other author' reference.email = 'mail@home.com' assert(reference.save) assert_not_equal(ticket.author, reference.author) assert_not_equal(ticket.email, reference.email) assert(ticket.reload) assert_equal(ticket.author, reference.author) assert_equal(ticket.email, reference.email) assert(ticket.destroy) end def test_validations ticket = Ticket.new assert(!ticket.save) assert_not_nil(ticket.errors[:author]) assert_not_nil(ticket.errors[:summary]) assert_not_nil(ticket.errors[:content]) assert_not_nil(ticket.errors[:project_id]) assert_nil(ticket.errors[:email]) ticket.email = 'something invalid' assert(!ticket.save) assert_not_nil(ticket.errors[:email]) end def test_milestone_assignement project = projects(:retro) ticket = project.tickets.build ticket.milestone_id = 4 assert(!ticket.save) assert_nil(ticket.errors[:milestone_id]) ticket = project.tickets.build ticket.milestone_id = 5 assert(!ticket.save) assert_not_nil(ticket.errors[:milestone_id]) finished_milestone = Milestone.find(1) before_ticket = Ticket.find(:first, :conditions => ['created_at < ?', finished_milestone.finished_on]) after_ticket = Ticket.find(:first, :conditions => ['created_at > ?', finished_milestone.finished_on]) assert(before_ticket) assert(after_ticket) before_ticket.milestone_id = finished_milestone.id assert(before_ticket.save) after_ticket.milestone_id = finished_milestone.id assert(!after_ticket.save) assert_not_nil(ticket.errors[:milestone_id]) end def test_accessors params = { :milestone_id => 5, :author_host => 'localhost', :project_id => 5, :status_id => 5, :priority_id => 5, :assigned_user_id => 5, :author => 'Me', :email => 'my@home.com', :user_id => 5, } ticket = Ticket.new(params) assert_equal(5, ticket.status_id) assert_equal(5, ticket.priority_id) assert_equal(5, ticket.milestone_id) (params.keys - [:status_id, :priority_id, :milestone_id]).each do |param| assert_nil(ticket.send(param)) end Project.current = projects(:retro) ticket = Project.current.tickets.new(:assigned_user_login => 'admin') assert_equal('admin', ticket.assigned_user_login) Project.current = nil end def test_value_initialization ticket = Ticket.new ticket.user = User.find(3) assert_equal(Status.default.id, ticket.status_id) assert_equal(Priority.default.id, ticket.priority_id) assert_nil(ticket.author) assert_nil(ticket.email) assert(!ticket.save) assert_equal(Status.find(:first).id, ticket.status_id) assert_equal(Priority.find(:first).id, ticket.priority_id) assert_equal(ticket.user.name, ticket.author) assert_equal(ticket.user.email, ticket.email) end def test_ticket_cache project = projects(:retro) ticket = project.tickets.build(:status_id => 1, :priority_id => 4) ticket.author = 'Some author' ticket.summary = 'Summary #1' ticket.content = 'The content' Ticket.without_spam_check do assert(ticket.save) end ticket.reload project.reload assert_equal(ticket.summary, project.existing_tickets[ticket.id][:summary]) assert_equal(ticket.state.id, project.existing_tickets[ticket.id][:state]) ticket.summary = 'Summary #2' Ticket.without_spam_check do assert(ticket.save) end assert_equal('Summary #2', ticket.summary) ticket.reload project.reload assert_equal(ticket.summary, project.existing_tickets[ticket.id][:summary]) ticket.status_id = 2 Ticket.without_spam_check do assert(ticket.save) end assert_equal(2, ticket.status.id) ticket.reload project.reload assert_equal(ticket.state.id, project.existing_tickets[ticket.id][:state]) assert(ticket.destroy) project.reload assert_nil(project.existing_tickets[ticket.id]) end end