# -*- coding: utf-8 -*- from odoo.tests.common import HttpCase, tagged @tagged('-at_install', 'post_install', 'fusion_clock') class TestNfcKioskController(HttpCase): @classmethod def setUpClass(cls): super().setUpClass() cls.ICP = cls.env['ir.config_parameter'].sudo() cls.location = cls.env['fusion.clock.location'].create({ 'name': 'Test Plant', 'latitude': 43.65, 'longitude': -79.38, 'radius': 100, }) cls.env.company.x_fclk_nfc_kiosk_location_id = cls.location.id cls.kiosk_user = cls.env['res.users'].create({ 'name': 'NFC Kiosk User', 'login': 'nfc-kiosk-test', 'password': 'kioskpass123', 'group_ids': [(4, cls.env.ref('fusion_clock.group_fusion_clock_manager').id)], }) def test_kiosk_page_redirects_when_disabled(self): self.ICP.set_param('fusion_clock.enable_nfc_kiosk', 'False') self.authenticate('nfc-kiosk-test', 'kioskpass123') response = self.url_open('/fusion_clock/kiosk/nfc', allow_redirects=False) self.assertIn(response.status_code, (301, 302, 303)) def test_kiosk_page_renders_when_enabled(self): self.ICP.set_param('fusion_clock.enable_nfc_kiosk', 'True') self.authenticate('nfc-kiosk-test', 'kioskpass123') response = self.url_open('/fusion_clock/kiosk/nfc') self.assertEqual(response.status_code, 200) self.assertIn('NFC Clock Kiosk', response.text) from odoo.tests.common import TransactionCase from odoo.addons.fusion_clock.controllers.clock_nfc_kiosk import FusionClockNfcKiosk @tagged('-at_install', 'post_install', 'fusion_clock') class TestUidNormalization(TransactionCase): def test_lowercase_input_uppercased(self): self.assertEqual( FusionClockNfcKiosk._normalize_uid('04:a2:b5:62:c1:80'), '04:A2:B5:62:C1:80', ) def test_no_separator_input_gets_colons(self): self.assertEqual( FusionClockNfcKiosk._normalize_uid('04A2B562C180'), '04:A2:B5:62:C1:80', ) def test_dash_separator_replaced(self): self.assertEqual( FusionClockNfcKiosk._normalize_uid('04-A2-B5-62-C1-80'), '04:A2:B5:62:C1:80', ) def test_whitespace_stripped(self): self.assertEqual( FusionClockNfcKiosk._normalize_uid(' 04:A2:B5:62:C1:80 '), '04:A2:B5:62:C1:80', ) def test_empty_input_returns_none(self): self.assertIsNone(FusionClockNfcKiosk._normalize_uid('')) self.assertIsNone(FusionClockNfcKiosk._normalize_uid(None)) def test_invalid_chars_returns_none(self): self.assertIsNone(FusionClockNfcKiosk._normalize_uid('not-a-uid')) self.assertIsNone(FusionClockNfcKiosk._normalize_uid('04:A2:ZZ:62:C1:80')) def test_odd_length_returns_none(self): self.assertIsNone(FusionClockNfcKiosk._normalize_uid('04A2B562C18'))