from datetime import timedelta from odoo import fields from odoo.tests.common import TransactionCase, tagged @tagged('post_install', '-at_install') class TestInterac(TransactionCase): def setUp(self): super().setUp() self.provider = self.env.ref('community_interac.payment_provider_interac') self.provider.write({ 'interac_recipient_email': 'payments@example.org', 'state': 'test', 'interac_deadline_hours': 48, }) self.method = self.env.ref('community_interac.payment_method_interac') self.partner = self.env['res.partner'].create({'name': 'Interac Payer', 'email': 'payer@example.com'}) def _create_transaction(self): return self.env['payment.transaction'].create({ 'provider_id': self.provider.id, 'payment_method_id': self.method.id, 'amount': 100.0, 'currency_id': self.env.company.currency_id.id, 'partner_id': self.partner.id, 'reference': self.env['payment.transaction']._compute_reference('interac'), }) def test_select_sets_pending_and_sends_instructions(self): tx = self._create_transaction() mail_count_before = self.env['mail.mail'].search_count([]) tx._apply_updates({}) self.assertEqual(tx.state, 'pending') mail_count_after = self.env['mail.mail'].search_count([]) self.assertGreater(mail_count_after, mail_count_before) def test_confirm_sets_done(self): tx = self._create_transaction() tx._apply_updates({}) self.assertEqual(tx.state, 'pending') tx.action_confirm_interac_payment() self.assertEqual(tx.state, 'done') def test_auto_cancel_after_deadline(self): tx = self._create_transaction() tx._apply_updates({}) tx.last_state_change = fields.Datetime.now() - timedelta(hours=49) mail_count_before = self.env['mail.mail'].search_count([]) self.env['payment.transaction']._cron_auto_cancel_interac() self.assertEqual(tx.state, 'cancel') mail_count_after = self.env['mail.mail'].search_count([]) self.assertGreater(mail_count_after, mail_count_before) def test_not_yet_due_is_not_cancelled(self): tx = self._create_transaction() tx._apply_updates({}) tx.last_state_change = fields.Datetime.now() - timedelta(hours=1) self.env['payment.transaction']._cron_auto_cancel_interac() self.assertEqual(tx.state, 'pending')