-
-
Notifications
You must be signed in to change notification settings - Fork 313
/
Copy pathtest_backend_output.py
107 lines (95 loc) · 3.98 KB
/
test_backend_output.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Copyright 2020 ACSONE
# @author: Simone Orsi <simahawk@gmail.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import mock
from freezegun import freeze_time
from odoo import fields, tools
from odoo.exceptions import UserError
from .common import EDIBackendCommonComponentRegistryTestCase
from .fake_components import FakeOutputChecker, FakeOutputGenerator, FakeOutputSender
class EDIBackendTestCase(EDIBackendCommonComponentRegistryTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls._build_components(
# TODO: test all components lookup
cls,
FakeOutputGenerator,
FakeOutputSender,
FakeOutputChecker,
)
vals = {
"model": cls.partner._name,
"res_id": cls.partner.id,
}
cls.record = cls.backend.create_record("test_csv_output", vals)
def setUp(self):
super().setUp()
FakeOutputGenerator.reset_faked()
FakeOutputSender.reset_faked()
FakeOutputChecker.reset_faked()
def test_generate_record_output(self):
self.backend.with_context(fake_output="yeah!").exchange_generate(self.record)
self.assertEqual(self.record._get_file_content(), "yeah!")
def test_generate_record_output_pdf(self):
result = tools.file_open(
"result.pdf", subdir="addons/edi_oca/tests", mode="rb"
).read()
self.backend.with_context(fake_output=result).exchange_generate(self.record)
def test_send_record(self):
self.record.write({"edi_exchange_state": "output_pending"})
self.record._set_file_content("TEST %d" % self.record.id)
self.assertFalse(self.record.exchanged_on)
with freeze_time("2020-10-21 10:00:00"):
self.record.action_exchange_send()
self.assertTrue(FakeOutputSender.check_called_for(self.record))
self.assertRecordValues(self.record, [{"edi_exchange_state": "output_sent"}])
self.assertEqual(
fields.Datetime.to_string(self.record.exchanged_on), "2020-10-21 10:00:00"
)
def test_send_record_with_error(self):
self.record.write({"edi_exchange_state": "output_pending"})
self.record._set_file_content("TEST %d" % self.record.id)
self.assertFalse(self.record.exchanged_on)
self.record.with_context(
test_break_send="OOPS! Something went wrong :("
).action_exchange_send()
self.assertTrue(FakeOutputSender.check_called_for(self.record))
self.assertRecordValues(
self.record,
[
{
"edi_exchange_state": "output_error_on_send",
}
],
)
self.assertIn("OOPS! Something went wrong :(", self.record.exchange_error)
def test_send_invalid_direction(self):
vals = {
"model": self.partner._name,
"res_id": self.partner.id,
}
record = self.backend.create_record("test_csv_input", vals)
with mock.patch.object(type(self.backend), "_exchange_send") as mocked:
mocked.return_value = "AAA"
with self.assertRaises(UserError) as err:
record.action_exchange_send()
self.assertEqual(
err.exception.args[0],
"Record ID=%d is not meant to be sent!" % record.id,
)
mocked.assert_not_called()
def test_send_not_generated_record(self):
vals = {
"model": self.partner._name,
"res_id": self.partner.id,
}
record = self.backend.create_record("test_csv_output", vals)
with mock.patch.object(type(self.backend), "_exchange_send") as mocked:
mocked.return_value = "AAA"
with self.assertRaises(UserError) as err:
record.action_exchange_send()
self.assertEqual(
err.exception.args[0], "Record ID=%d has no file to send!" % record.id
)
mocked.assert_not_called()