Browse Source
During previous conflict-resolving the code, with test of writing `non-writable` options to config was lost. Here that code with appropriate tests.pull/5966/head
3 changed files with 127 additions and 22 deletions
@ -0,0 +1,96 @@ |
|||
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) |
Loading…
Reference in new issue