diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-21 09:58:40 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-21 09:58:40 +0200 |
| commit | 84b5fdef32db578d76a6128cf5f4b891a943d078 (patch) | |
| tree | c2fb6ab6bead48a78b5d01c7bc69fe8877c1251c /tests | |
| parent | 45c7a3f4ac550be4bb4cf4c3a7786dfbbff02859 (diff) | |
| download | sb-builder-84b5fdef32db578d76a6128cf5f4b891a943d078.tar.gz sb-builder-84b5fdef32db578d76a6128cf5f4b891a943d078.zip | |
Repository: parse the built package repo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_gui.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/test_gui.py b/tests/test_gui.py index 8ffb65d..44418ac 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -38,6 +38,7 @@ from sb_builder import VERSION, config # noqa: E402 from sb_builder import hints as hintlib # noqa: E402 from sb_builder import hints_tab # noqa: E402 from sb_builder import packages as pk # noqa: E402 +from sb_builder import repository as repo # noqa: E402 from sb_builder.mainwindow import MainWindow # noqa: E402 from sb_builder.remote import DOWN, MISSING, parse # noqa: E402 @@ -318,6 +319,77 @@ class UpgradeDotTest(unittest.TestCase): self.assertIsNone(upgrade_color(None, now)) +PACKAGES_TXT = """PACKAGES.TXT; Tue Oct 20 18:00:50 UTC 2026 + +PACKAGE NAME: foo-1.0-x86_64-2_tag.txz +PACKAGE MIRROR: https://packages.example.org/ +PACKAGE LOCATION: ./personal/foo +PACKAGE SIZE (compressed): 12 K +PACKAGE SIZE (uncompressed): 40 K +PACKAGE DESCRIPTION: +foo: foo (a test package) +foo: +foo: Does foo things. + +""" +CHANGELOG = """+--------------------------+ +Tue Oct 20 18:00:50 UTC 2026 +personal/foo/foo-1.0-x86_64-2_tag.txz: Updated for + version 1.0. +libraries/bar-baz/bar-baz-2.1-x86_64-1_tag.txz: Added. + + ++--------------------------+ +Mon Oct 19 19:07:30 UTC 2026 +personal/foo/foo-0.9-x86_64-1_tag.txz: Added version 0.9. +""" + + +def make_repo(root): + for rel, size in (("personal/foo/foo-1.0-x86_64-2_tag.txz", 2048), + ("libraries/bar-baz/bar-baz-2.1-x86_64-1_tag.txz", 1024)): + os.makedirs(os.path.join(root, os.path.dirname(rel)), exist_ok=True) + with open(os.path.join(root, rel), "wb") as f: + f.write(b"\0" * size) + os.makedirs(os.path.join(root, "personal/foo/notes")) # not a package + for name, text in (("PACKAGES.TXT", PACKAGES_TXT), ("ChangeLog.txt", CHANGELOG)): + with open(os.path.join(root, name), "w") as f: + f.write(text) + + +class RepositoryTest(unittest.TestCase): + def setUp(self): + self.root = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, self.root) + make_repo(self.root) + + def test_scan(self): + data = repo.scan(self.root) + self.assertEqual(data["published"], 1792519250) + rows = {r["name"]: r for r in data["rows"]} + foo, bar = rows["foo"], rows["bar-baz"] + self.assertEqual((foo["version"], foo["arch"], foo["build"], foo["category"]), + ("1.0", "x86_64", "2_tag", "personal")) + self.assertEqual((foo["size"], foo["usize"], foo["published"]), (2048, 40 * 1024, True)) + self.assertEqual(foo["desc"], "foo (a test package)\n\nDoes foo things.") + self.assertEqual(foo["log"], [(1792519250, "Updated for version 1.0."), + (1792436850, "Added version 0.9.")]) + self.assertEqual((bar["version"], bar["published"], bar["usize"], bar["desc"]), + ("2.1", False, None, "")) + self.assertEqual(bar["log"], [(1792519250, "Added.")]) + + def test_summary(self): + s = repo.summary(repo.scan(self.root)) + self.assertIn("2 packages", s) + self.assertIn("3.0 KiB on disk", s) + self.assertIn("1 personal · 0 pentesting · 1 upstream", s) + self.assertIn("1 unpublished", s) + + def test_missing(self): + with self.assertRaises(OSError): + repo.scan(os.path.join(self.root, "nope")) + + class SmokeTest(unittest.TestCase): def window(self, **answers): remote = FakeRemote({"version": ({"version": VERSION, "overlays": ["personal"]}, None), |
