Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:50:04 +08:00
commit 3e809e35ad
41 changed files with 10010 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
# -*- coding: utf-8 -*-
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError, ValidationError
class TestModelName(TransactionCase):
"""Test cases for model.name functionality."""
def setUp(self):
"""Set up test data."""
super().setUp()
self.Model = self.env['model.name']
# Use existing records when possible
self.partner = self.env['res.partner'].search([], limit=1)
if not self.partner:
self.skipTest("No partner available for testing")
# Or create with .sudo()
self.test_partner = self.env['res.partner'].sudo().create({
'name': 'Test Partner',
'is_company': True,
})
def test_01_create_record(self):
"""Test creating a new record with valid data."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
# Add other required fields
})
self.assertTrue(record)
self.assertEqual(record.name, 'Test Record')
self.assertEqual(record.state, 'draft') # Adjust as needed
def test_02_update_record(self):
"""Test updating an existing record."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
})
# Update record
record.write({
'name': 'Updated Record',
})
self.assertEqual(record.name, 'Updated Record')
def test_03_search_records(self):
"""Test searching for records."""
# Create test records
self.Model.create({
'name': 'Record A',
'partner_id': self.partner.id,
})
self.Model.create({
'name': 'Record B',
'partner_id': self.partner.id,
})
# Search for records
records = self.Model.search([('partner_id', '=', self.partner.id)])
self.assertGreaterEqual(len(records), 2)
def test_04_computed_field(self):
"""Test computed field calculation."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
'quantity': 10,
'unit_price': 5.0,
})
# Test computed total
self.assertEqual(record.total_amount, 50.0)
# Update dependency and verify recomputation
record.write({'quantity': 20})
self.assertEqual(record.total_amount, 100.0)
def test_05_onchange_method(self):
"""Test onchange method behavior."""
record = self.Model.new({
'name': 'Test Record',
})
# Trigger onchange
record.partner_id = self.partner
record._onchange_partner_id()
# Verify onchange updated fields
# self.assertEqual(record.some_field, expected_value)
def test_06_constraint_validation(self):
"""Test constraint validation."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
})
# Test that invalid value raises ValidationError
with self.assertRaises(ValidationError) as context:
record.write({'invalid_field': 'invalid_value'})
# Verify error message
self.assertIn('expected error message', str(context.exception))
def test_07_state_transition(self):
"""Test state transition workflow."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
})
# Initially in draft state
self.assertEqual(record.state, 'draft')
# Confirm record
record.action_confirm()
self.assertEqual(record.state, 'confirmed')
# Test invalid transition
with self.assertRaises(UserError) as context:
record.action_confirm() # Already confirmed
self.assertIn('Cannot confirm', str(context.exception))
def test_08_delete_record(self):
"""Test deleting a record (if applicable)."""
record = self.Model.create({
'name': 'Test Record',
'partner_id': self.partner.id,
})
record_id = record.id
# Delete record
record.unlink()
# Verify record no longer exists
self.assertFalse(self.Model.browse(record_id).exists())