|
| 1 | +# Copyright 2019 Tecnativa - Ernesto Tejeda |
| 2 | +# Copyright 2025 Guavana - Leonardo J. Caballero G. |
| 3 | +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
| 4 | + |
| 5 | +from odoo.tests.common import TransactionCase |
| 6 | +from unittest.mock import patch, MagicMock |
| 7 | +from datetime import datetime, timedelta |
| 8 | + |
| 9 | +class TestVoxelMixin(TransactionCase): |
| 10 | + |
| 11 | + def setUp(self): |
| 12 | + 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 | + }) |
| 21 | + |
| 22 | + @patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put') |
| 23 | + def test_send_voxel_report_success(self, mock_put): |
| 24 | + 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'") |
| 27 | + |
| 28 | + @patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.put') |
| 29 | + def test_send_voxel_report_failure(self, mock_put): |
| 30 | + 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'") |
| 34 | + |
| 35 | + @patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get') |
| 36 | + def test_list_voxel_document_filenames(self, mock_get): |
| 37 | + 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") |
| 41 | + |
| 42 | + @patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.get') |
| 43 | + def test_read_voxel_document(self, mock_get): |
| 44 | + 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") |
| 48 | + |
| 49 | + @patch('odoo.addons.edi_voxel_oca.models.voxel_mixin.requests.delete') |
| 50 | + def test_delete_voxel_document(self, mock_delete): |
| 51 | + mock_delete.return_value.status_code = 200 |
| 52 | + self.mixin._delete_voxel_document('Inbox', 'test.xml', self.company) |
| 53 | + mock_delete.assert_called_once() |
| 54 | + |
| 55 | + def test_get_voxel_filename(self): |
| 56 | + self.mixin.get_document_type = MagicMock(return_value='INV') |
| 57 | + 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'") |
| 60 | + |
| 61 | + def test_cancel_voxel_jobs(self): |
| 62 | + job = self.env['queue.job'].create({ |
| 63 | + 'name': 'Test Job', |
| 64 | + 'state': 'pending', |
| 65 | + }) |
| 66 | + self.mixin.voxel_job_ids = [(4, job.id)] |
| 67 | + self.mixin._cancel_voxel_jobs() |
| 68 | + self.assertEqual(self.mixin.voxel_state, 'cancelled', "Voxel state should be 'cancelled'") |
| 69 | + self.assertFalse(job.exists(), "Job should be unlinked") |
0 commit comments