Skip to content

Commit 55c77cc

Browse files
committed
[IMP] edi_voxel_oca: pre-commit stuff for unit tests.
1 parent e50cc79 commit 55c77cc

File tree

4 files changed

+111
-68
lines changed

4 files changed

+111
-68
lines changed

edi_voxel_oca/tests/test_queue_job.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44

55
from odoo.tests.common import TransactionCase
66

7-
class TestQueueJob(TransactionCase):
87

8+
class TestQueueJob(TransactionCase):
99
def setUp(self):
1010
super(TestQueueJob, self).setUp()
11-
self.queue_job = self.env['queue.job'].create({
12-
'name': 'Test Job',
13-
'state': 'pending',
14-
})
11+
self.queue_job = self.env["queue.job"].create(
12+
{
13+
"name": "Test Job",
14+
"state": "pending",
15+
}
16+
)
1517

1618
def test_voxel_do_now(self):
1719
self.queue_job.voxel_do_now()
1820
self.assertFalse(self.queue_job.eta, "ETA should be set to False")
1921

2022
def test_voxel_cancel_now(self):
2123
self.queue_job.voxel_cancel_now()
22-
self.assertFalse(self.queue_job.exists(), "Job should be unlinked if in pending, enqueued, or failed state")
24+
self.assertFalse(
25+
self.queue_job.exists(),
26+
"Job should be unlinked if in pending, enqueued, or failed state",
27+
)
2328

2429
def test_voxel_requeue_sudo(self):
2530
self.queue_job.voxel_requeue_sudo()
26-
self.assertEqual(self.queue_job.state, 'enqueued', "Job should be requeued")
31+
self.assertEqual(self.queue_job.state, "enqueued", "Job should be requeued")

edi_voxel_oca/tests/test_res_company.py

+26-15
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,54 @@
22
# Copyright 2025 Guavana - Leonardo J. Caballero G.
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
44

5-
from odoo.tests.common import TransactionCase
65
from datetime import datetime, timedelta
6+
77
import pytz
88

9-
class TestResCompany(TransactionCase):
9+
from odoo.tests.common import TransactionCase
10+
1011

12+
class TestResCompany(TransactionCase):
1113
def setUp(self):
1214
super(TestResCompany, self).setUp()
13-
self.company = self.env['res.company'].create({
14-
'name': 'Test Company',
15-
'voxel_enabled': True,
16-
'voxel_send_mode': 'auto',
17-
'voxel_sent_time': 12.0,
18-
'voxel_delay_time': 2.0,
19-
})
15+
self.company = self.env["res.company"].create(
16+
{
17+
"name": "Test Company",
18+
"voxel_enabled": True,
19+
"voxel_send_mode": "auto",
20+
"voxel_sent_time": 12.0,
21+
"voxel_delay_time": 2.0,
22+
}
23+
)
2024

2125
def test_get_voxel_report_eta_auto(self):
22-
self.company.voxel_send_mode = 'auto'
26+
self.company.voxel_send_mode = "auto"
2327
eta = self.company._get_voxel_report_eta()
2428
self.assertIsNone(eta, "ETA should be None for auto send mode")
2529

2630
def test_get_voxel_report_eta_fixed(self):
27-
self.company.voxel_send_mode = 'fixed'
28-
tz = self.env.context.get("tz", self.env.user.partner_id.tz) or 'UTC'
31+
self.company.voxel_send_mode = "fixed"
32+
tz = self.env.context.get("tz", self.env.user.partner_id.tz) or "UTC"
2933
offset = datetime.now(pytz.timezone(tz)).strftime("%z")
3034
hour_diff = int(offset[:3])
3135
expected_hour = int(12 - hour_diff)
3236
now = datetime.now()
3337
if now.hour > expected_hour:
3438
now += timedelta(days=1)
35-
expected_eta = now.replace(hour=expected_hour, minute=0, second=0, microsecond=0)
39+
expected_eta = now.replace(
40+
hour=expected_hour, minute=0, second=0, microsecond=0
41+
)
3642
eta = self.company._get_voxel_report_eta()
3743
self.assertEqual(eta, expected_eta, "ETA should match the expected fixed time")
3844

