Skip to content

Commit 008ca57

Browse files
author
Dimitar Tasev
authored
Merge pull request #753 from mantidproject/671_welcome_screen
2 parents 822fbd0 + 8e1566d commit 008ca57

File tree

14 files changed

+583
-318
lines changed

14 files changed

+583
-318
lines changed

images/welcome_screen_background.png

200 KB
Loading
Lines changed: 69 additions & 202 deletions
Original file line numberDiff line numberDiff line change
@@ -1,205 +1,72 @@
11
# Copyright (C) 2020 ISIS Rutherford Appleton Laboratory UKRI
22
# SPDX - License - Identifier: GPL-3.0-or-later
3-
import mock
4-
import pytest
5-
from mock import DEFAULT
63

7-
from mantidimaging.core.utility.version_check import (_do_version_check, _make_version_str, _parse_version,
8-
check_version_and_label)
9-
10-
11-
def test_parse_version():
12-
parsed = _parse_version("9.9.9_1234")
13-
14-
assert parsed.version == (9, 9, 9)
15-
assert parsed.commits == 1234
16-
17-
18-
def test_make_version_str():
19-
input_version_str = "9.9.9_1234"
20-
parsed = _parse_version(input_version_str)
21-
22-
version_string = _make_version_str(parsed)
23-
24-
assert version_string == input_version_str
25-
26-
27-
@pytest.mark.parametrize(
28-
'old, new, should_call_back, is_main_label',
29-
[
30-
["9.9.9_1234", "19.9.9_1234", True, True], # remote is newer
31-
["9.9.9_1234", "9.9.9_1234", False, True], # local and remote is the same
32-
["19.9.9_1234", "9.9.9_1234", False, True], # for some reason the local is newer
33-
["9.9.9_1234", "19.9.9_1234", True, False], # remote is newer
34-
["9.9.9_1234", "9.9.9_1234", False, False], # local and remote is the same
35-
["19.9.9_1234", "9.9.9_1234", False, False], # for some reason the local is newer
36-
])
37-
@mock.patch("mantidimaging.core.utility.version_check.LOG")
38-
def test_do_version_check_main(mock_log, old: str, new: str, should_call_back: bool, is_main_label: bool):
39-
older = _parse_version(old)
40-
newer = _parse_version(new)
41-
42-
callback_mock = mock.Mock()
43-
44-
def callback(msg):
45-
callback_mock(msg)
46-
47-
_do_version_check(older, newer, callback, is_main_label)
48-
49-
# True when local is older
50-
if should_call_back:
51-
callback_mock.assert_called_once()
52-
# when local is older the LOG sends more info messages
53-
assert mock_log.info.call_count == 2
54-
55-
# last call has the install command
56-
# just check that certain things are in it
57-
logged_update_message = mock_log.info.mock_calls[-1].args[0]
58-
assert "source /opt/miniconda/bin/activate /opt/miniconda" in logged_update_message
59-
assert "https://raw.githubusercontent.com/mantidproject/mantidimaging/master/install.sh" \
60-
in logged_update_message
61-
62-
if is_main_label:
63-
# when main this should NOT be in the string
64-
assert "ENVIRONMENT_NAME=mantidimaging_unstable REPO_LABEL=unstable" not in logged_update_message
65-
else:
66-
assert "ENVIRONMENT_NAME=mantidimaging_unstable REPO_LABEL=unstable" in logged_update_message
67-
else:
68-
callback_mock.assert_not_called()
69-
assert mock_log.info.call_count == 1
70-
logged_update_message = mock_log.info.mock_calls[-1].args[0]
71-
assert "Running the latest Mantid Imaging" in logged_update_message
72-
73-
74-
@mock.patch.multiple("mantidimaging.core.utility.version_check", subprocess=DEFAULT, requests=DEFAULT, LOG=DEFAULT)
75-
def test_check_version_and_label_empty_local(subprocess=None, requests=None, LOG=None):
76-
subprocess.check_output.return_value = b""
77-
callback_mock = mock.Mock()
78-
79-
def callback(msg):
80-
callback_mock(msg)
81-
82-
assert False is check_version_and_label(callback)
83-
assert LOG.info.call_count == 2
84-
requests.get.assert_not_called()
85-
86-
87-
@mock.patch.multiple("mantidimaging.core.utility.version_check",
88-
subprocess=DEFAULT,
89-
requests=DEFAULT,
90-
LOG=DEFAULT,
91-
json=DEFAULT)
92-
def test_check_version_and_label_remote_get_raises(subprocess=None, requests=None, LOG=None, json=None):
93-
subprocess.check_output.return_value = b"1.1.0_1018 mantid/label/unstable"
94-
json.loads.return_value = {"latest_version": "1.1.0_1018", "versions": ['1.1.0_1090']}
95-
requests.get.side_effect = RuntimeError
96-
97-
callback_mock = mock.Mock()
98-
99-
def callback(msg):
100-
callback_mock(msg)
101-
102-
assert check_version_and_label(callback) is False
103-
assert LOG.info.call_count == 2
104-
105-
logged_update_message = LOG.info.mock_calls[-1].args[0]
106-
assert "Could not connect to Anaconda remote" in logged_update_message
107-
108-
requests.get.assert_called_once()
109-
110-
111-
@mock.patch.multiple("mantidimaging.core.utility.version_check",
112-
subprocess=DEFAULT,
113-
requests=DEFAULT,
114-
LOG=DEFAULT,
115-
json=DEFAULT)
116-
def test_check_version_and_label_unstable_remote_newer(subprocess=None, requests=None, LOG=None, json=None):
117-
subprocess.check_output.return_value = b"1.1.0_1018 mantid/label/unstable"
118-
json.loads.return_value = {"latest_version": "1.1.0_1018", "versions": ['1.1.0_1090']}
119-
120-
callback_mock = mock.Mock()
121-
122-
def callback(msg):
123-
callback_mock(msg)
124-
125-
assert check_version_and_label(callback) is False
126-
127-
requests.get.assert_called_once()
128-
assert LOG.info.call_count == 3
129-
logged_update_message = LOG.info.mock_calls[-1].args[0]
130-
assert "source /opt/miniconda/bin/activate /opt/miniconda" in logged_update_message
131-
assert "https://raw.githubusercontent.com/mantidproject/mantidimaging/master/install.sh" \
132-
in logged_update_message
133-
134-
assert "ENVIRONMENT_NAME=mantidimaging_unstable REPO_LABEL=unstable" in logged_update_message
135-
136-
137-
@mock.patch.multiple("mantidimaging.core.utility.version_check",
138-
subprocess=DEFAULT,
139-
requests=DEFAULT,
140-
LOG=DEFAULT,
141-
json=DEFAULT)
142-
def test_check_version_and_label_unstable_remote_same(subprocess=None, requests=None, LOG=None, json=None):
143-
subprocess.check_output.return_value = b"1.1.0_1090 mantid/label/unstable"
144-
json.loads.return_value = {"latest_version": "1.1.0_1018", "versions": ['1.1.0_1090']}
145-
146-
callback_mock = mock.Mock()
147-
148-
def callback(msg):
149-
callback_mock(msg)
150-
151-
assert check_version_and_label(callback) is False
152-
153-
requests.get.assert_called_once()
154-
assert LOG.info.call_count == 2
155-
logged_update_message = LOG.info.mock_calls[-1].args[0]
156-
assert "Running the latest Mantid Imaging" in logged_update_message
157-
158-
159-
@mock.patch.multiple("mantidimaging.core.utility.version_check",
160-
subprocess=DEFAULT,
161-
requests=DEFAULT,
162-
LOG=DEFAULT,
163-
json=DEFAULT)
164-
def test_check_version_and_label_main_remote_newer(subprocess=None, requests=None, LOG=None, json=None):
165-
subprocess.check_output.return_value = b"1.1.0_1018 mantid/label/main"
166-
json.loads.return_value = {"latest_version": "1.1.0_1025", "versions": ['1.1.0_1090']}
167-
168-
callback_mock = mock.Mock()
169-
170-
def callback(msg):
171-
callback_mock(msg)
172-
173-
assert check_version_and_label(callback) is True
174-
175-
requests.get.assert_called_once()
176-
assert LOG.info.call_count == 3
177-
logged_update_message = LOG.info.mock_calls[-1].args[0]
178-
assert "source /opt/miniconda/bin/activate /opt/miniconda" in logged_update_message
179-
assert "https://raw.githubusercontent.com/mantidproject/mantidimaging/master/install.sh" \
180-
in logged_update_message
181-
182-
# main label shouldn't include this
183-
assert "ENVIRONMENT_NAME=mantidimaging_unstable REPO_LABEL=unstable" not in logged_update_message
184-
185-
186-
@mock.patch.multiple("mantidimaging.core.utility.version_check",
187-
subprocess=DEFAULT,
188-
requests=DEFAULT,
189-
LOG=DEFAULT,
190-
json=DEFAULT)
191-
def test_check_version_and_label_main_remote_same(subprocess=None, requests=None, LOG=None, json=None):
192-
subprocess.check_output.return_value = b"1.1.0_1018 mantid/label/main"
193-
json.loads.return_value = {"latest_version": "1.1.0_1018", "versions": ['1.1.0_1090']}
194-
195-
callback_mock = mock.Mock()
196-
197-
def callback(msg):
198-
callback_mock(msg)
199-
200-
assert check_version_and_label(callback) is True
201-
202-
requests.get.assert_called_once()
203-
assert LOG.info.call_count == 2
204-
logged_update_message = LOG.info.mock_calls[-1].args[0]
205-
assert "Running the latest Mantid Imaging" in logged_update_message
4+
import unittest
5+
from unittest import mock
6+
7+
from mantidimaging.core.utility.version_check import (CheckVersion, _version_is_uptodate, _parse_version)
8+
9+
10+
class TestCheckVersion(unittest.TestCase):
11+
def setUp(self):
12+
with mock.patch("mantidimaging.core.utility.version_check.CheckVersion._retrieve_versions"):
13+
self.versions = CheckVersion()
14+
self.versions._use_test_values()
15+
16+
def test_parse_version(self):
17+
parsed = _parse_version("9.9.9_1234")
18+
19+
assert parsed.version == (9, 9, 9)
20+
assert parsed.commits == 1234
21+
22+
def test_version_is_uptodate(self):
23+
for local, remote, is_uptodate in [
24+
["8.9.9_1234", "9.9.9_1234", False],
25+
["9.9.9_1234", "19.9.9_1234", False],
26+
["9.9.9_1234", "19.9.9_0", False],
27+
["9.9.9_1", "9.9.9_2", False],
28+
["8.9.9_1234", "8.9.9_1234", True],
29+
["9.9.9_1234", "8.9.9_1234", True],
30+
["8.9.9_2000", "8.9.9_1234", True],
31+
["8.10.9_1234", "8.9.9_1234", True],
32+
]:
33+
34+
local_parsed = _parse_version(local)
35+
remote_parsed = _parse_version(remote)
36+
37+
self.assertEqual(_version_is_uptodate(local_parsed, remote_parsed), is_uptodate)
38+
39+
def test_is_conda_uptodate(self):
40+
self.assertTrue(self.versions.is_conda_uptodate())
41+
42+
self.versions._use_test_values(False)
43+
self.assertFalse(self.versions.is_conda_uptodate())
44+
45+
def test_conda_update_message(self):
46+
self.versions._use_test_values(False)
47+
msg, detailed = self.versions.conda_update_message()
48+
self.assertTrue("Found version 1.0.0_1" in msg)
49+
self.assertTrue("latest: 2.0.0_1" in msg)
50+
self.assertTrue("To update your environment" in detailed)
51+
52+
@mock.patch("builtins.print")
53+
def test_show_versions(self, mock_print):
54+
self.versions.show_versions()
55+
mock_print.assert_called()
56+
57+
@mock.patch("subprocess.check_output")
58+
def test_retrieve_conda_installed_version(self, mock_check_output):
59+
mock_check_output.return_value = b"1.1.0_1018 mantid/label/unstable"
60+
self.versions._retrieve_conda_installed_version()
61+
self.assertEqual(self.versions.get_conda_installed_version(), "1.1.0_1018")
62+
63+
@mock.patch("requests.get")
64+
def test_retrieve_conda_available_version(self, mock_get):
65+
mock_get.return_value = mock.Mock(content='{"latest_version": "1.1.0_1018", "versions": ["1.1.0_1090"]}')
66+
self.versions._conda_installed_label = "main"
67+
self.versions._retrieve_conda_available_version()
68+
self.assertEqual(self.versions.get_conda_available_version(), "1.1.0_1018")
69+
70+
self.versions._conda_installed_label = "unstable"
71+
self.versions._retrieve_conda_available_version()
72+
self.assertEqual(self.versions.get_conda_available_version(), "1.1.0_1090")

0 commit comments

Comments
 (0)