Project

General

Profile

Download (28.3 KB) Statistics
| Branch: | Tag: | Revision:
# encoding: UTF-8
require 'test_helper'

class UserTest < ActiveSupport::TestCase
def setup
User.current = users :admin
@user = User.create :auth_source => auth_sources(:one), :login => "foo", :mail => "foo@bar.com"
end

test "should have login" do
refute_valid FactoryGirl.build(:user, :login => nil), :login
end

test "mail address is optional on creation" do
assert_valid FactoryGirl.build(:user, :mail => nil)
end

test "mail is optional if mail is currently nil" do
u = FactoryGirl.create(:user, :mail => nil)
u.firstname = 'Bob'
assert_valid u
end

test "mail is require when mail isn't currently nil" do
u = FactoryGirl.create(:user, :mail => "foo@bar.com")
u.mail = nil
refute_valid u, :mail
end

test "hidden users don't need mail when updating" do
u = User.anonymous_admin
u.firstname = 'Bob'
assert_valid u
end

test "login should be unique" do
u = User.new :auth_source => auth_sources(:one), :login => "foo", :mail => "foo@bar.com"
refute_valid u, :login
end

test "login should also be unique across usergroups" do
Usergroup.create :name => "foo"
u = User.new :auth_source => auth_sources(:one), :login => "foo", :mail => "foo@bar.com"

refute u.valid?
end

test "duplicate login should be detected case insensitively" do
u1 = User.new :auth_source => auth_sources(:one), :login => "UsEr", :mail => "foo1@bar.com", :password => "foo"
u2 = User.new :auth_source => auth_sources(:one), :login => "user", :mail => "foo2@bar.com", :password => "foo"
assert u1.save
refute u2.save
assert u2.errors.messages[:login].include? "already exists"
end

test "user should login case insensitively" do
user = User.new :auth_source => auth_sources(:internal), :login => "user", :mail => "foo1@bar.com", :password => "foo"
assert user.save!
assert_equal user, User.try_to_login("USER", "foo")
end

test "user login should be case aware" do
user = User.new :auth_source => auth_sources(:one), :login => "User", :mail => "foo1@bar.com", :password => "foo"
assert user.save
assert_equal user.login, "User"
assert_equal user.lower_login, "user"
end

test "mail should have format" do
u = User.new :auth_source => auth_sources(:one), :login => "foo", :mail => "bar"
refute u.valid?
end

test "login size should not exceed the 100 characters" do
u = User.new :auth_source => auth_sources(:one), :login => "a" * 101, :mail => "foo@bar.com"
refute u.save
end

test "firstname should have the correct format" do
@user.firstname = "The Riddle?"
refute @user.save

@user.firstname = "C_r'a-z.y( )<,Na=me;>"
assert @user.save

@user.firstname = "é ô à"
assert @user.save
end

test "lastname should have the correct format" do
@user.lastname = "it's the JOKER$$$"
refute @user.save

@user.lastname = "C_r'a-z.y( )<,Na=me;>"
assert @user.save

@user.lastname = "é ô à"
assert @user.save
end

test "firstname should not exceed the 50 characters" do
@user.firstname = "a" * 51
refute @user.save
end

test "lastname should not exceed the 50 characters" do
@user.firstname = "a" * 51
refute @user.save
end

test "mail should not exceed the 60 characters" do
u = User.create :auth_source => auth_sources(:one), :login => "foo"
u.mail = "foo" * 20 + "@bar.com"
refute u.save
end

test "to_label method should return a firstname and the lastname" do
@user.firstname = "Ali Al"
@user.lastname = "Salame"
assert @user.save

assert_equal "Ali Al Salame", @user.to_label
end

test "new internal user gets welcome mail" do
ActionMailer::Base.deliveries = []
Setting[:send_welcome_email] = true
User.create :auth_source => auth_sources(:internal), :login => "welcome", :mail => "foo@example.com", :password => "qux", :mail_enabled => true
mail = ActionMailer::Base.deliveries.detect { |delivery| delivery.subject =~ /Welcome to Foreman/ }
assert mail
assert_match /Username/, mail.body.encoded
end

test "other auth sources don't get welcome mail" do
Setting[:send_welcome_email] = true
assert_no_difference "ActionMailer::Base.deliveries.size" do
User.create :auth_source => auth_sources(:one), :login => "welcome", :mail => "foo@bar.com", :password => "qux"
end
end

