# -*- coding: utf-8 -*- import base64 from odoo.tests.common import TransactionCase, tagged PDF_MAGIC = b'%PDF-1.4\n%fake pdf for tests' def _b64_pdf(): return base64.b64encode(PDF_MAGIC) @tagged('-at_install', 'post_install', 'fusion_claims') class TestSignedPagesGate(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.partner = cls.env['res.partner'].create({'name': 'Test Client'}) cls.order = cls.env['sale.order'].create({ 'partner_id': cls.partner.id, 'x_fc_adp_application_status': 'waiting_for_application', }) def test_pages_11_12_in_original_defaults_false(self): self.assertFalse(self.order.x_fc_pages_11_12_in_original) def test_has_signed_pages_false_when_nothing_set(self): self.assertFalse(self.order.x_fc_has_signed_pages_11_12) def test_has_signed_pages_true_when_bundled_flag_set(self): self.order.x_fc_pages_11_12_in_original = True self.order.flush_recordset() self.assertTrue(self.order.x_fc_has_signed_pages_11_12) def test_has_signed_pages_true_when_separate_file_uploaded(self): self.order.x_fc_signed_pages_11_12 = _b64_pdf() self.order.flush_recordset() self.assertTrue(self.order.x_fc_has_signed_pages_11_12) def test_has_signed_pages_true_when_remote_request_signed(self): self.env['fusion.page11.sign.request'].create({ 'sale_order_id': self.order.id, 'signer_email': 'test@example.com', 'signer_type': 'client', 'state': 'signed', }) self.order.invalidate_recordset() self.assertTrue(self.order.x_fc_has_signed_pages_11_12) def test_has_signed_pages_false_when_remote_request_only_sent(self): self.env['fusion.page11.sign.request'].create({ 'sale_order_id': self.order.id, 'signer_email': 'test@example.com', 'signer_type': 'client', 'state': 'sent', }) self.order.invalidate_recordset() self.assertFalse(self.order.x_fc_has_signed_pages_11_12) def test_trail_has_signed_pages_true_when_bundled(self): self.order.x_fc_pages_11_12_in_original = True self.order.flush_recordset() self.assertTrue(self.order.x_fc_trail_has_signed_pages) def test_trail_has_signed_pages_false_when_nothing(self): self.assertFalse(self.order.x_fc_trail_has_signed_pages) def test_trail_has_signed_pages_true_when_separate_file(self): self.order.x_fc_signed_pages_11_12 = _b64_pdf() self.order.flush_recordset() self.assertTrue(self.order.x_fc_trail_has_signed_pages) def test_ready_for_submission_passes_with_bundled_flag_only(self): """Ready-for-submission gate passes when bundled flag is True even without a separate signed-pages file.""" self.order.write({ 'x_fc_adp_application_status': 'application_received', 'x_fc_original_application': _b64_pdf(), 'x_fc_original_application_filename': 'app.pdf', 'x_fc_pages_11_12_in_original': True, 'x_fc_client_ref_1': 'JODO', 'x_fc_client_ref_2': '1234', 'x_fc_reason_for_application': 'first_access', }) self.order.flush_recordset() wizard = self.env['fusion_claims.ready.for.submission.wizard'].with_context( active_id=self.order.id, active_model='sale.order', ).create({ 'sale_order_id': self.order.id, 'claim_authorization_date': '2026-05-01', }) wizard.action_confirm() self.assertEqual(self.order.x_fc_adp_application_status, 'ready_submission') def test_case_close_audit_accepts_bundled_flag(self): """Case-close audit treats bundled flag as 'signed pages present'.""" self.order.x_fc_pages_11_12_in_original = True self.order.flush_recordset() wizard = self.env['fusion_claims.case.close.verification.wizard'].with_context( active_id=self.order.id, active_model='sale.order', ).create({ 'sale_order_id': self.order.id, }) self.assertTrue(wizard.has_signed_pages)