Files
enterprise-addons/industry_fsm_report/tests/test_action_buttons_display.py
T

132 lines
6.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import base64
import io
from PIL import Image
from datetime import datetime
from odoo.tests import TransactionCase
class TestActionButtons(TransactionCase):
""" Test visibility of the following buttons:
- Send/Sign Report
"""
@classmethod
def setUpClass(cls):
super().setUpClass()
if 'sale_line_id' in cls.env['project.task']._fields:
cls.skipTest(cls, '`industry_fsm_sale` module must not be installed to run the tests')
cls.customer = cls.env['res.partner'].create({'name': 'My Customer'})
cls.env.company.timesheet_encode_uom_id = cls.env.ref('uom.product_uom_hour')
cls.project = cls.env['project.project'].create({
'name': 'My Project',
'partner_id': cls.customer.id,
'allow_timesheets': True,
'allow_worksheets': True,
'is_fsm': True,
'company_id': cls.env.company.id,
})
cls.task = cls.env['project.task'].create({
'name': 'My Task',
'project_id': cls.project.id,
'partner_id': cls.customer.id,
'worksheet_template_id': cls.env.ref('industry_fsm_report.fsm_worksheet_template').id,
})
cls.employee = cls.env['hr.employee'].with_company(cls.env.company).create({
'name': 'Employee Default',
'user_id': cls.env.uid,
})
cls.timesheet = cls.env['account.analytic.line'].create({
'task_id': cls.task.id,
'project_id': cls.project.id,
'date': datetime.now(),
'name': 'My Timesheet',
'user_id': cls.env.uid,
'unit_amount': 1,
})
def test_send_sign_report_buttons_visibility_conditions(self):
# Sign/Send not visible if Time = 0 AND Worksheet = 0
# Visible in non primary if Time > 0 OR Worksheet > 0
# Visible in primary if Time > 0 AND Worksheet > 0
# Send should be visible in primary if T,W > 0 and report not sent yet
# Send should be visible in secondary if T || W > 0 or report already sent
# Check Enabled Counter
self.assertEqual(self.task.display_enabled_conditions_count, 2)
# Sign/send only visible if 'worksheets' is enabled on the project
self.project.allow_worksheets = False
self.assertFalse(self.task.display_sign_report_primary)
self.assertFalse(self.task.display_sign_report_secondary)
self.assertFalse(self.task.display_send_report_primary)
self.assertFalse(self.task.display_send_report_secondary)
self.assertEqual(self.task.display_enabled_conditions_count, 1)
self.project.allow_timesheets = False
self.timesheet.task_id = False # Unlink the task from the timesheet
self.assertEqual(self.task.display_enabled_conditions_count, 0)
self.project.write({
'allow_worksheets': True,
'allow_timesheets': True,
})
self.assertEqual(self.task.display_enabled_conditions_count, 2)
# Not visible
self.assertFalse(self.task.display_sign_report_primary)
self.assertFalse(self.task.display_sign_report_secondary)
self.assertFalse(self.task.display_send_report_primary)
self.assertFalse(self.task.display_send_report_secondary)
# Secondary if time > 0 only
self.assertEqual(self.task.display_satisfied_conditions_count, 0)
self.timesheet.task_id = self.task # Link the task to the timesheet
self.assertEqual(self.task.display_satisfied_conditions_count, 1)
self.assertFalse(self.task.display_sign_report_primary)
self.assertTrue(self.task.display_sign_report_secondary)
self.assertFalse(self.task.display_send_report_primary)
self.assertTrue(self.task.display_send_report_secondary) # Not signed yet
self.timesheet.task_id = False # Unlink the task from the timesheet
# Secondary if worksheet > 0 only
self.assertEqual(self.task.display_satisfied_conditions_count, 0)
worksheet_vals = {
'x_name': 'This is a name',
'x_comments': 'This is a comment',
'x_project_task_id': self.task.id,
}
worksheet = self.env[self.task.worksheet_template_id.model_id.model].create(worksheet_vals)
self.task._compute_worksheet_count()
self.assertEqual(self.task.display_satisfied_conditions_count, 1)
self.assertTrue(self.task.worksheet_count)
self.assertFalse(self.task.display_sign_report_primary)
self.assertTrue(self.task.display_sign_report_secondary)
self.assertFalse(self.task.display_send_report_primary)
self.assertTrue(self.task.display_send_report_secondary) # Not signed yet
worksheet.unlink()
# Primary of all conditions met
self.timesheet.task_id = self.task # Link the task to the timesheet
worksheet = self.env[self.task.worksheet_template_id.model_id.model].create(worksheet_vals)
self.task._compute_worksheet_count()
self.assertEqual(self.task.display_satisfied_conditions_count, 2)
self.assertTrue(self.task.display_sign_report_primary)
self.assertFalse(self.task.display_sign_report_secondary)
self.assertTrue(self.task.display_send_report_primary) # Report is not signed yet
self.assertFalse(self.task.display_send_report_secondary) # Report is not signed yet
# Send visible in primary if report is signed and not sent yet
f = io.BytesIO()
Image.new('RGB', (50, 50)).save(f, 'PNG')
f.seek(0)
image = base64.b64encode(f.read())
self.task.worksheet_signature = image
self.assertTrue(self.task.display_send_report_primary) # Report is signed, not sent yet
self.assertFalse(self.task.display_send_report_secondary)
self.task.fsm_is_sent = True
self.assertFalse(self.task.display_send_report_primary)
self.assertFalse(self.task.display_send_report_secondary) # Report is sent then do not display button