def test_profile_view_fields(self): """ A simple user should see all fields in profile view, even if they are protected by groups """ view = self.env.ref('hr.res_users_view_form_profile') # For reference, check the view with user with every groups protecting user fields all_groups_xml_ids = chain(*[ field.groups.split(',') for field in self.env['res.users']._fields.values() if field.groups if field.groups != '.' # "no-access" group on purpose ]) all_groups = self.env['res.groups'] for xml_id in all_groups_xml_ids: all_groups |= self.env.ref(xml_id.strip()) user_all_groups = new_test_user(self.env, groups='base.group_user', login='******', name='God') user_all_groups.write( {'groups_id': [(4, group.id, False) for group in all_groups]}) view_infos = self.env['res.users'].with_user( user_all_groups).fields_view_get(view_id=view.id) full_fields = view_infos['fields'] # Now check the view for a simple user user = new_test_user(self.env, login='******', name='Grouillot') view_infos = self.env['res.users'].with_user(user).fields_view_get( view_id=view.id) fields = view_infos['fields'] # Compare both self.assertEqual(full_fields.keys(), fields.keys(), "View fields should not depend on user's groups")
def setUp(self): super(TestSelfAccessRights, self).setUp() self.richard = new_test_user(self.env, login='******', groups='base.group_user', name='Simple employee', email='*****@*****.**') self.richard_emp = self.env['hr.employee'].create({ 'name': 'Richard', 'user_id': self.richard.id, 'address_home_id': self.env['res.partner'].create({ 'name': 'Richard', 'phone': '21454', 'type': 'private' }).id, }) self.hubert = new_test_user(self.env, login='******', groups='base.group_user', name='Simple employee', email='*****@*****.**') self.hubert_emp = self.env['hr.employee'].create({ 'name': 'Hubert', 'user_id': self.hubert.id, 'address_home_id': self.env['res.partner'].create({ 'name': 'Hubert', 'type': 'private' }).id, }) self.protected_fields_emp = OrderedDict([ (k, v) for k, v in self.env['hr.employee']._fields.items() if v.groups == 'hr.group_hr_user' ]) # Compute fields and id field are always readable by everyone self.read_protected_fields_emp = OrderedDict([ (k, v) for k, v in self.env['hr.employee']._fields.items() if not v.compute and k != 'id' ]) self.self_protected_fields_user = OrderedDict([ (k, v) for k, v in self.env['res.users']._fields.items() if v.groups == 'hr.group_hr_user' and k in self.env['res.users'].SELF_READABLE_FIELDS ])
def test_add_followers_on_post(self): # Add some existing partners, some from another company company = self.env['res.company'].create({'name': 'Oopo'}) company.flush() existing_partners = self.env['res.partner'].create([{ 'name': 'Jean', 'company_id': company.id, }, { 'name': 'Paulus', }]) self.test_move.message_subscribe(existing_partners.ids) user = new_test_user(self.env, login='******', groups='account.group_account_invoice') move = self.test_move.with_user(user) partner = self.env['res.partner'].create({'name': 'Belouga'}) move.partner_id = partner move.action_post() self.assertEqual( move.message_partner_ids, self.env.user.partner_id | existing_partners | partner)
def test_readonly_fields(self): """ Employee related fields should be readonly if self editing is not allowed """ self.env['ir.config_parameter'].sudo().set_param( 'hr.hr_employee_self_edit', False) james = new_test_user(self.env, login='******', groups='base.group_user', name='Simple employee', email='*****@*****.**') james = james.with_user(james) self.env['hr.employee'].create({ 'name': 'James', 'user_id': james.id, }) view = self.env.ref('hr.res_users_view_form_profile') view_infos = james.fields_view_get(view_id=view.id) employee_related_fields = { field_name for field_name, field_attrs in view_infos['fields'].items() if field_attrs.get('related', (None, ))[0] == 'employee_id' } form = Form(james, view=view) for field in employee_related_fields: with self.assertRaises( AssertionError, msg= "Field '%s' should be readonly in the employee profile when self editing is not allowed." % field): form.__setattr__(field, 'some value')
def setUp(self): super().setUp() self.main_pos_config.write({"module_pos_hr": True}) # Admin employee self.env.ref("hr.employee_admin").write( {"name": "Mitchell Admin", "pin": False} ) # User employee emp1 = self.env.ref("hr.employee_han") emp1_user = new_test_user( self.env, login="******", groups="base.group_user", name="Pos Employee1", email="*****@*****.**", ) emp1.write({"name": "Pos Employee1", "pin": "2580", "user_id": emp1_user.id}) # Non-user employee emp2 = self.env.ref("hr.employee_jve") emp2.write({"name": "Pos Employee2", "pin": "1234"}) with Form(self.main_pos_config) as config: config.employee_ids.add(emp1) config.employee_ids.add(emp2)
def setUp(self): super(TestHrAttendance, self).setUp() self.user = new_test_user( self.env, login='******', groups='base.group_user,hr_attendance.group_hr_attendance_use_pin') self.user_no_pin = new_test_user(self.env, login='******', groups='base.group_user') self.test_employee = self.env['hr.employee'].create({ 'name': "François Russie", 'user_id': self.user.id, 'pin': '1234', }) self.employee_kiosk = self.env['hr.employee'].create({ 'name': "Machiavel", 'pin': '5678', })
def test_access_my_profile_toolbar(self): """ A simple user shouldn't have the possibilities to see the 'Change Password' action""" james = new_test_user(self.env, login='******', groups='base.group_user', name='Simple employee', email='*****@*****.**') james = james.with_user(james) self.env['hr.employee'].create({ 'name': 'James', 'user_id': james.id, }) view = self.env.ref('hr.res_users_view_form_profile') available_actions = james.fields_view_get( view_id=view.id, toolbar=True)['toolbar']['action'] change_password_action = self.env.ref( "base.change_password_wizard_action") self.assertFalse( any(x['id'] == change_password_action.id for x in available_actions)) """ An ERP manager should have the possibilities to see the 'Change Password' """ john = new_test_user(self.env, login='******', groups='base.group_erp_manager', name='ERP Manager', email='*****@*****.**') john = john.with_user(john) self.env['hr.employee'].create({ 'name': 'John', 'user_id': john.id, }) view = self.env.ref('hr.res_users_view_form_profile') available_actions = john.fields_view_get( view_id=view.id, toolbar=True)['toolbar']['action'] self.assertTrue( any(x['id'] == change_password_action.id for x in available_actions))
def test_manager_create_vehicle(self): manager = new_test_user( self.env, "test fleet manager", groups="fleet.fleet_group_manager,base.group_partner_manager") user = new_test_user(self.env, "test base user", groups="base.group_user") brand = self.env["fleet.vehicle.model.brand"].create({ "name": "Audi", }) model = self.env["fleet.vehicle.model"].create({ "brand_id": brand.id, "name": "A3", }) self.env["fleet.vehicle"].with_user(manager).create({ "model_id": model.id, "driver_id": user.partner_id.id, "plan_to_change_car": False })
def test_access_my_profile(self): """ A simple user should be able to read all fields in his profile """ james = new_test_user(self.env, login='******', groups='base.group_user', name='Simple employee', email='*****@*****.**') james = james.with_user(james) self.env['hr.employee'].create({ 'name': 'James', 'user_id': james.id, }) view = self.env.ref('hr.res_users_view_form_profile') view_infos = james.fields_view_get(view_id=view.id) fields = view_infos['fields'].keys() james.read(fields)
def test_company_create(self): main_company = self.env.ref('base.main_company') user = new_test_user( self.env, login='******', groups= 'base.group_user,base.group_erp_manager,base.group_partner_manager', company_id=main_company.id, company_ids=[(6, 0, main_company.ids)]) Company = self.env['res.company'] Company = Company.with_user(user) Company = Company.with_company(main_company) company = Company.create({'name': "Wall Company"}) self.assertEqual(company.leave_timesheet_project_id.sudo().company_id, company, "It should have created a project for the company")
def test_search_renewal(self): """ Should find the car with overdue contract or renewal due soon """ user = new_test_user(self.env, "test base user", groups="base.group_user") brand = self.env["fleet.vehicle.model.brand"].create({ "name": "Audi", }) model = self.env["fleet.vehicle.model"].create({ "brand_id": brand.id, "name": "A3", }) car_1 = self.env["fleet.vehicle"].create({ "model_id": model.id, "driver_id": user.partner_id.id, "plan_to_change_car": False }) car_2 = self.env["fleet.vehicle"].create({ "model_id": model.id, "driver_id": user.partner_id.id, "plan_to_change_car": False }) Log = self.env['fleet.vehicle.log.contract'] log = Log.create({ 'vehicle_id': car_2.id, 'expiration_date': fields.Date.add(fields.Date.today(), days=10) }) res = self.env["fleet.vehicle"].search([('contract_renewal_due_soon', '=', True), ('id', '=', car_2.id)]) self.assertEqual(res, car_2) log = Log.create({ 'vehicle_id': car_1.id, 'expiration_date': fields.Date.add(fields.Date.today(), days=-10) }) res = self.env["fleet.vehicle"].search([('contract_renewal_overdue', '=', True), ('id', '=', car_1.id)]) self.assertEqual(res, car_1)