summaryrefslogtreecommitdiff
path: root/addons/account/tests/test_account_incoming_supplier_invoice.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/account/tests/test_account_incoming_supplier_invoice.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/account/tests/test_account_incoming_supplier_invoice.py')
-rw-r--r--addons/account/tests/test_account_incoming_supplier_invoice.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/addons/account/tests/test_account_incoming_supplier_invoice.py b/addons/account/tests/test_account_incoming_supplier_invoice.py
new file mode 100644
index 00000000..373fcbab
--- /dev/null
+++ b/addons/account/tests/test_account_incoming_supplier_invoice.py
@@ -0,0 +1,123 @@
+# -*- 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)