Skip to content

Commit fa73e4b

Browse files
Set env RIDESETTINGS to path of test settings file
1 parent 662b08e commit fa73e4b

File tree

5 files changed

+164
-139
lines changed

5 files changed

+164
-139
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ MANIFEST
1515
*.iml
1616
.coverage
1717
coverage.xml
18-
18+
utest/resources/fake.cfg

src/robotide/preferences/settings.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,12 +356,16 @@ def __init__(self, path=None):
356356
if path:
357357
self._default_path = path
358358
else:
359-
self._default_path = os.path.join(os.path.dirname(__file__), 'settings.cfg')
360-
# print("DEBUG: RideSettings, default_path %s\n" % self._default_path)
359+
path = os.getenv('RIDESETTINGS', 'user')
360+
if path == 'user':
361+
self._default_path = os.path.join(os.path.dirname(__file__), 'settings.cfg')
362+
elif path.endswith('.cfg') and os.path.exists(path):
363+
self._default_path = path
364+
# print(f"DEBUG: settings.py RideSettings SETTINGS {self._default_path=}")
361365
user_path = initialize_settings(self._default_path)
362366
Settings.__init__(self, user_path)
363367
self._settings_dir = os.path.dirname(user_path)
364-
# print("DEBUG: RideSettings, self._settings_dir %s\n" % self._settings_dir)
368+
# print(f"DEBUG: RideSettings, self._settings_dir={self._settings_dir}")
365369
self.get('install root', os.path.dirname(os.path.dirname(__file__)))
366370
self.executable = self.get('executable', EXECUTABLE)
367371
if self.executable != EXECUTABLE:

utest/application/test_updatenotifier.py

Lines changed: 137 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
15+
import os
1516
import pytest
1617
import sys
1718
import typing
1819
import unittest
1920
import time
2021
import urllib
2122

23+
from unittest import mock
24+
2225
from robotide.application.updatenotifier import UpdateNotifierController, UpdateDialog
2326

2427
IS_WINDOWS = sys.platform=='win32'
@@ -137,10 +140,10 @@ def tearDown(self):
137140
# wx.CallAfter(self.app.ExitMainLoop)
138141
# self.app.MainLoop() # With this here, there is no Segmentation fault
139142
# wx.CallAfter(wx.Exit)
143+
self.app.ExitMainLoop()
140144
self.app.Destroy()
141145
self.app = None
142146

143-
144147
def _callback(self, version, url, settings, notebook):
145148
__ = notebook
146149
self.assertFalse(self._callback_called)
@@ -173,160 +176,179 @@ def internal_settings(check_for_updates: typing.Union[bool, None] = True,
173176
LASTUPDATECHECK: last_update_check}
174177

175178
def test_normal_update(self):
176-
settings = self.internal_settings()
177-
ctrl = self._update_notifier_controller(settings, self.notebook, '0', '1', 'http://xyz.abc.efg.di')
178-
ctrl.notify_update_if_needed(self._callback)
179-
self.assertTrue(self._callback_called)
180-
self.assertEqual('1', self._newest_version)
181-
self.assertEqual('http://xyz.abc.efg.di', self._url)
182-
self.assertTrue(settings[CHECKFORUPDATES])
183-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
184-
# Uncomment next lines if you want to see the app
185-
# wx.CallLater(5000, self.app.ExitMainLoop)
186-
# self.app.MainLoop()
179+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
180+
settings = self.internal_settings()
181+
ctrl = self._update_notifier_controller(settings, self.notebook, '0', '1', 'http://xyz.abc.efg.di')
182+
ctrl.notify_update_if_needed(self._callback)
183+
self.assertTrue(self._callback_called)
184+
self.assertEqual('1', self._newest_version)
185+
self.assertEqual('http://xyz.abc.efg.di', self._url)
186+
self.assertTrue(settings[CHECKFORUPDATES])
187+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
188+
# Uncomment next lines if you want to see the app
189+
# wx.CallLater(5000, self.app.ExitMainLoop)
190+
# self.app.MainLoop()
187191