context "try to login" do
test "when password is empty should return nil" do
assert_nil User.try_to_login("anything", "")
end

test "when a user logs in, last login time should be updated" do
user = users(:internal)
last_login = user.last_login_on
assert_not_nil User.try_to_login(user.login, "changeme")
assert_not_equal last_login, User.find(user.id).last_login_on
end

test ".try_to_login on unknown user should return nil" do
User.expects(:try_to_auto_create_user).with('unknown user account', 'secret')
refute User.try_to_login('unknown user account', 'secret')
end

test ".try_to_login and failing AuthSource should return nil" do
u = FactoryGirl.create(:user)
AuthSourceInternal.any_instance.expects(:authenticate).with(u.login, 'password').returns(nil)
refute User.try_to_login(u.login, 'password')
end

test ".try_to_login should return user on successful login" do
u = FactoryGirl.create(:user)
assert_equal u, User.try_to_login(u.login, 'password')
end

test "updates usergroups on login" do
AuthSourceLdap.any_instance.stubs(:authenticate).returns({})
AuthSourceLdap.any_instance.expects(:update_usergroups).returns(true)
User.try_to_login("foo", "password")
end

context "ldap attributes" do
setup do
AuthSourceLdap.any_instance.stubs(:update_usergroups).returns(true)
end

test "ldap user attribute should be updated when not blank (firstname)" do
AuthSourceLdap.any_instance.stubs(:authenticate).returns({ :firstname => "Foo" })
logged_in_user = User.try_to_login("foo", "password")
assert_equal "Foo", logged_in_user.firstname
end

test "ldap user attribute should not be updated when blank (mail)" do
AuthSourceLdap.any_instance.stubs(:authenticate).returns({ :mail => "" })
logged_in_user = User.try_to_login("foo", "password")
assert_equal "foo@bar.com", logged_in_user.mail
end
end
end

def setup_user(operation)
super operation, "users"
end

test "user with create permissions should be able to create" do
setup_user "create"
record = User.new :login => "dummy", :mail => "j@j.com", :auth_source_id => AuthSourceInternal.first.id
record.password_hash = "asd"
assert record.save
assert record.valid?
refute record.new_record?
end

test "non-admin user with create permissions should not be able to create admin" do
setup_user "create"
record = User.new :login => "dummy", :mail => "j@j.com", :auth_source_id => AuthSourceInternal.first.id
record.password_hash = "asd"
record.admin = true
assert_not record.save
assert_not record.valid?
assert_includes record.errors.keys, :admin
assert record.new_record?
end

test "non-admin user can't assign roles he does not have himself" do
setup_user "create"
create_role = Role.find_by_name 'create_users'
extra_role = Role.find_or_create_by_name :name => "foobar"
record = User.new :login => "dummy", :mail => "j@j.com", :auth_source_id => AuthSourceInternal.first.id,
:role_ids => [extra_role.id, create_role.id].map(&:to_s)
record.password_hash = "asd"
assert_not record.save
assert_not record.valid?
assert_includes record.errors.keys, :role_ids
assert record.new_record?
end

test "non-admin user can delegate roles he has assigned already" do
setup_user "create"
create_role = Role.find_by_name 'create_users'
record = User.new :login => "dummy", :mail => "j@j.com", :auth_source_id => AuthSourceInternal.first.id,
:role_ids => [create_role.id.to_s]
record.password_hash = "asd"
assert record.valid?
assert record.save
assert_not record.new_record?
end

test "admin can set admin flag and set any role" do
as_admin do
extra_role = Role.find_or_create_by_name :name => "foobar"
record = User.new :login => "dummy", :mail => "j@j.com", :auth_source_id => AuthSourceInternal.first.id,
:role_ids => [extra_role.id].map(&:to_s)
record.password_hash = "asd"
record.admin = true
assert record.save
assert record.valid?
assert_not record.new_record?
end
end

test "user cannot assign role he has not assigned himself" do
setup_user "edit"
extra_role = Role.find_or_create_by_name :name => "foobar"
record = users(:one)
record.role_ids = [extra_role.id]
assert_not record.save
assert_not record.valid?
assert_includes record.errors.keys, :role_ids
end

test "user can assign role he has assigned himself" do
setup_user "edit"
edit_role = Role.find_by_name 'edit_users'
record = users(:one)
record.role_ids = [edit_role.id]
assert record.valid?
assert record.save
end

