1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/approvals/tests/test_approvals.py
2024-12-10 09:04:09 +07:00

187 lines
7.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command, fields
from odoo.tests import common
from odoo.exceptions import UserError
class TestRequest(common.TransactionCase):
def test_compute_request_status(self):
category_test = self.env['approval.category'].browse(1)
record = self.env['approval.request'].create({
'name': 'test request',
'category_id': category_test.id,
'date_start': fields.Datetime.now(),
'date_end': fields.Datetime.now(),
'location': 'testland'
})
first_approver = self.env['approval.approver'].create({
'user_id': 1,
'request_id': record.id,
'status': 'new'})
second_approver = self.env['approval.approver'].create({
'user_id': 2,
'request_id': record.id,
'status': 'new'})
record.approver_ids = (first_approver | second_approver)
self.assertEqual(record.request_status, 'new')
record.action_confirm()
# Test case 1: Min approval = 1
self.assertEqual(record.request_status, 'pending')
record.action_approve(first_approver)
self.assertEqual(record.request_status, 'approved')
record.action_approve(second_approver)
self.assertEqual(record.request_status, 'approved')
record.action_withdraw(first_approver)
self.assertEqual(record.request_status, 'approved')
record.action_refuse(first_approver)
self.assertEqual(record.request_status, 'refused')
# Test case 2: Min approval = 1
category_test.approval_minimum = 2
record.action_withdraw(first_approver)
record.action_withdraw(second_approver)
self.assertEqual(record.request_status, 'pending')
record.action_approve(first_approver)
self.assertEqual(record.request_status, 'pending')
record.action_approve(second_approver)
self.assertEqual(record.request_status, 'approved')
record.action_withdraw(second_approver)
self.assertEqual(record.request_status, 'pending')
record.action_refuse(second_approver)
self.assertEqual(record.request_status, 'refused')
# Test case 3: Check that cancel is erasing the old validations
record.action_cancel()
self.assertEqual(first_approver.status, 'cancel')
self.assertEqual(second_approver.status, 'cancel')
self.assertEqual(record.request_status, 'cancel')
# Test case 4: Set the approval request to draft
record.action_draft()
self.assertEqual(first_approver.status, 'new')
self.assertEqual(second_approver.status, 'new')
self.assertEqual(record.request_status, 'new')
# Test case 5: Set min approval to an impossible value to reach
category_test.approval_minimum = 3
with self.assertRaises(UserError):
record.action_confirm()
self.assertEqual(record.request_status, 'new')
def test_compute_request_status_with_required(self):
category_test = self.env['approval.category'].browse(1)
record = self.env['approval.request'].create({
'name': 'test request',
'category_id': category_test.id,
'date_start': fields.Datetime.now(),
'date_end': fields.Datetime.now(),
'location': 'testland'
})
first_approver = self.env['approval.approver'].create({
'user_id': 1,
'request_id': record.id,
'status': 'new',
'required': True})
second_approver = self.env['approval.approver'].create({
'user_id': 2,
'request_id': record.id,
'status': 'new'})
record.approver_ids = (first_approver | second_approver)
self.assertEqual(record.request_status, 'new')
record.action_confirm()
# Min approval = 1 but first approver IS required
self.assertEqual(record.request_status, 'pending')
record.action_approve(second_approver)
# Min approval is met but required approvals are not
self.assertEqual(record.request_status, 'pending')
record.action_approve(first_approver)
self.assertEqual(record.request_status, 'approved')
# Min approval = 2
category_test.approval_minimum = 2
record.action_withdraw(first_approver)
record.action_withdraw(second_approver)
self.assertEqual(record.request_status, 'pending')
record.action_approve(first_approver)
# All required approvals are met but not the minimal approval count
self.assertEqual(record.request_status, 'pending')
record.action_approve(second_approver)
self.assertEqual(record.request_status, 'approved')
def test_product_line_compute_uom(self):
category_test = self.env['approval.category'].browse(1)
uom = self.env.ref('uom.product_uom_dozen')
product = self.env['product.product'].create({
'name': 'foo',
'uom_id': uom.id,
})
approval = self.env['approval.request'].create({
'category_id': category_test.id,
'product_line_ids': [
Command.create({'product_id': product.id})
],
})
self.assertEqual(approval.product_line_ids.description, 'foo')
self.assertEqual(approval.product_line_ids.product_uom_id, uom)
def test_unlink_approval(self):
"""
There is no error when unlinking a draft request with a document attached
or a binary field filled.
"""
approval = self.env['approval.request'].create({
'name': 'test request',
'category_id': self.env.ref('approvals.approval_category_data_business_trip').id,
'date_start': fields.Datetime.now(),
'date_end': fields.Datetime.now(),
'location': 'testland'
})
self.env['ir.attachment'].create({
'name': 'test.file',
'res_id': approval.id,
'res_model': 'approval.request',
})
self.env['ir.model.fields'].create({
'name': 'x_test_field',
'model_id': self.env.ref('approvals.model_approval_request').id,
'ttype': 'binary',
})
approval.x_test_field = 'test'
approval.unlink()
def test_unlink_multiple_approvals_with_product_line(self):
"""
There is no error when unlinking a multiple approval requests with a
product line.
"""
approvals = self.env['approval.request'].create([{
'name': 'Approval Request 1',
'category_id': self.env.ref('approvals.approval_category_data_borrow_items').id,
'date_start': fields.Datetime.now(),
'date_end': fields.Datetime.now(),
'location': 'testland',
}, {
'name': 'Approval Request 1',
'category_id': self.env.ref('approvals.approval_category_data_borrow_items').id,
'date_start': fields.Datetime.now(),
'date_end': fields.Datetime.now(),
'location': 'testitems',
}])
product_line = self.env['approval.product.line'].create({
'approval_request_id': approvals[0].id,
'description': "Description",
})
approvals.unlink()
self.assertFalse(product_line.exists())
self.assertFalse(approvals.exists())