188192
def test_update_when_trunk_version(self):
189-
settings = self.internal_settings()
190-
ctrl = self._update_notifier_controller(settings, self.notebook, '2.0', '2.0.1')
191-
ctrl.notify_update_if_needed(self._callback)
192-
self.assertTrue(self._callback_called)
193-
self.assertEqual('2.0.1', self._newest_version)
194-
self.assertTrue(settings[CHECKFORUPDATES])
195-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
193+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
194+
settings = self.internal_settings()
195+
ctrl = self._update_notifier_controller(settings, self.notebook, '2.0', '2.0.1')
196+
ctrl.notify_update_if_needed(self._callback)
197+
self.assertTrue(self._callback_called)
198+
self.assertEqual('2.0.1', self._newest_version)
199+
self.assertTrue(settings[CHECKFORUPDATES])
200+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
196201

197202
def test_last_update_done_less_than_a_week_ago(self):
198-
original_time = time.time() - 60 * 60 * 24 * 3
199-
settings = self.internal_settings(last_update_check=original_time)
200-
ctrl = UpdateNotifierController(settings, self.notebook)
201-
ctrl.notify_update_if_needed(self._callback)
202-
self.assertTrue(settings[CHECKFORUPDATES])
203-
self.assertEqual(original_time, settings[LASTUPDATECHECK])
204-
self.assertFalse(self._callback_called)
203+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
204+
original_time = time.time() - 60 * 60 * 24 * 3
205+
settings = self.internal_settings(last_update_check=original_time)
206+
ctrl = UpdateNotifierController(settings, self.notebook)
207+
ctrl.notify_update_if_needed(self._callback)
208+
self.assertTrue(settings[CHECKFORUPDATES])
209+
self.assertEqual(original_time, settings[LASTUPDATECHECK])
210+
self.assertFalse(self._callback_called)
205211

206212
def test_check_for_updates_is_false(self):
207-
settings = self.internal_settings(check_for_updates=False)
208-
original_time = settings[LASTUPDATECHECK]
209-
ctrl = UpdateNotifierController(settings, self.notebook)
210-
ctrl.notify_update_if_needed(self._callback)
211-
self.assertFalse(settings[CHECKFORUPDATES])
212-
self.assertEqual(original_time, settings[LASTUPDATECHECK])
213-
self.assertFalse(self._callback_called)
213+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
214+
settings = self.internal_settings(check_for_updates=False)
215+
original_time = settings[LASTUPDATECHECK]
216+
ctrl = UpdateNotifierController(settings, self.notebook)
217+
ctrl.notify_update_if_needed(self._callback)
218+
self.assertFalse(settings[CHECKFORUPDATES])
219+
self.assertEqual(original_time, settings[LASTUPDATECHECK])
220+
self.assertFalse(self._callback_called)
214221

215222
def test_no_update_found(self):
216-
settings = self.internal_settings()
217-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.55', '0.55')
218-
ctrl.notify_update_if_needed(self._callback)
219-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
220-
self.assertFalse(self._callback_called)
223+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
224+
settings = self.internal_settings()
225+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.55', '0.55')
226+
ctrl.notify_update_if_needed(self._callback)
227+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
228+
self.assertFalse(self._callback_called)
221229

222230
def test_no_update_found_dev(self):
223-
settings = self.internal_settings()
224-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.56', '0.56')
225-
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=False, show_no_update=False)
226-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
227-
self.assertFalse(self._callback_called)
231+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
232+
settings = self.internal_settings()
233+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.56', '0.56')
234+
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=False, show_no_update=False)
235+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
236+
self.assertFalse(self._callback_called)
228237

229238
@pytest.mark.skipif(IS_WINDOWS, reason='Causes: Windows fatal exception: access violation')
230239
def test_no_update_found_dev_notify(self):
231-
settings = self.internal_settings()
232-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.55', '0.55')
233-
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True, show_no_update=True)
234-
self.assertFalse(self._callback_called)
240+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
241+
settings = self.internal_settings()
242+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.55', '0.55')
243+
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True, show_no_update=True)
244+
self.assertFalse(self._callback_called)
235245