test "user cannot escalate his own roles" do
setup_user "edit"
extra_role = Role.find_or_create_by_name :name => "foobar"
record = User.current
record.role_ids = record.role_ids + [extra_role.id]
refute record.save
refute record.valid?
end

test "admin can add any role" do
as_admin do
extra_role = Role.find_or_create_by_name :name => "foobar"
record = users(:one)
record.role_ids = [extra_role.id]
assert record.valid?
assert record.save
end
end

test "admin can update admin flag" do
as_admin do
record = users(:one)
record.admin = true
assert record.valid?
assert record.save
end
end

test "user can not update admin flag" do
setup_user "edit"
record = users(:two)
record.admin = true
assert_not record.save
assert_not record.valid?
assert_includes record.errors.keys, :admin
end

test "user can save user if he does not change roles" do
setup_user "edit"
record = users(:two)
assert record.save
end

test "user cannot set admin password" do
setup_user "edit"
record = users(:admin)
record.password = "123332211"
assert_not record.valid?
assert_includes record.errors.keys, :password
end

test "should be able to remove the admin flag when another admin exists" do
u = FactoryGirl.create(:user, :with_mail, :admin => true)
u.admin = false
assert_valid u
end

test "should not be able to remove the admin flag from the last admin account" do
User.unscoped.except_hidden.only_admin.where('login <> ?', users(:apiadmin).login).destroy_all
u = users(:apiadmin)
u.admin = false
refute_valid u, :admin, /last admin account/
end

test "should not be able to destroy the last admin account" do
User.unscoped.except_hidden.only_admin.where('login <> ?', users(:apiadmin).login).destroy_all
u = users(:apiadmin)
refute_with_errors u.destroy, u, :base, /last admin account/
end

test "should not be able to remove the admin flag from hidden users" do
u = User.anonymous_admin
u.admin = false
refute_valid u, :admin, /internal protected account/
end

test "should not be able to destroy hidden users" do
u = User.anonymous_admin
refute_with_errors u.destroy, u, :base, /internal admin account/
end

test "should not be able to rename hidden users" do
u = User.anonymous_admin
u.login = 'no_anonymity_for_you'
refute_valid u, :login, /internal protected account/
end

test "email domains with a single word should be allowed" do
u = User.new :auth_source => auth_sources(:one), :login => "root", :mail => "foo@localhost"
assert u.save
end

test "email with whitespaces should be stripped" do
user = User.create! :auth_source => auth_sources(:one), :login => "boo", :mail => " boo@localhost "
assert_equal user.mail, "boo@localhost"
end

test "email should not have special characters outside of quoted string format" do
user = User.new :auth_source => auth_sources(:one), :login => "boo", :mail => "specialchars():;@example.com"
refute user.save
end

test "email with special characters in quoted string format allowed" do
user = User.new :auth_source => auth_sources(:one), :login => "boo", :mail => '"specialchars():;"@example.com'
assert user.save
end

test "email should not have consecutive dot characters" do
user = User.new :auth_source => auth_sources(:one), :login => "boo", :mail => "dots..dots@example.com"
refute user.save
end

test "use that can change admin flag #can_assign? any role" do
user = users(:one)
extra_role = Role.find_or_create_by_name :name => "foobar"
user.stub :can_change_admin_flag?, true do
assert user.can_assign?([extra_role.id])
end
end

test "admin #can_change_admin_flag?" do
as_admin do
assert User.current.can_change_admin_flag?
end
end

test "non admin user #can_assign? only his assigned roles" do
user = users(:one)
foobar = Role.find_or_create_by_name :name => "foobar"
barfoo = Role.find_or_create_by_name :name => "barfoo"
user.roles<< foobar

assert user.can_assign?([foobar.id])
refute user.can_assign?([foobar.id, barfoo.id])
refute user.can_assign?([barfoo.id])
assert user.can_assign?([])
end

test "role_ids change detection" do
user = users(:one)
foobar = Role.find_or_create_by_name :name => "foobar"
barfoo = Role.find_or_create_by_name :name => "barfoo"
user.roles<< foobar

user.role_ids = [foobar.id]
refute user.role_ids_changed?

user.role_ids = [foobar.id, barfoo.id]
assert user.role_ids_changed?
assert_equal user.role_ids_was, [foobar.id]

