56 lines
2.5 KiB
Python
56 lines
2.5 KiB
Python
# -*- 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
|