236246
def test_first_run_sets_settings_correctly_and_checks_for_updates(self):
237-
settings = self.internal_settings(check_for_updates=None, last_update_check=None)
238-
ctrl = self._update_notifier_controller(settings, self.notebook,'1.0.2', '1.0.2')
239-
ctrl.notify_update_if_needed(self._callback)
240-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
241-
self.assertTrue(settings[CHECKFORUPDATES])
242-
self.assertFalse(self._callback_called)
247+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
248+
settings = self.internal_settings(check_for_updates=None, last_update_check=None)
249+
ctrl = self._update_notifier_controller(settings, self.notebook,'1.0.2', '1.0.2')
250+
ctrl.notify_update_if_needed(self._callback)
251+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
252+
self.assertTrue(settings[CHECKFORUPDATES])
253+
self.assertFalse(self._callback_called)
243254

244255
def test_first_run_sets_settings_correctly_and_finds_an_update(self):
245-
settings = self.internal_settings(check_for_updates=None, last_update_check=None)
246-
ctrl = self._update_notifier_controller(settings, self.notebook, '1.2', '2.0')
247-
ctrl.notify_update_if_needed(self._callback)
248-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
249-
self.assertTrue(settings[CHECKFORUPDATES])
250-
self.assertTrue(self._callback_called)
256+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
257+
settings = self.internal_settings(check_for_updates=None, last_update_check=None)
258+
ctrl = self._update_notifier_controller(settings, self.notebook, '1.2', '2.0')
259+
ctrl.notify_update_if_needed(self._callback)
260+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
261+
self.assertTrue(settings[CHECKFORUPDATES])
262+
self.assertTrue(self._callback_called)
251263

252264
def test_checking_timeouts(self):
253-
settings = self.internal_settings()
254-
ctrl = UpdateNotifierController(settings, self.notebook)
265+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
266+
settings = self.internal_settings()
267+
ctrl = UpdateNotifierController(settings, self.notebook)
255268

256-
def throw_timeout_error():
257-
raise urllib.error.URLError('timeout')
269+
def throw_timeout_error():
270+
raise urllib.error.URLError('timeout')
258271

259-
ctrl._get_newest_version = throw_timeout_error
260-
ctrl.notify_update_if_needed(self._callback)
261-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 10) # The dialog timeout in 10 seconds
262-
self.assertFalse(self._callback_called)
272+
ctrl._get_newest_version = throw_timeout_error
273+
ctrl.notify_update_if_needed(self._callback)
274+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 10) # The dialog timeout in 10 seconds
275+
self.assertFalse(self._callback_called)
263276

264277
def test_download_url_checking_timeouts(self):
265-
settings = self.internal_settings()
266-
ctrl = UpdateNotifierController(settings, self.notebook)
267-
ctrl.VERSION = '0'
268-
ctrl._get_newest_version = lambda: '1'
269-
270-
def throw_timeout_error(*args):
271-
_ = args
272-
raise urllib.error.URLError('timeout')
273-
274-
ctrl._get_download_url = throw_timeout_error
275-
ctrl.notify_update_if_needed(self._callback)
276-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
277-
self.assertFalse(self._callback_called)
278+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
279+
settings = self.internal_settings()
280+
ctrl = UpdateNotifierController(settings, self.notebook)
281+
ctrl.VERSION = '0'
282+
ctrl._get_newest_version = lambda: '1'
283+
284+
def throw_timeout_error(*args):
285+
_ = args
286+
raise urllib.error.URLError('timeout')
287+
288+
ctrl._get_download_url = throw_timeout_error
289+
ctrl.notify_update_if_needed(self._callback)
290+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
291+
self.assertFalse(self._callback_called)
278292

279293
def test_server_returns_no_versions(self):
280-
settings = self.internal_settings()
281-
ctrl = self._update_notifier_controller(settings, self.notebook, '1.2.2', None)
282-
ctrl.notify_update_if_needed(self._callback)
283-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
284-
self.assertTrue(settings[CHECKFORUPDATES])
285-
self.assertFalse(self._callback_called)
294+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
295+
settings = self.internal_settings()
296+
ctrl = self._update_notifier_controller(settings, self.notebook, '1.2.2', None)
297+
ctrl.notify_update_if_needed(self._callback)
298+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
299+
self.assertTrue(settings[CHECKFORUPDATES])
300+
self.assertFalse(self._callback_called)
286301

