feat: 统一 Client 发布产物命名 (#102)
This commit is contained in:
@@ -16,7 +16,11 @@ from build_tools.launcher import (
|
||||
install_root,
|
||||
is_main_program_running,
|
||||
)
|
||||
from build_tools.release_manifest import MANIFEST_FILE_NAME, write_manifest
|
||||
from build_tools.release_manifest import (
|
||||
MANIFEST_FILE_NAME,
|
||||
versioned_manifest_file_name,
|
||||
write_manifest,
|
||||
)
|
||||
from src.db import data_dir
|
||||
|
||||
|
||||
@@ -140,15 +144,15 @@ class ReleaseManifestTest(unittest.TestCase):
|
||||
def test_manifest_name_and_hash_match_release_files(self):
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
root = Path(directory)
|
||||
update_zip = root / "CMAutoBuy-0.1.0-update.zip"
|
||||
portable_zip = root / "CMAutoBuy-0.1.0-portable.zip"
|
||||
update_zip = root / "CMAutoBuy_0.1.0.zip"
|
||||
portable_zip = root / "自动采集采购工具_0.1.0.zip"
|
||||
update_zip.write_bytes(b"update")
|
||||
portable_zip.write_bytes(b"portable")
|
||||
output = root / MANIFEST_FILE_NAME
|
||||
|
||||
write_manifest("0.1.0", update_zip, portable_zip, output)
|
||||
|
||||
self.assertEqual(output.name, "autobuy——manifest.json")
|
||||
self.assertEqual(output.name, "autobuy_manifest.json")
|
||||
manifest = json.loads(output.read_text(encoding="utf-8"))
|
||||
self.assertEqual(manifest["version"], "0.1.0")
|
||||
self.assertEqual(manifest["update"]["size"], len(b"update"))
|
||||
@@ -158,6 +162,14 @@ class ReleaseManifestTest(unittest.TestCase):
|
||||
)
|
||||
self.assertEqual(manifest["portable"]["file"], portable_zip.name)
|
||||
|
||||
def test_versioned_manifest_name_is_stable_and_validated(self):
|
||||
self.assertEqual(
|
||||
versioned_manifest_file_name("0.1.0"),
|
||||
"autobuy_manifest_0.1.0.json",
|
||||
)
|
||||
with self.assertRaises(ValueError):
|
||||
versioned_manifest_file_name("../latest")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -12,6 +12,7 @@ from pathlib import Path
|
||||
|
||||
from src.update_service import (
|
||||
DEFAULT_UPDATE_MANIFEST_URL,
|
||||
LEGACY_DEFAULT_UPDATE_MANIFEST_URL,
|
||||
UnsafeUpdateArchiveError,
|
||||
UpdateConfigurationError,
|
||||
UpdateIntegrityError,
|
||||
@@ -153,9 +154,9 @@ class UpdateServiceTest(unittest.TestCase):
|
||||
)
|
||||
self.assertNotIn("unit-test-password", repr(credentials))
|
||||
|
||||
def test_default_unicode_manifest_path_is_encoded_for_http_request(self):
|
||||
def test_legacy_unicode_manifest_path_is_encoded_for_http_request(self):
|
||||
request = UpdateService._make_request(
|
||||
DEFAULT_UPDATE_MANIFEST_URL,
|
||||
LEGACY_DEFAULT_UPDATE_MANIFEST_URL,
|
||||
UpdateCredentials("release-reader", "unit-test-password"),
|
||||
)
|
||||
|
||||
@@ -257,7 +258,7 @@ class UpdateServiceTest(unittest.TestCase):
|
||||
health = json.loads(
|
||||
(self.update_directory / "healthy.json").read_text(encoding="utf-8")
|
||||
)
|
||||
self.assertEqual(health["version"], "0.2.1")
|
||||
self.assertEqual(health["version"], "0.2.2")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -19,6 +19,7 @@ from src.settings_ui import SettingsPage
|
||||
from src.update_service import (
|
||||
DEFAULT_UPDATE_MANIFEST_URL,
|
||||
DEFAULT_UPDATE_USERNAME,
|
||||
LEGACY_DEFAULT_UPDATE_MANIFEST_URL,
|
||||
UPDATE_MANIFEST_SETTING,
|
||||
UPDATE_USERNAME_SETTING,
|
||||
UpdateCheckResult,
|
||||
@@ -46,7 +47,7 @@ class FakeCredentialStore:
|
||||
|
||||
class FakeUpdateService:
|
||||
def __init__(self, result=None, delay=0.0, download_error=None):
|
||||
self.result = result or UpdateCheckResult("0.2.1", "0.2.1", False)
|
||||
self.result = result or UpdateCheckResult("0.2.2", "0.2.2", False)
|
||||
self.delay = delay
|
||||
self.download_error = download_error
|
||||
self.check_count = 0
|
||||
@@ -57,7 +58,7 @@ class FakeUpdateService:
|
||||
def check(
|
||||
self,
|
||||
manifest_url,
|
||||
current_version="0.2.1",
|
||||
current_version="0.2.2",
|
||||
is_cancelled=None,
|
||||
credentials=None,
|
||||
):
|
||||
@@ -141,7 +142,7 @@ class UpdateUiEventTest(unittest.TestCase):
|
||||
def test_update_card_uses_safe_defaults_and_password_input(self):
|
||||
page = self._page(FakeUpdateService())
|
||||
|
||||
self.assertEqual(page.currentVersionLabel.text(), "0.2.1")
|
||||
self.assertEqual(page.currentVersionLabel.text(), "0.2.2")
|
||||
self.assertEqual(
|
||||
page.updateManifestUrlInput.text(), DEFAULT_UPDATE_MANIFEST_URL
|
||||
)
|
||||
@@ -257,6 +258,51 @@ class UpdateUiEventTest(unittest.TestCase):
|
||||
page.eventBinder.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_legacy_default_manifest_url_is_migrated_before_auto_check(self):
|
||||
self.repository.set_many(
|
||||
{
|
||||
UPDATE_MANIFEST_SETTING: LEGACY_DEFAULT_UPDATE_MANIFEST_URL,
|
||||
UPDATE_USERNAME_SETTING: TEST_USERNAME,
|
||||
}
|
||||
)
|
||||
store = FakeCredentialStore((TEST_USERNAME, TEST_PASSWORD))
|
||||
service = FakeUpdateService()
|
||||
|
||||
page = self._page(service, store)
|
||||
self._wait_until(lambda: service.check_count == 1)
|
||||
self._wait_until(
|
||||
lambda: page.eventBinder.updateEventBinder._check_thread is None
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
self.repository.get(UPDATE_MANIFEST_SETTING),
|
||||
DEFAULT_UPDATE_MANIFEST_URL,
|
||||
)
|
||||
self.assertEqual(service.manifest_url, DEFAULT_UPDATE_MANIFEST_URL)
|
||||
page.eventBinder.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_custom_manifest_url_is_not_migrated(self):
|
||||
self.repository.set_many(
|
||||
{
|
||||
UPDATE_MANIFEST_SETTING: MANIFEST_URL,
|
||||
UPDATE_USERNAME_SETTING: TEST_USERNAME,
|
||||
}
|
||||
)
|
||||
store = FakeCredentialStore((TEST_USERNAME, TEST_PASSWORD))
|
||||
service = FakeUpdateService()
|
||||
|
||||
page = self._page(service, store)
|
||||
self._wait_until(lambda: service.check_count == 1)
|
||||
self._wait_until(
|
||||
lambda: page.eventBinder.updateEventBinder._check_thread is None
|
||||
)
|
||||
|
||||
self.assertEqual(self.repository.get(UPDATE_MANIFEST_SETTING), MANIFEST_URL)
|
||||
self.assertEqual(service.manifest_url, MANIFEST_URL)
|
||||
page.eventBinder.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_confirmed_new_version_downloads_with_saved_credentials(self):
|
||||
update = UpdateInfo(
|
||||
version="0.3.0",
|
||||
@@ -267,7 +313,7 @@ class UpdateUiEventTest(unittest.TestCase):
|
||||
sha256="0" * 64,
|
||||
)
|
||||
service = FakeUpdateService(
|
||||
UpdateCheckResult("0.2.1", "0.3.0", True, update)
|
||||
UpdateCheckResult("0.2.2", "0.3.0", True, update)
|
||||
)
|
||||
page = self._page(service)
|
||||
self._save_configuration(page)
|
||||
|
||||
Reference in New Issue
Block a user