Count occupied restarts as failed missions; sync published Workshop version
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-11-07 01:05:43 +01:00
parent 161100cf08
commit e421dcfc15
14 changed files with 640 additions and 50 deletions
+45
View File
@@ -2,6 +2,9 @@
import importlib.util
from pathlib import Path
import unittest
import json
import io
from unittest.mock import patch
ROOT = Path(__file__).resolve().parents[1]
spec = importlib.util.spec_from_file_location('workshop_changelog', ROOT / 'tools/workshop_changelog.py')
@@ -40,5 +43,47 @@ class WorkshopTests(unittest.TestCase):
tool.update_changelog(text, '0.0.109')
class PublishedLookupTests(unittest.TestCase):
def page(self, **overrides):
asset = dict(id='2528466DE220D91C', currentVersionNumber='0.0.147',
gameVersion='1.9.0.37', versions=[dict(version='0.0.147',
assetId='2528466DE220D91C', published=True, approved=True)])
asset.update(overrides)
return '<script id="__NEXT_DATA__" type="application/json">' + json.dumps(
{'props': {'pageProps': {'asset': asset}}}) + '</script>'
def test_public_version_is_not_game_or_bundle_version(self):
self.assertEqual(tool.online_version(self.page(), '2528466DE220D91C'), '0.0.147')
def test_wrong_asset_unpublished_and_ambiguous_pages_are_rejected(self):
cases = [self.page(id='1111111111111111'), self.page(versions=[]),
self.page(private=True), self.page(blocked=True),
self.page(currentVersionNumber='1.9.0.37'),
self.page(versions=[dict(version='0.0.147', assetId='2528466DE220D91C', published=False, approved=True)]),
self.page(versions=[dict(version='0.0.147', assetId='2528466DE220D91C', published=True, approved=False)]),
self.page() + self.page(), '<html>unavailable</html>']
for page in cases:
with self.subTest(page=page), self.assertRaises(ValueError):
tool.online_version(page, '2528466DE220D91C')
def test_stale_response_is_not_a_downgrade(self):
text = tool.update_changelog(TEXT, '0.0.146')
with self.assertRaises(ValueError):
tool.prevent_downgrade(text, '0.0.142')
tool.prevent_downgrade(text, '0.0.146')
tool.prevent_downgrade(text, '0.0.147')
tool.prevent_downgrade(tool.update_changelog(TEXT, '0.0.9'), '0.0.10')
def test_live_sync_validates_response_and_fails_closed(self):
with patch.object(tool.urllib.request, 'urlopen', return_value=io.BytesIO(self.page().encode())):
self.assertEqual(tool.sync_version(PROJECT, TEXT), '0.0.147')
with patch.object(tool.urllib.request, 'urlopen', side_effect=OSError('offline')):
with self.assertRaises(OSError):
tool.sync_version(PROJECT, TEXT)
with patch.object(tool.urllib.request, 'urlopen', return_value=io.BytesIO(self.page().encode())):
with self.assertRaises(ValueError):
tool.sync_version(PROJECT, tool.update_changelog(TEXT, '0.0.148'))
if __name__ == '__main__':
unittest.main()