scinote-web/test/models/user_test.rb
2017-01-25 13:56:43 +01:00

153 lines
5.5 KiB
Ruby

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