Provides make_bank_journal, make_bank_statement, make_bank_line, make_invoice, make_vendor_bill, make_suggestion, make_pattern, make_precedent, make_reconcileable_pair helpers used across the bank-rec test suite. Replaces the original plan's SQL-fixture capture with programmatic factories — same testing intent, simpler maintenance, no real Westin data baked into the repo. Note: the original plan called for 5 SQL fixtures captured from the local DB (westin_simple_match.sql, westin_partial_chain.sql, etc.). Those are replaced by factory-driven test creation in Task 19 — eliminates fragile hand-curated SQL while testing the same code paths. Made-with: Cursor
75 lines
3.3 KiB
Python
75 lines
3.3 KiB
Python
"""Smoke tests verifying the factories produce usable records.
|
|
|
|
Not testing factory correctness exhaustively — just that each helper
|
|
returns a record of the expected type with the expected basic state."""
|
|
|
|
from odoo.tests.common import TransactionCase, tagged
|
|
|
|
from . import _factories as f
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestFactories(TransactionCase):
|
|
|
|
def test_make_bank_journal(self):
|
|
journal = f.make_bank_journal(self.env)
|
|
self.assertEqual(journal._name, 'account.journal')
|
|
self.assertEqual(journal.type, 'bank')
|
|
|
|
def test_make_bank_statement(self):
|
|
statement = f.make_bank_statement(self.env)
|
|
self.assertEqual(statement._name, 'account.bank.statement')
|
|
self.assertTrue(statement.journal_id)
|
|
|
|
def test_make_bank_line(self):
|
|
line = f.make_bank_line(self.env, amount=250.00, memo='Smoke memo')
|
|
self.assertEqual(line._name, 'account.bank.statement.line')
|
|
self.assertEqual(line.amount, 250.00)
|
|
self.assertEqual(line.payment_ref, 'Smoke memo')
|
|
self.assertFalse(line.is_reconciled)
|
|
|
|
def test_make_bank_line_with_partner(self):
|
|
partner = self.env['res.partner'].create({'name': 'Factory Partner'})
|
|
line = f.make_bank_line(self.env, partner=partner, amount=500)
|
|
self.assertEqual(line.partner_id, partner)
|
|
|
|
def test_make_invoice_posted(self):
|
|
partner = self.env['res.partner'].create({'name': 'Invoice Partner'})
|
|
invoice = f.make_invoice(self.env, partner=partner, amount=300)
|
|
self.assertEqual(invoice._name, 'account.move')
|
|
self.assertEqual(invoice.move_type, 'out_invoice')
|
|
self.assertEqual(invoice.state, 'posted')
|
|
self.assertAlmostEqual(invoice.amount_total, 300, places=2)
|
|
|
|
def test_make_vendor_bill_posted(self):
|
|
partner = self.env['res.partner'].create({'name': 'Vendor Partner'})
|
|
bill = f.make_vendor_bill(self.env, partner=partner, amount=400)
|
|
self.assertEqual(bill.move_type, 'in_invoice')
|
|
self.assertEqual(bill.state, 'posted')
|
|
|
|
def test_make_suggestion(self):
|
|
line = f.make_bank_line(self.env, amount=100)
|
|
sug = f.make_suggestion(self.env, statement_line=line, confidence=0.85)
|
|
self.assertEqual(sug._name, 'fusion.reconcile.suggestion')
|
|
self.assertEqual(sug.confidence, 0.85)
|
|
self.assertEqual(sug.state, 'pending')
|
|
|
|
def test_make_pattern(self):
|
|
partner = self.env['res.partner'].create({'name': 'Pattern Partner'})
|
|
pattern = f.make_pattern(self.env, partner=partner, reconcile_count=20)
|
|
self.assertEqual(pattern._name, 'fusion.reconcile.pattern')
|
|
self.assertEqual(pattern.reconcile_count, 20)
|
|
|
|
def test_make_precedent(self):
|
|
partner = self.env['res.partner'].create({'name': 'Precedent Partner'})
|
|
precedent = f.make_precedent(self.env, partner=partner, amount=999.99)
|
|
self.assertEqual(precedent._name, 'fusion.reconcile.precedent')
|
|
self.assertEqual(precedent.amount, 999.99)
|
|
self.assertEqual(precedent.source, 'manual')
|
|
|
|
def test_make_reconcileable_pair(self):
|
|
bank_line, recv_lines = f.make_reconcileable_pair(self.env, amount=750)
|
|
self.assertEqual(bank_line.amount, 750.00)
|
|
self.assertGreater(len(recv_lines), 0)
|
|
self.assertAlmostEqual(sum(recv_lines.mapped('amount_residual')), 750, places=2)
|