# -*- coding: utf-8 -*- from odoo.tests.common import TransactionCase, tagged @tagged('post_install', '-at_install') class TestServiceApiKey(TransactionCase): def setUp(self): super().setUp() self.Service = self.env['fusion.billing.service'].sudo() self.service = self.Service.create({'name': 'NexaCloud', 'code': 'nexacloud'}) def test_generate_and_match_api_key(self): raw = self.service.action_generate_api_key() self.assertTrue(raw and len(raw) >= 20) self.assertTrue(self.service.api_key_hash) self.assertNotEqual(raw, self.service.api_key_hash) # only the hash is stored matched = self.Service._match_api_key(raw) self.assertEqual(matched, self.service) def test_match_api_key_rejects_unknown_and_inactive(self): raw = self.service.action_generate_api_key() self.assertFalse(self.Service._match_api_key('nope-not-a-key')) self.service.active = False self.assertFalse(self.Service._match_api_key(raw)) @tagged('post_install', '-at_install') class TestIdentityResolution(TransactionCase): def setUp(self): super().setUp() self.service = self.env['fusion.billing.service'].sudo().create( {'name': 'NexaDesk', 'code': 'nexadesk'}) self.Link = self.env['fusion.billing.account.link'].sudo() def test_creates_partner_first_time(self): link = self.Link._resolve_or_create_partner( self.service, external_id='tenant-1', name='Acme Inc', email='ar@acme.test') self.assertTrue(link.partner_id) self.assertEqual(link.partner_id.name, 'Acme Inc') self.assertEqual(link.external_id, 'tenant-1') def test_idempotent_same_external_id(self): a = self.Link._resolve_or_create_partner(self.service, 'tenant-1', 'Acme', 'ar@acme.test') b = self.Link._resolve_or_create_partner(self.service, 'tenant-1', 'Acme Renamed', 'ar@acme.test') self.assertEqual(a, b) # same link row self.assertEqual(a.partner_id, b.partner_id) # same partner def test_reuses_partner_by_email_across_services(self): other = self.env['fusion.billing.service'].sudo().create({'name': 'Maps', 'code': 'nexamaps'}) a = self.Link._resolve_or_create_partner(self.service, 'tenant-1', 'Acme', 'ar@acme.test') b = self.Link._resolve_or_create_partner(other, 'client-9', 'Acme', 'ar@acme.test') self.assertEqual(a.partner_id, b.partner_id) # one unified customer self.assertNotEqual(a, b) # but distinct link rows