# -*- 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, '

Vendor Bill Created

', '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, r'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, '

Vendor Bill Created

', '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, '

Vendor Bill Created

', '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, '

Vendor Bill Created

', '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)