forked from Mapan/odoo17e
187 lines
7.4 KiB
Python
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())
|