3945
def test_get_voxel_report_eta_delayed(self):
40-
self.company.voxel_send_mode = 'delayed'
46+
self.company.voxel_send_mode = "delayed"
4147
expected_eta = datetime.now() + timedelta(hours=2)
4248
eta = self.company._get_voxel_report_eta()
4349
self.assertIsNotNone(eta, "ETA should not be None for delayed send mode")
44-
self.assertAlmostEqual(eta, expected_eta, msg="ETA should be 2 hours from now for delayed send mode", delta=timedelta(seconds=1))
50+
self.assertAlmostEqual(
51+
eta,
52+
expected_eta,
53+
msg="ETA should be 2 hours from now for delayed send mode",
54+
delta=timedelta(seconds=1),
55+
)

edi_voxel_oca/tests/test_res_partner.py

+18-10
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,33 @@
44

55
from odoo.tests.common import TransactionCase
66

7-
class TestResPartner(TransactionCase):
87

8+
class TestResPartner(TransactionCase):
99
def setUp(self):
1010
super(TestResPartner, self).setUp()
11-
self.partner = self.env['res.partner'].create({
12-
'name': 'Test Partner',
13-
'vat': 'ES12345678',
14-
'voxel_enabled': True,
15-
})
11+
self.partner = self.env["res.partner"].create(
12+
{
13+
"name": "Test Partner",
14+
"vat": "ES12345678",
15+
"voxel_enabled": True,
16+
}
17+
)
1618

1719
def test_commercial_fields(self):
1820
commercial_fields = self.partner._commercial_fields()
19-
self.assertIn('voxel_enabled', commercial_fields, "voxel_enabled should be in the commercial fields")
21+
self.assertIn(
22+
"voxel_enabled",
23+
commercial_fields,
24+
"voxel_enabled should be in the commercial fields",
25+
)
2026

2127
def test_get_voxel_vat_with_prefix(self):
2228
vat = self.partner._get_voxel_vat()
23-
self.assertEqual(vat, '12345678', "VAT should be stripped of the 'ES' prefix")
29+
self.assertEqual(vat, "12345678", "VAT should be stripped of the 'ES' prefix")
2430

2531
def test_get_voxel_vat_without_prefix(self):
26-
self.partner.vat = '12345678'
32+
self.partner.vat = "12345678"
2733
vat = self.partner._get_voxel_vat()
28-
self.assertEqual(vat, '12345678', "VAT should remain unchanged if no 'ES' prefix")
34+
self.assertEqual(
35+
vat, "12345678", "VAT should remain unchanged if no 'ES' prefix"
36+
)

edi_voxel_oca/tests/test_voxel_mixin.py

+55-36
Original file line numberDiff line numberDiff line change
@@ -2,68 +2,87 @@
22
# Copyright 2025 Guavana - Leonardo J. Caballero G.
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
44

5+
from unittest.mock import MagicMock, patch
6+
57
from odoo.tests.common import TransactionCase
6-
from unittest.mock import patch, MagicMock
7-
from datetime import datetime, timedelta
88

9-
class TestVoxelMixin(TransactionCase):
109

10+
class TestVoxelMixin(TransactionCase):
1111
def setUp(self):
1212
super(TestVoxelMixin, self).setUp()
13-
self.company = self.env['res.company'].create({
14-
'name': 'Test Company',
15-
'voxel_enabled': True,
16-
})
17-
self.mixin = self.env['voxel.mixin'].create({
18-
'voxel_state': 'not_sent',
19-
# 'company_id': self.company.id,
20-
})
13+
self.company = self.env["res.company"].create(
14+
{
15+
"name": "Test Company",
16+
"voxel_enabled": True,
17+
}
18+
)
19+
self.mixin = self.env["voxel.mixin"].create(
20+
{
21+
"voxel_state": "not_sent",
22+
# 'company_id': self.company.id,
23+
}
24+
)
2125

22-
@patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put')
26+
@patch("odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put")
2327
def test_send_voxel_report_success(self, mock_put):
2428
mock_put.return_value.status_code = 200
25-
self.mixin._send_voxel_report('Outbox', 'test.xml', b'<xml></xml>')
26-
self.assertEqual(self.mixin.voxel_state, 'sent', "Voxel state should be 'sent'")
29+
self.mixin._send_voxel_report("Outbox", "test.xml", b"<xml></xml>")
30+
self.assertEqual(self.mixin.voxel_state, "sent", "Voxel state should be 'sent'")
2731

