from odoo.tests.common import TransactionCase, tagged from odoo.tools.convert import convert_file @tagged('post_install', '-at_install') class TestConfigSeed(TransactionCase): """Exercise the actual XML loader with settings saved before installation.""" SEEDS = { 'theme_data.xml': { 'community_theme_base.primary_color': '#05091E', 'community_theme_base.secondary_color': '#F97316', 'community_theme_base.accent_color': '#0EA5FF', 'community_theme_base.heading_font': 'Inter, sans-serif', 'community_theme_base.body_font': 'Inter, sans-serif', }, 'membership_data.xml': { 'community_membership.org_name': 'Tamil Nadu Cultural Society of Canada', 'community_membership.member_id_format': 'TNCSC-{year}-{seq}', 'community_membership.renewal_offsets': '30,14,7', }, } def _load(self, filename, mode='init'): convert_file(self.env, 'tncsc_deployment', f'data/{filename}', {}, mode=mode) def test_install_reuses_existing_parameters(self): params = self.env['ir.config_parameter'].sudo() for filename, expected in self.SEEDS.items(): original_ids = {} for key in expected: params.set_param(key, 'existing custom value') record = params.search([('key', '=', key)]) # Reproduce keys created through Settings, without seed XML IDs. self.env['ir.model.data'].search([ ('model', '=', 'ir.config_parameter'), ('res_id', '=', record.id), ('module', '=', 'tncsc_deployment'), ]).unlink() original_ids[key] = record.id self._load(filename) self._load(filename) for key, value in expected.items(): self.assertEqual(params.get_param(key), value) self.assertEqual(params.search([('key', '=', key)]).ids, [original_ids[key]]) def test_install_creates_missing_parameters(self): params = self.env['ir.config_parameter'].sudo() for filename, expected in self.SEEDS.items(): params.search([('key', 'in', list(expected))]).unlink() self._load(filename) for key, value in expected.items(): self.assertEqual(params.get_param(key), value) def test_upgrade_preserves_custom_parameters(self): params = self.env['ir.config_parameter'].sudo() for filename, expected in self.SEEDS.items(): for key in expected: params.set_param(key, 'administrator value') self._load(filename, mode='update') for key in expected: self.assertEqual(params.get_param(key), 'administrator value')