The signed-pages verification step on case close now treats the bundled flag as 'pages present', matching the ready-for-submission gate and the audit trail. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
109 lines
4.1 KiB
Python
109 lines
4.1 KiB
Python
# -*- 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)
|