import os import tempfile import unittest from pathlib import Path from bfos.identity import identity_for, read_dealer_id, validate_dealer_id from bfos.preferences import load_preferences, save_dealer class IdentityContractTests(unittest.TestCase): def test_only_eight_digits_are_valid(self): self.assertTrue(validate_dealer_id("12345678")) for value in ("1234567", "123456789", "1234abcd", ""): self.assertFalse(validate_dealer_id(value)) def test_derived_identity_is_deterministic(self): self.assertEqual( identity_for("12345678"), { "dealer_id": "12345678", "username": "bf-12345678", "hostname": "bf-12345678", "device_id": "BF-12345678", "active_user": "bf-12345678", }, ) def test_preferences_use_write_once_dealer_file(self): with tempfile.TemporaryDirectory() as directory: path = Path(directory) / "dealer-id" os.environ["BF_DEALER_ID_FILE"] = str(path) try: self.assertEqual(save_dealer("12345678")["username"], "bf-12345678") self.assertEqual(read_dealer_id(path), "12345678") with self.assertRaises(PermissionError): save_dealer("87654321") self.assertEqual(load_preferences()["active_user"], "bf-12345678") finally: os.environ.pop("BF_DEALER_ID_FILE", None) if __name__ == "__main__": unittest.main()