diff options
Diffstat (limited to 'tests/test_remote.py')
| -rw-r--r-- | tests/test_remote.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test_remote.py b/tests/test_remote.py index 7288828..3ac584a 100644 --- a/tests/test_remote.py +++ b/tests/test_remote.py @@ -570,6 +570,57 @@ class PhantomTest(Base): sbb.KINDS["fix-current"](self.cfg, ["x"]) +class ConfigCommandsTest(Base): + def setUp(self): + super().setUp() + self.path = os.environ["SBB_CONFIG"] + with open(self.path) as f: + self.old = f.read() + + def set(self, text): + stdin = io.TextIOWrapper(io.BytesIO(text.encode())) + with mock.patch.object(sbb.sys, "stdin", stdin): + return self.run_main("config-set") + + def text(self): + with open(self.path) as f: + return f.read() + + def test_set_accepted(self): + new = self.old + 'overlays = ["a"]\n' + self.assertEqual(self.set(new), (0, {"ok": True})) + self.assertEqual(self.text(), new) + with open(self.path + ".bak") as f: + self.assertEqual(f.read(), self.old) + self.assertEqual(sbb.load_config()["overlays"], ["a"]) + + def test_set_refused(self): + for text, why in (("state_dir = \n", "config"), ("bogus = 1\n", "bogus: unknown key"), + ("state_dir = 1\n", "state_dir: expected str"), + ("[manifests]\nx = 1\n", "manifests: expected strings")): + rc, data = self.set(text) + self.assertEqual(rc, 1, text) + self.assertIn(why, data["error"]) + self.assertEqual(self.text(), self.old) + self.assertFalse(os.path.exists(self.path + ".bak")) + + def test_get(self): + self.assertEqual(self.run_main("config-get"), + (0, {"text": self.old, "defaults": sbb.DEFAULTS, "path": self.path})) + + def test_get_missing(self): + os.remove(self.path) + self.assertEqual(self.run_main("config-get")[1]["text"], "") + + def test_broken_config_can_be_read_and_fixed(self): + with open(self.path, "w") as f: + f.write("bogus = 1\n") + self.assertEqual(self.run_main("version")[0], 1) + self.assertEqual(self.run_main("config-get")[1]["text"], "bogus = 1\n") + self.assertEqual(self.set(self.old), (0, {"ok": True})) + self.assertEqual(self.run_main("version")[0], 0) + + class MainTest(Base): def test_unknown_command(self): rc, data = self.run_main("nope") |
