GoodERP
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

186 lines
7.1KB

  1. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo.tests.common import TransactionCase
  4. from odoo.exceptions import UserError, ValidationError
  5. from datetime import datetime, timedelta
  6. class TestStaff(TransactionCase):
  7. def test_get_image(self):
  8. '''拿到用户头像,职位的onchange'''
  9. user_lucy = self.env['res.users'].create({
  10. 'name': 'Lucy',
  11. 'login': 'lucy@osbzr.com',
  12. })
  13. staff_pro = self.env['staff'].create({
  14. 'identification_id': 111111,
  15. 'work_phone': 12345678901,
  16. 'work_email': 'lucy@osbzr.com',
  17. 'name': 'Lucy',
  18. 'code': 'lucy',
  19. 'type': 'member',
  20. 'user_id': user_lucy.id,
  21. 'job_id': self.env.ref('staff.staff_job_1').id})
  22. staff_pro.onchange_job_id()
  23. def test_staff_contract_over_date(self):
  24. '''测试:员工合同到期,发送邮件给员工 和 部门经理(如果存在)'''
  25. job = self.browse_ref('staff.ir_cron_module_remind_contract_over_date')
  26. job.interval_type = 'minutes'
  27. job.nextcall = (datetime.now() + timedelta(hours=8)
  28. ).strftime('%Y-%m-%d %H:%M:%S')
  29. # not staff.contract_ids
  30. self.env['staff'].staff_contract_over_date()
  31. # has staff.contract_ids but no apartment manager
  32. staff_lily = self.env.ref('staff.lili')
  33. staff_lily.work_email = 'lili@sina.com.cn'
  34. staff_lily.contract_ids.create({'staff_id': staff_lily.id,
  35. 'basic_wage': 123456,
  36. 'over_date': datetime.now().strftime("%Y-%m-%d"),
  37. 'job_id': self.env.ref('staff.staff_job_1').id})
  38. # has staff.contract_ids and apartment manager
  39. self.env.ref('staff.staff_1').work_email = 'admin@sina.com.cn'
  40. staff_lily.parent_id = self.env.ref('staff.staff_1').id
  41. self.env['staff'].staff_contract_over_date()
  42. def test_onchange_basic_wage(self):
  43. ''' 测试:选择基本工资时带出五险一金比例,计算出应交金额并填充 '''
  44. company = self.env.company
  45. company.endowment_ratio = 8
  46. # company.health_ratio = 2
  47. # company.unemployment_ratio = 0.5
  48. # company.housing_fund_ratio = 7
  49. # company.endowment_co_ratio = 20
  50. # company.health_co_ratio = 10
  51. # company.unemployment_co_ratio = 1
  52. # company.injury_ratio = 1
  53. # company.maternity_ratio = 0.5
  54. # company.housing_fund_co_ratio = 7
  55. lili_contract = self.env.ref('staff.contract_staff_lili')
  56. lili_contract.basic_wage = 13000
  57. lili_contract.onchange_basic_wage()
  58. def test_check_work_email(self):
  59. ''' Test: check work email '''
  60. staff_lili = self.env.ref('staff.lili')
  61. # 测试邮箱格式正确
  62. staff_lili.work_email = 'gooderp@osbzr.com'
  63. # c4b9148 removed the legacy regex constraint; retain the native
  64. # contact-field roundtrip and optional-value contract.
  65. staff_lili.work_email = 'GoodERP <gooderp@osbzr.com>'
  66. self.assertEqual(staff_lili.work_email, 'GoodERP <gooderp@osbzr.com>')
  67. staff_lili.work_email = False
  68. self.assertFalse(staff_lili.work_email)
  69. class TestStaffDepartment(TransactionCase):
  70. ''' 测试 部门 '''
  71. def test_check_parent_id(self):
  72. ''' 测试 上级部门不能选择自己和下级的部门 '''
  73. department_1 = self.env.ref('staff.department_1')
  74. department_2 = self.env['staff.department'].create({
  75. 'name': '财务部',
  76. 'code': 'dep_finance',
  77. 'type': 'department',
  78. 'parent_id': department_1.id,
  79. })
  80. with self.assertRaises(UserError):
  81. department_1.parent_id = department_2.id
  82. def test_view_detail(self):
  83. ''' 测试部门list 打开部门 '''
  84. department_1 = self.env.ref('staff.department_1')
  85. department_1.view_detail()
  86. class TestMailMessage(TransactionCase):
  87. def setUp(self):
  88. '''准备基本数据'''
  89. super(TestMailMessage, self).setUp()
  90. self.staff = self.browse_ref('staff.staff_1')
  91. def test_staff_birthday_message(self):
  92. '''测试:员工生日当天,whole company 会收到祝福信息'''
  93. # 设置了员工生日
  94. self.staff.birthday = datetime.now()
  95. job = self.browse_ref(
  96. 'staff.ir_cron_module_update_notification_birthday')
  97. job.interval_type = 'minutes'
  98. job.nextcall = (datetime.now() + timedelta(hours=8)
  99. ).strftime('%Y-%m-%d %H:%M:%S')
  100. messages = self.env['mail.message'].staff_birthday_message()
  101. channel = self.env.ref('mail.channel_all_employees')
  102. self.assertTrue(messages)
  103. self.assertTrue(all(message.model == 'discuss.channel'
  104. and message.res_id == channel.id for message in messages))
  105. self.assertTrue(any(self.staff.name in message.body for message in messages))
  106. class TestResUsers(TransactionCase):
  107. def test_check_user_id(self):
  108. ''' 测试 一个用户只能对应一个员工 '''
  109. # core 模块里
  110. user = self.env.ref('base.user_demo')
  111. self.env.ref('staff.lili').user_id = user.id
  112. with self.assertRaises(UserError):
  113. self.env.ref('staff.staff_1').user_id = user.id
  114. class TestLeave(TransactionCase):
  115. ''' 测试 请假 '''
  116. def setUp(self):
  117. '''准备基本数据'''
  118. super(TestLeave, self).setUp()
  119. self.leave = self.browse_ref('staff.leave_1')
  120. def test_set_staff_id(self):
  121. ''' 测试 请假人 默认值 '''
  122. self.env['staff.leave'].create({
  123. 'name': 'go back home',
  124. 'leave_type': 'no_pay',
  125. })
  126. def test_leave_done(self):
  127. '''审核请假单'''
  128. self.leave.leave_done()
  129. self.assertTrue(self.leave.state == 'done')
  130. # 重复审核报错
  131. with self.assertRaises(UserError):
  132. self.leave.leave_done()
  133. def test_leave_draft(self):
  134. '''反审核请假单'''
  135. self.leave.leave_done()
  136. self.leave.leave_draft()
  137. self.assertTrue(self.leave.state == 'draft')
  138. # 重复反审核审核报错
  139. with self.assertRaises(UserError):
  140. self.leave.leave_draft()
  141. def test_check_leave_dates(self):
  142. '''请假天数不能小于或等于零'''
  143. with self.assertRaises(UserError):
  144. self.leave.leave_dates = 0
  145. class TestBirthdayMessageAPI(TransactionCase):
  146. def test_birthday_links_to_actual_company_channel(self):
  147. employee = self.env['staff'].create({'name': 'DEV65生日兼容员工', 'birthday': datetime.now().date()})
  148. channel = self.env.ref('mail.channel_all_employees')
  149. messages = self.env['mail.message'].staff_birthday_message()
  150. own = [m for m in messages if employee.name in m.body]
  151. self.assertEqual(len(own), 1)
  152. self.assertEqual(own[0].model, channel._name)
  153. self.assertEqual(own[0].res_id, channel.id)
  154. self.assertIn('生日快乐', own[0].subject)
上海开阖软件有限公司 沪ICP备12045867号-1