Detect and reuse ESPHome wifi secrets in new screen wizard
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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'})
|
||||
Reference in New Issue
Block a user