from odoo.tests.common import TransactionCase, tagged @tagged('post_install', '-at_install') class TestTncscDeployment(TransactionCase): def setUp(self): super().setUp() # Deterministic setup for testing: this Odoo build's own chart- # template auto-install can race with post_init_hook's call to this # same method within the install transaction (see # models/res_company.py) - calling it again here, synchronously, # from the test's own transaction avoids the test suite being # sensitive to that race. The method is idempotent either way. self.env.company._tncsc_setup_accounting() def test_branding_config_seeded(self): get_param = self.env['ir.config_parameter'].sudo().get_param self.assertEqual(get_param('community_theme_base.primary_color'), '#05091E') self.assertEqual(get_param('community_theme_base.secondary_color'), '#F97316') self.assertEqual(get_param('community_theme_base.accent_color'), '#0EA5FF') def test_membership_settings_seeded(self): get_param = self.env['ir.config_parameter'].sudo().get_param self.assertEqual(get_param('community_membership.org_name'), 'Tamil Nadu Cultural Society of Canada') self.assertEqual(get_param('community_membership.member_id_format'), 'TNCSC-{year}-{seq}') def test_five_membership_tiers_seeded(self): tiers = self.env['community.membership.tier'].search([]) self.assertEqual(len(tiers), 5) by_code = {tier.code: tier for tier in tiers} self.assertEqual(by_code['IND'].price, 50.0) self.assertEqual(by_code['FAM'].price, 80.0) self.assertEqual(by_code['STU'].price, 20.0) self.assertEqual(by_code['SEN'].price, 30.0) self.assertEqual(by_code['LIFE'].price, 500.0) for tier in tiers: self.assertEqual(tier.currency_id.name, 'CAD') self.assertTrue(tier.product_id, "Every seeded tier should still auto-create its product") def test_chart_of_accounts_loaded(self): company = self.env.company self.assertEqual(company.currency_id.name, 'CAD') self.assertEqual(company.country_id.code, 'CA') # The Canadian template seeds thousands of accounts; a small sanity count is enough. account_count = self.env['account.account'].search_count([('company_ids', 'in', company.id)]) self.assertGreater(account_count, 100) def test_custom_nonprofit_accounts_created(self): Account = self.env['account.account'] names = {'Membership Dues Revenue', 'Event Revenue', 'Sponsorship Revenue', 'School Fees Revenue', 'Donations Revenue', 'Deferred Event Revenue', 'Stripe Clearing Account'} for name in names: account = Account.search([('name', '=', name)], limit=1) self.assertTrue(account, f"Expected custom account '{name}' to exist") def test_donations_journal_created(self): journal = self.env['account.journal'].search([('code', '=', 'DON')], limit=1) self.assertTrue(journal) self.assertEqual(journal.type, 'sale') def test_membership_tier_products_use_dues_account(self): dues_account = self.env['account.account'].search([('name', '=', 'Membership Dues Revenue')], limit=1) tiers = self.env['community.membership.tier'].search([]) for tier in tiers: self.assertEqual(tier.product_id.property_account_income_id, dues_account) def test_website_pages_published(self): for url in ('/', '/about', '/tamil-school', '/sponsors', '/contact'): page = self.env['website.page'].search([('url', '=', url)], limit=1) self.assertTrue(page, f"Expected a website.page for {url}") self.assertTrue(page.is_published) def test_tncsc_role_groups_exist_and_imply_product_groups(self): board_admin = self.env.ref('tncsc_deployment.group_tncsc_board_admin') self.assertIn( self.env.ref('community_membership.group_membership_manager'), board_admin.implied_ids, ) treasurer = self.env.ref('tncsc_deployment.group_tncsc_treasurer') self.assertIn( self.env.ref('community_interac.group_interac_verifier'), treasurer.implied_ids, )