require File.dirname(__FILE__) + '/../test_helper' class ProjectTest < Test::Unit::TestCase fixtures :projects, :groups, :tickets, :changesets, :changes def setup RetroCM.reload end def test_crud pr1 = Project.new(:name => 'Some Project') assert(pr1.save) assert_equal('', pr1.root_path) pr2 = Project.find(pr1.id) pr3 = Project.find_by_short_name(pr1.short_name) assert_equal(pr1.id, pr2.id) assert_equal(pr1.id, pr3.id) pr3.root_path = 'project/' assert(pr3.save) assert_not_equal(pr1.root_path, pr3.root_path) pr1.reload assert_equal(pr1.root_path, pr3.root_path) assert(pr1.destroy) end def test_presence_validations obj = Project.new assert(!obj.save) assert_not_nil(obj.errors[:name]) assert_equal(3, obj.errors.size) end def test_uniqueness_validations obj1 = Project.new(:name => 'Project 1') assert(obj1.save) ['Project 1', 'project 1'].each do |name| obj2 = Project.new(:name => name) assert(!obj2.save) assert_not_nil(obj2.errors[:name]) end ['Project+1', 'Project 1'].each do |name| obj2 = Project.new(:name => name) assert(!obj2.save) assert_not_nil(obj2.errors[:name]) assert_equal(1, obj2.errors.size) end end def test_name_validation obj = Project.new(:name => 'A+++!"£$%^&*()_+=-0987654321|~#@;:{}[]<>/?\|.,+++') assert(obj.valid?) assert_nil(obj.errors[:name]) obj = Project.new(:name => '_My project 1.0') assert(!obj.valid?) assert_not_nil(obj.errors[:name]) obj = Project.new(:name => 'A') assert(!obj.valid?) assert_not_nil(obj.errors[:name]) end def test_default_group_accesibility_after_create obj = Project.new(:name => 'Some name') default = Group.default_group assert_nothing_raised(){default.save!} assert(obj.groups.empty?) assert_nothing_raised(){obj.save!} assert(default.access_to_project?(obj)) assert_equal(1, obj.groups.size) end def test_short_name_generation name = 'Some name!!!' obj = Project.new(:name => name) assert(obj.valid?) assert_equal(obj.name, name) assert_equal(obj.short_name, 'some-weird-name') obj.name = 'Something ' assert(obj.valid?) assert_equal(obj.short_name, 'something') end def test_root_path_validations pr = Project.new(:name => 'Some Project') assert(pr.valid?) assert_equal('', pr.root_path) pr = Project.new(:name => 'Some Project') pr.root_path = '/' assert(pr.valid?) assert_equal('', pr.root_path) pr = Project.new(:name => 'Some Project') pr.root_path = 'project' assert(pr.valid?) assert_equal('project/', pr.root_path) pr = Project.new(:name => 'Some Project') pr.root_path = ' project ' assert(pr.valid?) assert_equal('project/', pr.root_path) valid_paths = [ 'project/', 'project.ext/', 'project.ext/trunk/', 'project.ext/#trunk/', 'project.ext/lost+found/', 'project~ext/.hidden/', 'project-ext/important!/', 'project ext/important/' ] valid_paths.each do |path| pr.root_path = path assert(pr.valid?) assert_equal(pr.root_path, path) end invalid_paths = [ 'project ext/', 'project.ext//trunk/', 'project-ext/[important]/' ] invalid_paths.each do |path| pr.root_path = path assert(!pr.valid?) assert_not_nil(pr.errors[:root_path]) end end def test_associations pr = projects(:retro) ticket = pr.tickets.first assert(pr.tickets.find(ticket.id)) assert_raises(ActiveRecord::RecordNotFound) do pr.tickets.find(9999) end cs = pr.changesets.last csts = pr.find_in_changesets(:all, :conditions => ['changesets.revision != ?', cs.revision]) assert_equal(pr.changesets.size-1, csts.size) path = 'trunk/config' assert_equal(pr.root_path + path, pr.absolutize_path(path)) assert_equal(path, pr.relativize_path(pr.root_path + path)) assert_equal([], pr.disabled_modules) pr.disabled_modules = ['test'] assert_equal(['test'], pr.disabled_modules) assert(pr.module_disabled?('test')) end def test_groups_association project = projects(:retro) group = Group.find(2) assert(!project.groups.include?(group)) assert(!group.access_to_project?(project)) group.access_to_all_projects = true assert(group.save) assert(project.reload) assert(project.groups.include?(group)) assert(group.access_to_project?(project)) end end