287302
def test_server_returns_older_version(self):
288-
settings = self.internal_settings()
289-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44', '0.43.1')
290-
ctrl.notify_update_if_needed(self._callback)
291-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
292-
self.assertTrue(settings[CHECKFORUPDATES])
293-
self.assertFalse(self._callback_called)
303+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
304+
settings = self.internal_settings()
305+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44', '0.43.1')
306+
ctrl.notify_update_if_needed(self._callback)
307+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 1)
308+
self.assertTrue(settings[CHECKFORUPDATES])
309+
self.assertFalse(self._callback_called)
294310

295311
@pytest.mark.skipif(IS_WINDOWS, reason='Causes: Windows fatal exception: access violation')
296312
def test_forced_check_released(self):
297-
settings = self.internal_settings()
298-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.43.0', '0.43.1')
299-
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True)
300-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 19) # The dialog timeout in 20 seconds
301-
self.assertTrue(settings[CHECKFORUPDATES])
302-
self.assertTrue(self._callback_called)
313+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
314+
settings = self.internal_settings()
315+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.43.0', '0.43.1')
316+
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True)
317+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 19) # The dialog timeout in 20 seconds
318+
self.assertTrue(settings[CHECKFORUPDATES])
319+
self.assertTrue(self._callback_called)
303320

304321
@pytest.mark.skipif(IS_WINDOWS, reason='Causes: Windows fatal exception: access violation')
305322
def test_forced_check_development(self):
306-
settings = self.internal_settings()
307-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44dev12', '0.44.dev14')
308-
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True)
309-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 20) # The dialog timeout in 20 seconds
310-
self.assertTrue(settings[CHECKFORUPDATES])
311-
self.assertTrue(self._callback_called)
323+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
324+
settings = self.internal_settings()
325+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44dev12', '0.44.dev14')
326+
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=True)
327+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 20) # The dialog timeout in 20 seconds
328+
self.assertTrue(settings[CHECKFORUPDATES])
329+
self.assertTrue(self._callback_called)
312330

313331
@pytest.mark.skipif(IS_WINDOWS, reason='Causes: Windows fatal exception: access violation')
314332
def test_forced_check_development_ok(self):
315-
settings = self.internal_settings()
316-
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44dev12', '0.44.dev12')
317-
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=False)
318-
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 20) # The dialog timeout in 20 seconds
319-
self.assertTrue(settings[CHECKFORUPDATES])
320-
self.assertFalse(self._callback_called)
333+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
334+
settings = self.internal_settings()
335+
ctrl = self._update_notifier_controller(settings, self.notebook, '0.44dev12', '0.44.dev12')
336+
ctrl.notify_update_if_needed(self._callback, ignore_check_condition=False)
337+
self.assertGreater(settings[LASTUPDATECHECK], time.time() - 20) # The dialog timeout in 20 seconds
338+
self.assertTrue(settings[CHECKFORUPDATES])
339+
self.assertFalse(self._callback_called)
321340

322341
@pytest.mark.skipif(IS_WINDOWS, reason='Causes: Windows fatal exception: access violation')
323342
def test_normal_update_dialog(self):
324343
""" This is not actually doing a test """
325-
settings = self.internal_settings()
326-
ctrl=UpdateDialog('1.0.0', 'http://localhost', settings, self.notebook,False)
327-
wx.CallLater(3000, ctrl.EndModal,wx.CANCEL)
328-
ctrl.ShowModal()
329-
ctrl.Destroy()
344+
with mock.patch.dict(os.environ, {'RIDESETTINGS': self.app.settings.fake_cfg}):
345+
settings = self.internal_settings()
346+
# path = os.getenv('RIDESETTINGS')
347+
# print(f"DEBUG: test_updatenotifier.py test_normal_update_dialog RIDESETTINGS{path=}")
348+
ctrl=UpdateDialog('1.0.0', 'http://localhost', settings, self.notebook,False)
349+
wx.CallLater(3000, ctrl.EndModal,wx.CANCEL)
350+
ctrl.ShowModal()
351+
ctrl.Destroy()
330352

331353

332354
if __name__ == '__main__':

0 commit comments

Comments
 (0)