# order does not matter
user.role_ids = [barfoo.id, foobar.id]
refute user.role_ids_changed?
user.role_ids = [foobar.id, barfoo.id]
refute user.role_ids_changed?
assert_equal user.role_ids_was, [foobar.id, barfoo.id]
end

test "role_ids can be empty array which removes all roles" do
user = users(:one)
foobar = Role.find_or_create_by_name :name => "foobar"
Role.find_or_create_by_name :name => "barfoo"
user.roles<< foobar

user.role_ids = []
assert_empty user.roles
end

test "role_ids can be nil resulting in no role" do
user = users(:one)
foobar = Role.find_or_create_by_name :name => "foobar"
Role.find_or_create_by_name :name => "barfoo"
user.roles<< foobar

user.role_ids = nil
assert_empty user.roles
end

test "admin? detection for user admin flag" do
admin = FactoryGirl.build(:user, :admin => true)
assert admin.admin?, 'user admin flag was missed'
end

test "admin? detection for group admin flag" do
admin = FactoryGirl.build(:user)
g1 = FactoryGirl.build(:usergroup)
g2 = FactoryGirl.build(:usergroup, :admin => true)
admin.cached_usergroups = [g1, g2]
assert admin.admin?, 'group admin flag was missed'
end

test "admin? is false if no flag is enabled" do
admin = FactoryGirl.build(:user)
g1 = FactoryGirl.build(:usergroup)
g2 = FactoryGirl.build(:usergroup)
admin.cached_usergroups = [g1, g2]
refute admin.admin?
end

test "admin can assign arbitrary taxonomies" do
as_admin do
user = FactoryGirl.build(:user)
org1 = FactoryGirl.create(:organization)
org2 = FactoryGirl.create(:organization)
user.organization_ids = [org1.id, org2.id]
assert user.save
end
end

test "user can set only subset of his taxonomies" do
# superset, one of two, another of two, both
org1 = FactoryGirl.create(:organization)
org2 = FactoryGirl.create(:organization)
org3 = FactoryGirl.create(:organization)
loc1 = FactoryGirl.create(:location)

user = FactoryGirl.build(:user)
user.organizations = [org1, org2]
user.locations = [loc1]
user.save
Organization.expects(:authorized).with('assign_organizations', Organization).returns(Organization.where(:id => [org1, org2])).times(4)
Location.expects(:authorized).with('assign_locations', Location).returns(Location.where(:id => [loc1])).times(4)

as_user user do
# org subset
new_user = FactoryGirl.build(:user)
new_user.organization_ids = [org1.id]
new_user.location_ids = [loc1.id]
assert new_user.save

# org subset
new_user = FactoryGirl.build(:user)
new_user.organization_ids = [org2.id]
new_user.location_ids = [loc1.id]
assert new_user.save

# org same set
new_user = FactoryGirl.build(:user)
new_user.organization_ids = [org1.id, org2.id]
new_user.location_ids = [loc1.id]
assert new_user.save

# org superset
new_user = FactoryGirl.build(:user)
new_user.organization_ids = [org1.id, org3.id]
new_user.location_ids = [loc1.id]
refute new_user.save
assert_not_empty new_user.errors[:organization_ids]
end
end

test "user can't set empty taxonomies set if he's assigned to some" do
user = FactoryGirl.create(:user)
org1 = FactoryGirl.create(:organization)
user.organizations << org1

as_user user do
# empty set
new_user = FactoryGirl.build(:user)
refute new_user.save
assert_not_empty new_user.errors[:organization_ids]
assert_empty new_user.errors[:location_ids]
end
end

context "find_or_create_external_user" do
context "internal or not existing AuthSource" do
test 'existing user' do
assert_difference('User.count', 0) do
assert User.find_or_create_external_user({:login => users(:one).login}, nil)
end
end

test 'not existing user without auth source specified' do
assert_difference('User.count', 0) do
refute User.find_or_create_external_user({:login => 'not_existing_user'}, nil)
end
end

test 'not existing user with non existing auth source' do
assert_difference('User.count', 1) do
assert_difference('AuthSource.count', 1) do
assert User.find_or_create_external_user({:login => 'not_existing_user'},
'new_external_source')
end
end
created_user = User.find_by_login('not_existing_user')
new_source = AuthSourceExternal.find_by_name('new_external_source')
assert_equal new_source.name, created_user.auth_source.name
end
end

