require 'test_helper' class UserTest < ActiveSupport::TestCase def setup @user = users(:john) @user2 = users(:steve) @team = teams(:biosistemika) end should validate_presence_of(:full_name) should validate_length_of(:full_name).is_at_most(Constants::NAME_MAX_LENGTH) should validate_presence_of(:initials) should validate_length_of(:initials) .is_at_most(Constants::USER_INITIALS_MAX_LENGTH) # Test password attribute test 'should have non-blank password' do @user.password = '' assert @user.invalid?, 'User with blank email is not valid' end test 'should have password with at least 8 characters' do @user.password = '1234567' assert @user.invalid?, 'User with too short password is not valid' @user.password = '12345678' assert_not @user.invalid?, 'User with password longer than 7 characters is valid' end # Test email attribute test 'should have non-blank email' do @user.email = '' assert @user.invalid?, 'User with blank email is not valid' end test 'should have unique email' do @user.email = @user2.email assert @user.invalid?, 'User with non-unique email in not valid' end # Test methods test 'should get projects for team' do team_projects = @user2.projects_by_teams(@team.id) assert_equal 1, team_projects.size, 'Projects are grouped into one team' assert_equal 4, team_projects[@team].size, 'Team group has many projects' end test 'should get archived projects for team' do team_projects = @user2.projects_by_teams(@team.id, nil, true) assert_equal 1, team_projects.size, 'Projects are grouped into one team' assert_equal 2, team_projects[@team].size, 'Team group has many projects' end test 'should sort projects by create timestamp ascending' do team_projects = @user2.projects_by_teams(@team.id, 'old') first_project = projects(:interfaces) last_project = projects(:z_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort projects by create timestamp descending' do team_projects = @user2.projects_by_teams(@team.id) first_project = projects(:z_project) last_project = projects(:interfaces) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort projects by project name ascending' do team_projects = @user2.projects_by_teams(@team.id, 'atoz') first_project = projects(:a_project) last_project = projects(:z_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort projects by project name descending' do team_projects = @user2.projects_by_teams(@team.id, 'ztoa') first_project = projects(:z_project) last_project = projects(:a_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort archived projects by create timestamp ascending' do team_projects = @user2.projects_by_teams(@team.id, 'old', true) first_project = projects(:a_archived_project) last_project = projects(:z_archived_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort archived projects by create timestamp descending' do team_projects = @user2.projects_by_teams(@team.id, nil, true) first_project = projects(:z_archived_project) last_project = projects(:a_archived_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort archived projects by project name ascending' do team_projects = @user2.projects_by_teams(@team.id, 'atoz', true) first_project = projects(:a_archived_project) last_project = projects(:z_archived_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should sort archived projects by project name descending' do team_projects = @user2.projects_by_teams(@team.id, 'ztoa', true) first_project = projects(:z_archived_project) last_project = projects(:a_archived_project) assert_equal first_project, team_projects[@team].first assert_equal last_project, team_projects[@team].last end test 'should get last activities' do last_activities = @user2.last_activities(0) first_activity = activities(:twelve) last_activity = activities(:three) assert_equal 10, last_activities.size assert_equal first_activity, last_activities.first assert_equal last_activity, last_activities.last end test 'should get specified number of last activities' do last_activities = @user2.last_activities(0, 4) first_activity = activities(:twelve) last_activity = activities(:nine) assert_equal 4, last_activities.size assert_equal first_activity, last_activities.first assert_equal last_activity, last_activities.last end test 'should allow to change time zone' do assert @user.valid? @user.time_zone = 'Ljubljana' assert @user.valid? end test 'should validate time zone value' do assert @user.valid? @user.time_zone = 'Very Strange Place on Earth' assert_not @user.valid? end test 'should check if time zone value is set' do assert @user.valid? @user.time_zone = nil assert_not @user.valid? end end