The name set by the mail gateway was the title of the mail. The name should be set with the journal sequence when posting instead. This behavior was broken by 5d24244f417cb8f221f8d418663f4544adcd5613 closes odoo/odoo#56065 Related: odoo/enterprise#12492 Signed-off-by: Laurent Smet <smetl@users.noreply.github.com> Signed-off-by: wan <william-andre@users.noreply.github.com>
124 lines
6.2 KiB
Python
124 lines
6.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.tests import tagged
|
|
|
|
import json
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestAccountIncomingSupplierInvoice(AccountTestInvoicingCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls, chart_template_ref=None):
|
|
super().setUpClass(chart_template_ref=chart_template_ref)
|
|
|
|
cls.env['ir.config_parameter'].sudo().set_param('mail.catchall.domain', 'test-company.odoo.com')
|
|
|
|
cls.internal_user = cls.env['res.users'].create({
|
|
'name': 'Internal User',
|
|
'login': 'internal.user@test.odoo.com',
|
|
'email': 'internal.user@test.odoo.com',
|
|
})
|
|
|
|
cls.supplier_partner = cls.env['res.partner'].create({
|
|
'name': 'Your Supplier',
|
|
'email': 'supplier@other.company.com',
|
|
'supplier_rank': 10,
|
|
})
|
|
|
|
cls.journal = cls.company_data['default_journal_purchase']
|
|
|
|
journal_alias = cls.env['mail.alias'].create({
|
|
'alias_name': 'test-bill',
|
|
'alias_model_id': cls.env.ref('account.model_account_move').id,
|
|
'alias_defaults': json.dumps({
|
|
'move_type': 'in_invoice',
|
|
'company_id': cls.env.user.company_id.id,
|
|
'journal_id': cls.journal.id,
|
|
}),
|
|
})
|
|
cls.journal.write({'alias_id': journal_alias.id})
|
|
|
|
def test_supplier_invoice_mailed_from_supplier(self):
|
|
message_parsed = {
|
|
'message_id': 'message-id-dead-beef',
|
|
'subject': 'Incoming bill',
|
|
'from': '%s <%s>' % (self.supplier_partner.name, self.supplier_partner.email),
|
|
'to': '%s@%s' % (self.journal.alias_id.alias_name, self.journal.alias_id.alias_domain),
|
|
'body': "You know, that thing that you bought.",
|
|
'attachments': [b'Hello, invoice'],
|
|
}
|
|
|
|
invoice = self.env['account.move'].message_new(message_parsed, {'move_type': 'in_invoice', 'journal_id': self.journal.id})
|
|
|
|
message_ids = invoice.message_ids
|
|
self.assertEqual(len(message_ids), 1, 'Only one message should be posted in the chatter')
|
|
self.assertEqual(message_ids.body, '<p>Vendor Bill Created</p>', 'Only the invoice creation should be posted')
|
|
|
|
following_partners = invoice.message_follower_ids.mapped('partner_id')
|
|
self.assertEqual(following_partners, self.env.user.partner_id)
|
|
self.assertRegex(invoice.name, 'BILL/\d{4}/\d{2}/0001')
|
|
|
|
def test_supplier_invoice_forwarded_by_internal_user_without_supplier(self):
|
|
""" In this test, the bill was forwarded by an employee,
|
|
but no partner email address is found in the body."""
|
|
message_parsed = {
|
|
'message_id': 'message-id-dead-beef',
|
|
'subject': 'Incoming bill',
|
|
'from': '%s <%s>' % (self.internal_user.name, self.internal_user.email),
|
|
'to': '%s@%s' % (self.journal.alias_id.alias_name, self.journal.alias_id.alias_domain),
|
|
'body': "You know, that thing that you bought.",
|
|
'attachments': [b'Hello, invoice'],
|
|
}
|
|
|
|
invoice = self.env['account.move'].message_new(message_parsed, {'move_type': 'in_invoice', 'journal_id': self.journal.id})
|
|
|
|
message_ids = invoice.message_ids
|
|
self.assertEqual(len(message_ids), 1, 'Only one message should be posted in the chatter')
|
|
self.assertEqual(message_ids.body, '<p>Vendor Bill Created</p>', 'Only the invoice creation should be posted')
|
|
|
|
following_partners = invoice.message_follower_ids.mapped('partner_id')
|
|
self.assertEqual(following_partners, self.env.user.partner_id | self.internal_user.partner_id)
|
|
|
|
def test_supplier_invoice_forwarded_by_internal_with_supplier_in_body(self):
|
|
""" In this test, the bill was forwarded by an employee,
|
|
and the partner email address is found in the body."""
|
|
message_parsed = {
|
|
'message_id': 'message-id-dead-beef',
|
|
'subject': 'Incoming bill',
|
|
'from': '%s <%s>' % (self.internal_user.name, self.internal_user.email),
|
|
'to': '%s@%s' % (self.journal.alias_id.alias_name, self.journal.alias_id.alias_domain),
|
|
'body': "Mail sent by %s <%s>:\nYou know, that thing that you bought." % (self.supplier_partner.name, self.supplier_partner.email),
|
|
'attachments': [b'Hello, invoice'],
|
|
}
|
|
|
|
invoice = self.env['account.move'].message_new(message_parsed, {'move_type': 'in_invoice', 'journal_id': self.journal.id})
|
|
|
|
message_ids = invoice.message_ids
|
|
self.assertEqual(len(message_ids), 1, 'Only one message should be posted in the chatter')
|
|
self.assertEqual(message_ids.body, '<p>Vendor Bill Created</p>', 'Only the invoice creation should be posted')
|
|
|
|
following_partners = invoice.message_follower_ids.mapped('partner_id')
|
|
self.assertEqual(following_partners, self.env.user.partner_id | self.internal_user.partner_id)
|
|
|
|
def test_supplier_invoice_forwarded_by_internal_with_internal_in_body(self):
|
|
""" In this test, the bill was forwarded by an employee,
|
|
and the internal user email address is found in the body."""
|
|
message_parsed = {
|
|
'message_id': 'message-id-dead-beef',
|
|
'subject': 'Incoming bill',
|
|
'from': '%s <%s>' % (self.internal_user.name, self.internal_user.email),
|
|
'to': '%s@%s' % (self.journal.alias_id.alias_name, self.journal.alias_id.alias_domain),
|
|
'body': "Mail sent by %s <%s>:\nYou know, that thing that you bought." % (self.internal_user.name, self.internal_user.email),
|
|
'attachments': [b'Hello, invoice'],
|
|
}
|
|
|
|
invoice = self.env['account.move'].message_new(message_parsed, {'move_type': 'in_invoice', 'journal_id': self.journal.id})
|
|
|
|
message_ids = invoice.message_ids
|
|
self.assertEqual(len(message_ids), 1, 'Only one message should be posted in the chatter')
|
|
self.assertEqual(message_ids.body, '<p>Vendor Bill Created</p>', 'Only the invoice creation should be posted')
|
|
|
|
following_partners = invoice.message_follower_ids.mapped('partner_id')
|
|
self.assertEqual(following_partners, self.env.user.partner_id | self.internal_user.partner_id)
|