context "existing AuthSource" do
setup do
@apache_source = AuthSourceExternal.find_or_create_by_name('apache_module')
end

test "not existing" do
assert_difference('User.count', 1) do
assert_difference('AuthSource.count', 0) do
assert User.find_or_create_external_user({:login => 'not_existing_user'},
@apache_source.name)
end
end
end

test "not existing with attributes" do
assert User.find_or_create_external_user({:login => 'not_existing_user',
:mail => 'foobar@example.com',
:firstname => 'Foo',
:lastname => 'Bar'},
@apache_source.name)
created_user = User.find_by_login('not_existing_user')
assert_equal @apache_source.name, created_user.auth_source.name
assert_equal 'foobar@example.com', created_user.mail
assert_equal 'Foo', created_user.firstname
assert_equal 'Bar', created_user.lastname
end

context 'with external user groups' do
setup do
@user = FactoryGirl.create(:user, :auth_source => @apache_source)
@external = FactoryGirl.create(:external_usergroup, :auth_source => @apache_source)
@usergroup = FactoryGirl.create(:usergroup)
end

test "existing user groups that are assigned" do
@external.update_attributes(:usergroup => @usergroup, :name => @usergroup.name)
assert User.find_or_create_external_user({:login => "not_existing_user",
:groups => [@external.name,
"notexistentexternal"]},
@apache_source.name)
created_user = User.find_by_login("not_existing_user")
assert_equal [@usergroup], created_user.usergroups
end
end
end
end

context 'auto create users' do
setup do
ldap_attrs = { :firstname => "Foo", :lastname => "Bar", :mail => "baz@qux.com",
:login => 'FoOBaR' }
AuthSourceLdap.any_instance.stubs(:authenticate).returns(ldap_attrs)
@ldap_server = AuthSource.find_by_name("ldap-server")
end

test "enabled on-the-fly registration" do
AuthSourceLdap.any_instance.expects(:update_usergroups).
with('FoOBaR').returns(true)
@ldap_server.update_attribute(:onthefly_register, true)
assert_difference("User.count", 1) do
assert User.try_to_auto_create_user('foobar','fakepass')
end
end

test "disabled on-the-fly registration" do
@ldap_server.update_attribute(:onthefly_register, false)
assert_difference("User.count", 0) do
refute User.try_to_auto_create_user('foobar','fakepass')
end
end

test "use LDAP login attribute as login" do
AuthSourceLdap.any_instance.expects(:update_usergroups).
with('FoOBaR').returns(true)
created_user = User.try_to_auto_create_user('foobar','fakepass')
assert_equal created_user.login, "FoOBaR"
end
end

context "editing self?" do
# A regular setup block would run before the global setup
# leaving User.current = users :admin
def editing_self_helper
User.current = users(:one)
@options = {:controller => "users", :action => "edit", :id => User.current.id}
end

test "edit self" do
editing_self_helper
assert User.current.editing_self?(@options)
end

test "update self" do
editing_self_helper
@options.merge!({ :action => "update" })
assert User.current.editing_self?(@options)
end

test "update other user" do
editing_self_helper
@options.merge!({ :id => users(:two).id })
refute User.current.editing_self?(@options)
end

test "update through other controller" do
editing_self_helper
@options.merge!({ :controller => "hosts", :id => User.current.id })
refute User.current.editing_self?(@options)
end
end

test "#can? for admin" do
Authorizer.any_instance.stubs(:can?).returns(false)
u = FactoryGirl.build(:user, :admin => true)
assert u.can?(:view_hosts_or_whatever_you_ask)
end

test "#can? for not admin" do
Authorizer.any_instance.stubs(:can?).returns('authorizer was asked')
u = FactoryGirl.build(:user)
assert_equal 'authorizer was asked', u.can?(:view_hosts_or_whatever_you_ask)
end

test 'default taxonomy inclusion validator' do
users(:one).default_location = Location.first
users(:one).default_organization = Organization.first

refute users(:one).valid?
assert users(:one).errors.messages.has_key? :default_location
assert users(:one).errors.messages.has_key? :default_organization
end

test 'any taxonomy works as default taxonomy for admins' do
users(:one).update_attribute(:admin, true)
users(:one).default_location = Location.first

assert users(:one).valid?
end

