You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.9 KiB
96 lines
2.9 KiB
import mock
|
|
from mock import patch, Mock
|
|
import unittest
|
|
from unittest import TestCase
|
|
|
|
from couchpotato.core.settings import Settings
|
|
|
|
class DoNotUseMe:
|
|
""" Do not use this class, it is just for storing Mock ' s of Settings-class
|
|
|
|
Usage:
|
|
Select appropriate Mocks and copy-paste them to your test-method
|
|
"""
|
|
def __do_not_call(self):
|
|
# s = Settings
|
|
s = Mock()
|
|
|
|
# methods:
|
|
s.isOptionWritable = Mock(return_value=True)
|
|
s.set = Mock(return_value=None)
|
|
s.save = Mock()
|
|
|
|
# props:
|
|
s.log = Mock()
|
|
|
|
class SettingsSaveWritableNonWritable(TestCase):
|
|
def setUp(self):
|
|
self.s = Settings()
|
|
|
|
def test_save_writable(self):
|
|
s = self.s
|
|
|
|
# set up Settings-mocks :
|
|
# lets assume, that option is writable:
|
|
mock_isOptionWritable = s.isOptionWritable = Mock(return_value=True)
|
|
mock_set = s.set = Mock(return_value=None)
|
|
mock_p_save = s.save = Mock()
|
|
|
|
section = 'core'
|
|
option = 'option_non_exist_be_sure'
|
|
value = "1000"
|
|
params = { 'section' : section, 'name' : option, 'value' : value }
|
|
|
|
# call method:
|
|
env_mock = Mock()
|
|
|
|
# HERE is an example of mocking LOCAL 'import'
|
|
with patch.dict('sys.modules', {'couchpotato.environment.Env': env_mock}):
|
|
result = s.saveView(**params)
|
|
|
|
self.assertIsInstance(s, Settings)
|
|
self.assertIsInstance(result, dict)
|
|
self.assertTrue(result['success'])
|
|
|
|
# -----------------------------------------
|
|
# check mock
|
|
# -----------------------------------------
|
|
mock_isOptionWritable.assert_called_with(section, option)
|
|
|
|
# check, that Settings tried to save my value:
|
|
mock_set.assert_called_with(section, option, value)
|
|
|
|
|
|
def test_save_non_writable(self):
|
|
s = self.s
|
|
|
|
# set up Settings-mocks :
|
|
# lets assume, that option is not writable:
|
|
mock_is_w = s.isOptionWritable = Mock(return_value=False)
|
|
mock_set = s.set = Mock(return_value=None)
|
|
mock_p_save = s.save = Mock()
|
|
mock_log_s = s.log = Mock()
|
|
|
|
section = 'core'
|
|
option = 'option_non_exist_be_sure'
|
|
value = "1000"
|
|
params = { 'section' : section, 'name' : option, 'value' : value }
|
|
|
|
# call method:
|
|
env_mock = Mock()
|
|
|
|
# HERE is an example of mocking LOCAL 'import'
|
|
with patch.dict('sys.modules', {'couchpotato.environment.Env': env_mock}):
|
|
result = s.saveView(**params)
|
|
|
|
|
|
self.assertIsInstance(s, Settings)
|
|
self.assertIsInstance(result, dict)
|
|
self.assertFalse(result['success'])
|
|
|
|
# -----------------------------------------
|
|
# check mock
|
|
# -----------------------------------------
|
|
# lets check, that 'set'-method was not called:
|
|
self.assertFalse(mock_set.called, 'Method `set` was called')
|
|
mock_is_w.assert_called_with(section, option)
|
|
|