Add some tests for the update check

This commit is contained in:
Tobias Gruetzmacher 2019-12-05 22:23:48 +01:00
parent f5253c7f45
commit adb3db3d22
2 changed files with 35 additions and 8 deletions

View file

@ -7,7 +7,7 @@ from __future__ import absolute_import, division, print_function
import os import os
from distutils.version import StrictVersion from distutils.version import LooseVersion
import dosagelib import dosagelib
from dosagelib import configuration from dosagelib import configuration
@ -41,18 +41,20 @@ def check_update():
def get_online_version(): def get_online_version():
"""Download update info and parse it.""" """Download update info and parse it."""
page = http.default_session.get(UPDATE_URL).json() page = http.default_session.get(UPDATE_URL).json()
version, url = None, None version = page.get('tag_name', None)
version = page['tag_name']
if os.name == 'nt': if os.name == 'nt':
try:
url = next((x['browser_download_url'] for x in page['assets'] if url = next((x['browser_download_url'] for x in page['assets'] if
x['content_type'] == 'application/x-msdos-program'), x['content_type'] == 'application/x-msdos-program'),
configuration.Url) configuration.Url)
except KeyError:
url = None
else: else:
url = page['tarball_url'] url = page.get('tarball_url', None)
return version, url return version, url
def is_newer_version(version): def is_newer_version(version):
"""Check if given version is newer than current version.""" """Check if given version is newer than current version."""
return StrictVersion(version) > StrictVersion(dosagelib.__version__) return LooseVersion(version) > LooseVersion(dosagelib.__version__)

View file

@ -39,9 +39,34 @@ class TestDosage(object):
for option in ("-l", "--list", "--singlelist"): for option in ("-l", "--list", "--singlelist"):
cmd_ok(option) cmd_ok(option)
@responses.activate
def test_display_version(self): def test_display_version(self):
cmd_ok("--version") cmd_ok("--version")
@responses.activate
def test_update_available(self, capsys):
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
json={'tag_name': '9999.0', 'tarball_url': 'NOWHERE'})
cmd_ok('--version', '-v')
captured = capsys.readouterr()
assert 'A new version' in captured.out
@responses.activate
def test_no_update_available(self, capsys):
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
json={'tag_name': '1.0', 'tarball_url': 'NOWHERE'})
cmd_ok('--version', '-v')
captured = capsys.readouterr()
assert 'Detected local or development' in captured.out
@responses.activate
def test_update_broken(self, capsys):
responses.add(responses.GET, re.compile(r'https://api\.github\.com/'),
json={})
cmd_ok('--version', '-v')
captured = capsys.readouterr()
assert 'invalid update file' in captured.out
def test_display_help(self): def test_display_help(self):
for option in ("-h", "--help"): for option in ("-h", "--help"):
with pytest.raises(SystemExit): with pytest.raises(SystemExit):