test "return location and child ids for non-admin user" do
as_user :one do
in_taxonomy :location1 do
assert User.current.locations << Location.current
assert child = Location.create!(:name => 'child location', :parent_id => Location.current.id)
assert_equal [Location.current.id, child.id].sort, User.current.location_and_child_ids
end
end
end

test "return organization and child ids for non-admin user" do
as_user :one do
in_taxonomy :organization1 do
assert User.current.organizations << Organization.current
assert child = Organization.create!(:name => 'child organization', :parent_id => Organization.current.id)
assert_equal [Organization.current.id, child.id].sort, User.current.organization_and_child_ids
end
end
end

test "chaging hostgroup should update cache" do
u = FactoryGirl.create(:user)
g1 = FactoryGirl.create(:usergroup)
g2 = FactoryGirl.create(:usergroup)
assert_empty u.usergroups
assert_empty u.cached_usergroups
u.usergroups = [g1, g2]
u.reload
assert_equal [g1.id, g2.id].sort, u.cached_usergroup_ids.sort

u.usergroups = [g2]
u.reload
assert_equal [g2.id].sort, u.cached_usergroup_ids.sort

u.usergroups = [g1]
u.reload
assert_equal [g1.id].sort, u.cached_usergroup_ids.sort

u.usergroups = []
u.reload
assert_empty u.cached_usergroups
end

# Uncomment after users get access to children taxonomies of their current taxonomies.
#
# test 'default taxonomy inclusion validator takes into account inheritance' do
# inherited_location = Location.create(:parent => Location.first, :name => 'inherited_loc')
# inherited_organization = Organization.create(:parent => Organization.first, :name => 'inherited_org')
# users(:one).update_attribute(:locations, [Location.first])
# users(:one).update_attribute(:organizations, [Organization.first])
# users(:one).default_location = Location.find_by_name('inherited_loc')
# users(:one).default_organization = Organization.find_by_name('inherited_org')
#
# assert users(:one).valid?
# end

test "#matching_password? succeeds if password matches" do
u = FactoryGirl.build(:user)
assert_valid u
assert u.matching_password?('password')
end

test "#matching_password? fails if password does not match" do
u = FactoryGirl.build(:user)
assert_valid u
refute u.matching_password?('wrong password')
end

test ".except_hidden doesn't return any hidden users" do
assert User.unscoped.where(:auth_source_id => AuthSourceHidden.first).any?
User.unscoped.except_hidden.each do |user|
assert_not_kind_of AuthSourceHidden, user.auth_source
end
end

test "#hidden? for hidden user" do
assert User.anonymous_admin.hidden?
end

test "#hidden? for ordinary user" do
refute FactoryGirl.build(:user).hidden?
end

test "should not be able to use hidden auth source on other users" do
u = FactoryGirl.build(:user, :auth_source => AuthSourceHidden.first)
refute_valid u, :auth_source, /permitted/
end

describe ".random_password" do
it "should return password" do
assert_match /\A[a-zA-Z0-9]{16}\z/, User.random_password
end

it "should not return ambiguous characters" do
refute_match /[O0Il1]/, User.random_password(100)
end
end

test ".as_anonymous_admin sets User.current to anonymous admin" do
User.as_anonymous_admin do
assert_equal User::ANONYMOUS_ADMIN, User.current.try(:login)
end
end

test ".as throws exception for unknown users" do
assert_raise(Foreman::Exception) { User.as('unknown_user') }
end

test "#ensure_last_admin_is_not_deleted with non-admins" do
User.unscoped.only_admin.each(&:delete)
user = users(:one)
assert user.destroy
assert user.destroyed?
end

test "auto-complete doesn't show hidden users" do
User.complete_for('login = ').each { |ac| refute_match users(:anonymous).login, ac }
end

test 'can search users by role id' do
# Setup role and assign to user
role = Role.find_or_create_by_name(:name => "foobar")
user = users(:one)
user.role_ids = [role.id]

users = User.search_for("role_id = #{role.id}")
assert (users.include? user)
end

test 'can set valid timezone' do
timezone = "Fiji"
user = users(:one)
user.timezone = timezone
assert user.valid?
assert_equal(user.timezone, timezone)
end

test 'can not set invalid timezone' do
user = users(:one)
user.timezone = "Brno"
refute user.valid?
end

test 'timezone can be blank' do
user = users(:one)
user.timezone = ''
assert user.valid?
end
end
(103-103/107)