28-
@patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put')
32+
@patch("odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put")
2933
def test_send_voxel_report_failure(self, mock_put):
3034
mock_put.return_value.status_code = 500
31-
with self.assertRaises(Exception):
32-
self.mixin._send_voxel_report('Outbox', 'test.xml', b'<xml></xml>')
33-
self.assertEqual(self.mixin.voxel_state, 'sent_errors', "Voxel state should be 'sent_errors'")
35+
with self.assertRaises(Exception) as context:
36+
self.mixin._send_voxel_report("Outbox", "test.xml", b"<xml></xml>")
37+
self.assertTrue("specific error message" in str(context.exception))
38+
self.assertEqual(
39+
self.mixin.voxel_state, "sent_errors", "Voxel state should be 'sent_errors'"
40+
)
3441

35-
@patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get')
42+
@patch("odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get")
3643
def test_list_voxel_document_filenames(self, mock_get):
3744
mock_get.return_value.status_code = 200
38-
mock_get.return_value.content = b'test1.xml\ntest2.xml\n'
39-
filenames = self.mixin._list_voxel_document_filenames('Outbox', self.company)
40-
self.assertEqual(filenames, ['test1.xml', 'test2.xml'], "Filenames should match the expected list")
45+
mock_get.return_value.content = b"test1.xml\ntest2.xml\n"
46+
filenames = self.mixin._list_voxel_document_filenames("Outbox", self.company)
47+
self.assertEqual(
48+
filenames,
49+
["test1.xml", "test2.xml"],
50+
"Filenames should match the expected list",
51+
)
4152

42-
@patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get')
53+
@patch("odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get")
4354
def test_read_voxel_document(self, mock_get):
4455
mock_get.return_value.status_code = 200
45-
mock_get.return_value.content = b'<xml></xml>'
46-
content = self.mixin._read_voxel_document('Inbox', self.company, 'test.xml')
47-
self.assertEqual(content, '<xml></xml>', "Content should match the expected XML")
56+
mock_get.return_value.content = b"<xml></xml>"
57+
content = self.mixin._read_voxel_document("Inbox", self.company, "test.xml")
58+
self.assertEqual(
59+
content, "<xml></xml>", "Content should match the expected XML"
60+
)
4861

49-
@patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.delete')
62+
@patch("odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.delete")
5063
def test_delete_voxel_document(self, mock_delete):
5164
mock_delete.return_value.status_code = 200
52-
self.mixin._delete_voxel_document('Inbox', 'test.xml', self.company)
65+
self.mixin._delete_voxel_document("Inbox", "test.xml", self.company)
5366
mock_delete.assert_called_once()
5467

5568
def test_get_voxel_filename(self):
56-
self.mixin.get_document_type = MagicMock(return_value='INV')
69+
self.mixin.get_document_type = MagicMock(return_value="INV")
5770
filename = self.mixin._get_voxel_filename()
58-
self.assertTrue(filename.startswith('INV_'), "Filename should start with 'INV_'")
59-
self.assertTrue(filename.endswith('.xml'), "Filename should end with '.xml'")
71+
self.assertTrue(
72+
filename.startswith("INV_"), "Filename should start with 'INV_'"
73+
)
74+
self.assertTrue(filename.endswith(".xml"), "Filename should end with '.xml'")
6075

6176
def test_cancel_voxel_jobs(self):
62-
job = self.env['queue.job'].create({
63-
'name': 'Test Job',
64-
'state': 'pending',
65-
})
77+
job = self.env["queue.job"].create(
78+
{
79+
"name": "Test Job",
80+
"state": "pending",
81+
}
82+
)
6683
self.mixin.voxel_job_ids = [(4, job.id)]
6784
self.mixin._cancel_voxel_jobs()
68-
self.assertEqual(self.mixin.voxel_state, 'cancelled', "Voxel state should be 'cancelled'")
85+
self.assertEqual(
86+
self.mixin.voxel_state, "cancelled", "Voxel state should be 'cancelled'"
87+
)
6988
self.assertFalse(job.exists(), "Job should be unlinked")

0 commit comments

Comments
 (0)