Files
homeassistant_espscreen/tests/test_wifi_reuse.py
T

46 lines
2.3 KiB
Python

import json
import sys
import tempfile
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'screen_manager/app'))
from firmware import Firmware
class WifiReuse(unittest.TestCase):
def test_existing_wifi_reused_without_browser_values(self):
with tempfile.TemporaryDirectory() as tmp:
f = Firmware(tmp, tmp)
path = Path(tmp) / 'secrets.yaml'
original = '# keep comments\nwifi_ssid: example-private-network\nwifi_password: example-private-password\nother_secret: leave-me\n'
path.write_text(original)
self.assertEqual(f.wifi_status()['state'], 'ready')
self.assertNotIn('example-private', json.dumps(f.status()))
f.create({'board': 'guition', 'name': 'second-screen', 'friendly_name': 'Second'})
self.assertEqual(path.read_text(), original)
profile = f.profile('second-screen.yaml').read_text()
self.assertIn('ssid: !secret wifi_ssid', profile)
self.assertIn('password: !secret wifi_password', profile)
self.assertNotIn('example-private', profile)
def test_missing_keys_do_not_overwrite_existing_secrets(self):
with tempfile.TemporaryDirectory() as tmp:
f = Firmware(tmp, tmp)
path = Path(tmp) / 'secrets.yaml'
path.write_text('other: keep\n')
self.assertEqual(f.wifi_status()['state'], 'missing')
with self.assertRaises(ValueError):
f.create({'board': 'cyd', 'name': 'screen', 'friendly_name': 'Screen',
'wifi_ssid': 'replacement', 'wifi_password': 'replacement'})
self.assertEqual(path.read_text(), 'other: keep\n')
self.assertFalse((Path(tmp) / 'screen.yaml').exists())
def test_first_install_and_invalid_file(self):
with tempfile.TemporaryDirectory() as tmp:
f = Firmware(tmp, tmp)
self.assertEqual(f.wifi_status()['state'], 'new')
f.create({'board': 'cyd', 'name': 'screen', 'friendly_name': 'Screen',
'wifi_ssid': 'network', 'wifi_password': ''})
self.assertEqual(f.wifi_status()['state'], 'ready')
(Path(tmp) / 'secrets.yaml').write_text('wifi_ssid: [invalid')
self.assertEqual(f.wifi_status(), {'state': 'invalid'})