testPreferences.py 21.5 KB
Newer Older
Łukasz Nowak's avatar
Łukasz Nowak committed
1
# -*- coding: utf-8 -*-
2 3
##############################################################################
#
Łukasz Nowak's avatar
Łukasz Nowak committed
4
# Copyright (c) 2005-2009 Nexedi SA and Contributors. All Rights Reserved.
5
#                    Jerome Perrin <jerome@nexedi.com>
Łukasz Nowak's avatar
Łukasz Nowak committed
6
#                    Łukasz Nowak <luke@nexedi.com>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################

31
import unittest
32

33
import transaction
34 35 36
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from AccessControl.SecurityManagement import getSecurityManager
37
from zExceptions import Unauthorized
38
from DateTime import DateTime
39

40 41
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Form.Document.Preference import Priority
42 43 44 45 46
from Products.ERP5.PropertySheet.HtmlStylePreference import HtmlStylePreference

default_large_image_height, = [pref.get('default')
                               for pref in HtmlStylePreference._properties
                               if pref['id'] == 'preferred_large_image_height']
47 48 49


class TestPreferences(ERP5TypeTestCase):
Łukasz Nowak's avatar
Łukasz Nowak committed
50

51 52 53 54 55
  def getTitle(self):
    return "Portal Preference"

  def afterSetUp(self):
    uf = self.getPortal().acl_users
56
    uf._doAddUser('manager', '', ['Manager', 'Assignor', ], [])
57 58
    user = uf.getUserById('manager').__of__(uf)
    newSecurityManager(None, user)
59
    self.createPreferences()
60

61 62 63
  def beforeTearDown(self):
    portal_preferences = self.getPreferenceTool()
    portal_preferences.manage_delObjects(list(portal_preferences.objectIds()))
64
    transaction.commit()
65
    self.tic()
66

Łukasz Nowak's avatar
Łukasz Nowak committed
67
  def createPreferences(self):
68 69 70 71 72 73 74 75 76 77 78 79 80
    """ create some preferences objects  """
    portal_preferences = self.getPreferenceTool()
    ## create initial preferences
    person1 = portal_preferences.newContent(
        id='person1', portal_type='Preference')
    person2 = portal_preferences.newContent(
        id='person2', portal_type='Preference')
    group = portal_preferences.newContent(
        id='group', portal_type='Preference')
    group.setPriority(Priority.GROUP)
    site = portal_preferences.newContent(
        id='site', portal_type='Preference')
    site.setPriority(Priority.SITE)
Łukasz Nowak's avatar
Łukasz Nowak committed
81

82
    # commit transaction
83
    transaction.commit()
84
    self.getPreferenceTool().recursiveReindexObject()
85
    self.tic()
Łukasz Nowak's avatar
Łukasz Nowak committed
86

87 88 89 90 91 92 93 94 95 96
    # check preference levels are Ok
    self.assertEquals(person1.getPriority(), Priority.USER)
    self.assertEquals(person2.getPriority(), Priority.USER)
    self.assertEquals(group.getPriority(),   Priority.GROUP)
    self.assertEquals(site.getPriority(),    Priority.SITE)
    # check initial states
    self.assertEquals(person1.getPreferenceState(), 'disabled')
    self.assertEquals(person2.getPreferenceState(), 'disabled')
    self.assertEquals(group.getPreferenceState(),   'disabled')
    self.assertEquals(site.getPreferenceState(),    'disabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
97

98 99 100 101 102
  def test_PreferenceToolTitle(self):
    """Tests that the title of the preference tool is correct.
    """
    self.assertEquals('Preferences', self.getPreferenceTool().Title())

Łukasz Nowak's avatar
Łukasz Nowak committed
103
  def test_AllowedContentTypes(self):
104 105 106 107 108
    """Tests Preference can be added in Preference Tool.
    """
    self.failUnless('Preference' in [x.getId() for x in
           self.getPortal().portal_preferences.allowedContentTypes()])

Łukasz Nowak's avatar
Łukasz Nowak committed
109
  def test_EnablePreferences(self):
110 111 112 113 114 115
    """ tests preference workflow """
    portal_workflow = self.getWorkflowTool()
    person1 = self.getPreferenceTool()['person1']
    person2 = self.getPreferenceTool()['person2']
    group = self.getPreferenceTool()['group']
    site = self.getPreferenceTool()['site']
Łukasz Nowak's avatar
Łukasz Nowak committed
116

117
    self.assertEqual(None, self.getPreferenceTool().getActivePreference())
118 119
    self.assertEqual(None,
        self.getPreferenceTool().getActiveSystemPreference())
120

121 122 123
    person1.portal_workflow.doActionFor(
       person1, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(person1.getPreferenceState(), 'enabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
124

125
    self.assertEqual( person1, self.getPreferenceTool().getActivePreference())
126 127
    self.assertEqual(None,
        self.getPreferenceTool().getActiveSystemPreference())
128

129 130 131
    portal_workflow.doActionFor(
       site, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(person1.getPreferenceState(), 'enabled')
132
    self.assertEquals(site.getPreferenceState(),    'global')
133

134
    self.assertEqual(person1, self.getPreferenceTool().getActivePreference())
135 136
    self.assertEqual(None,
        self.getPreferenceTool().getActiveSystemPreference())
137

138 139 140 141
    portal_workflow.doActionFor(
       group, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(person1.getPreferenceState(), 'enabled')
    self.assertEquals(group.getPreferenceState(),   'enabled')
142
    self.assertEquals(site.getPreferenceState(),    'global')
Łukasz Nowak's avatar
Łukasz Nowak committed
143

144
    self.assertEqual(person1, self.getPreferenceTool().getActivePreference())
145 146
    self.assertEqual(None,
        self.getPreferenceTool().getActiveSystemPreference())
147

148 149
    portal_workflow.doActionFor(
       person2, 'enable_action', wf_id='preference_workflow')
150
    self.assertEqual(person2, self.getPreferenceTool().getActivePreference())
151 152
    self.assertEqual(None,
        self.getPreferenceTool().getActiveSystemPreference())
153 154 155 156
    self.assertEquals(person2.getPreferenceState(), 'enabled')
    # enabling a preference disable all other of the same level
    self.assertEquals(person1.getPreferenceState(), 'disabled')
    self.assertEquals(group.getPreferenceState(),   'enabled')
157
    self.assertEquals(site.getPreferenceState(),    'global')
158

Łukasz Nowak's avatar
Łukasz Nowak committed
159
  def test_GetPreference(self):
160 161 162 163 164 165
    """ checks that getPreference returns the good preferred value"""
    portal_workflow = self.getWorkflowTool()
    pref_tool = self.getPreferenceTool()
    person1 = self.getPreferenceTool()['person1']
    group = self.getPreferenceTool()['group']
    site = self.getPreferenceTool()['site']
Łukasz Nowak's avatar
Łukasz Nowak committed
166

167 168 169 170 171 172 173 174
    portal_workflow.doActionFor(
       person1, 'enable_action', wf_id='preference_workflow')
    portal_workflow.doActionFor(
       group, 'enable_action', wf_id='preference_workflow')
    portal_workflow.doActionFor(
       site, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(person1.getPreferenceState(), 'enabled')
    self.assertEquals(group.getPreferenceState(),   'enabled')
175
    self.assertEquals(site.getPreferenceState(),    'global')
176
    person1.setPreferredAccountingTransactionSimulationState([])
177 178
    self.assertEquals(
      person1.getPreferredAccountingTransactionSimulationState(), None)
179
    group.setPreferredAccountingTransactionSimulationState([])
180 181
    self.assertEquals(
      group.getPreferredAccountingTransactionSimulationState(), None)
182
    site.setPreferredAccountingTransactionSimulationState([])
183 184
    self.assertEquals(
      site.getPreferredAccountingTransactionSimulationState(), None)
185

186
    self.assertEquals(len(pref_tool.getPreference(
187
      'preferred_accounting_transaction_simulation_state_list')), 0)
Łukasz Nowak's avatar
Łukasz Nowak committed
188

189 190 191
    site.edit(
      preferred_accounting_transaction_simulation_state_list=
      ['stopped', 'delivered'])
192
    self.assertEquals(list(pref_tool.getPreference(
193
      'preferred_accounting_transaction_simulation_state_list')),
194
      list(site.getPreferredAccountingTransactionSimulationStateList()))
Łukasz Nowak's avatar
Łukasz Nowak committed
195

196 197 198 199 200 201 202
    # getPreference on the tool has the same behaviour as getProperty
    # on the preference (unless property is unset on this pref)
    for prop in ['preferred_accounting_transaction_simulation_state',
            'preferred_accounting_transaction_simulation_state_list']:

      self.assertEquals(pref_tool.getPreference(prop),
                        site.getProperty(prop))
Łukasz Nowak's avatar
Łukasz Nowak committed
203

204 205
    group.edit(
      preferred_accounting_transaction_simulation_state_list=['draft'])
206
    self.assertEquals(list(pref_tool.getPreference(
207
      'preferred_accounting_transaction_simulation_state_list')),
208
      list(group.getPreferredAccountingTransactionSimulationStateList()))
Łukasz Nowak's avatar
Łukasz Nowak committed
209

210
    person1.edit(preferred_accounting_transaction_simulation_state_list=
211 212
              ['cancelled'])
    self.assertEquals(list(pref_tool.getPreference(
213
      'preferred_accounting_transaction_simulation_state_list')),
214 215 216 217 218
      list(person1.getPreferredAccountingTransactionSimulationStateList()))
    # disable person -> group is selected
    self.getWorkflowTool().doActionFor(person1,
            'disable_action', wf_id='preference_workflow')
    self.assertEquals(list(pref_tool.getPreference(
219
      'preferred_accounting_transaction_simulation_state_list')),
220 221
      list(group.getPreferredAccountingTransactionSimulationStateList()))

222 223 224 225
    self.assertEquals('default', pref_tool.getPreference(
                                        'this_does_not_exists', 'default'))


Łukasz Nowak's avatar
Łukasz Nowak committed
226
  def test_GetAttr(self):
227 228 229 230 231 232 233 234 235 236 237 238 239
    """ checks that preference methods can be called directly
      on portal_preferences """
    portal_workflow = self.getWorkflowTool()
    pref_tool = self.getPreferenceTool()
    person1 = self.getPreferenceTool()['person1']
    group = self.getPreferenceTool()['group']
    site = self.getPreferenceTool()['site']
    self.assertEquals(person1.getPreferenceState(), 'disabled')
    portal_workflow.doActionFor(
       group, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(group.getPreferenceState(),    'enabled')
    portal_workflow.doActionFor(
       site, 'enable_action', wf_id='preference_workflow')
240
    self.assertEquals(site.getPreferenceState(),     'global')
241
    group.setPreferredAccountingTransactionSimulationStateList(['cancelled'])
Łukasz Nowak's avatar
Łukasz Nowak committed
242

243 244 245 246 247 248 249
    self.assertNotEquals( None,
      pref_tool.getPreferredAccountingTransactionSimulationStateList())
    self.assertNotEquals( [],
      list(pref_tool.getPreferredAccountingTransactionSimulationStateList()))
    self.assertEquals(
      list(pref_tool.getPreferredAccountingTransactionSimulationStateList()),
      list(pref_tool.getPreference(
250
         'preferred_accounting_transaction_simulation_state_list')))
251 252 253
    # standards attributes must not be looked up on Preferences
    self.assertNotEquals(pref_tool.getTitleOrId(), group.getTitleOrId())
    self.assertNotEquals(pref_tool.objectValues(), group.objectValues())
254
    self.assertNotEquals(pref_tool.getParentValue(), group.getParentValue())
255 256
    try :
      pref_tool.getPreferredNotExistingPreference()
257
      self.fail('Attribute error should be raised for dummy methods')
258 259
    except AttributeError :
      pass
Łukasz Nowak's avatar
Łukasz Nowak committed
260 261 262

  def test_SetPreference(self):
    """ check setting a preference modifies
263 264 265 266
     the first enabled user preference """
    portal_workflow = self.getWorkflowTool()
    pref_tool = self.getPreferenceTool()
    person1 = self.getPreferenceTool()['person1']
Łukasz Nowak's avatar
Łukasz Nowak committed
267

268 269 270 271 272 273 274 275 276 277 278 279 280 281
    portal_workflow.doActionFor(
       person1, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(person1.getPreferenceState(),    'enabled')
    person1.setPreferredAccountingTransactionAtDate(DateTime(2005, 01, 01))
    pref_tool.setPreference(
      'preferred_accounting_transaction_at_date', DateTime(2004, 12, 31))
    self.tic()
    self.assertEquals(
      pref_tool.getPreferredAccountingTransactionAtDate(),
      DateTime(2004, 12, 31))
    self.assertEquals(
      person1.getPreferredAccountingTransactionAtDate(),
      DateTime(2004, 12, 31))

Łukasz Nowak's avatar
Łukasz Nowak committed
282
  def test_UserIndependance(self):
283 284 285 286 287
    """ check that the preferences are related to the user. """
    portal_workflow = self.getWorkflowTool()
    portal_preferences = self.getPreferenceTool()
    # create 2 users: user_a and user_b
    uf = self.getPortal().acl_users
288
    uf._doAddUser('user_a', '', ['Member', ], [])
289
    user_a = uf.getUserById('user_a').__of__(uf)
290
    uf._doAddUser('user_b', '', ['Member', ], [])
291
    user_b = uf.getUserById('user_b').__of__(uf)
Łukasz Nowak's avatar
Łukasz Nowak committed
292 293

    # log as user_a
294
    newSecurityManager(None, user_a)
Łukasz Nowak's avatar
Łukasz Nowak committed
295

296 297 298 299 300
    # create 2 prefs as user_a
    user_a_1 = portal_preferences.newContent(
        id='user_a_1', portal_type='Preference')
    user_a_2 = portal_preferences.newContent(
        id='user_a_2', portal_type='Preference')
301
    transaction.commit(); self.tic()
302 303 304 305 306 307

    # enable a pref
    portal_workflow.doActionFor(
       user_a_1, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(user_a_1.getPreferenceState(), 'enabled')
    self.assertEquals(user_a_2.getPreferenceState(), 'disabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
308

309 310
    # log as user_b
    newSecurityManager(None, user_b)
Łukasz Nowak's avatar
Łukasz Nowak committed
311

312 313 314 315
    # create a pref for user_b
    user_b_1 = portal_preferences.newContent(
        id='user_b_1', portal_type='Preference')
    user_b_1.setPreferredAccountingTransactionAtDate(DateTime(2002, 02, 02))
316
    transaction.commit(); self.tic()
Łukasz Nowak's avatar
Łukasz Nowak committed
317

318 319 320 321
    # enable this preference
    portal_workflow.doActionFor(
       user_b_1, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(user_b_1.getPreferenceState(), 'enabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
322

323 324 325
    # check user_a's preference is still enabled
    self.assertEquals(user_a_1.getPreferenceState(), 'enabled')
    self.assertEquals(user_a_2.getPreferenceState(), 'disabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
326

327 328 329 330
    # Checks that a manager preference doesn't disable any other user
    # preferences
    # log as manager
    newSecurityManager(None, uf.getUserById('manager').__of__(uf))
Łukasz Nowak's avatar
Łukasz Nowak committed
331

332 333
    self.assert_('Manager' in
      getSecurityManager().getUser().getRolesInContext(portal_preferences))
Łukasz Nowak's avatar
Łukasz Nowak committed
334

335 336 337 338 339
    # create a pref for manager
    manager_pref = portal_preferences.newContent(
        id='manager_pref', portal_type='Preference')
    manager_pref.setPreferredAccountingTransactionAtDate(
                                DateTime(2012, 12, 12))
340
    transaction.commit(); self.tic()
341 342 343 344
    # enable this preference
    portal_workflow.doActionFor(
       manager_pref, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(manager_pref.getPreferenceState(), 'enabled')
Łukasz Nowak's avatar
Łukasz Nowak committed
345

346 347 348 349
    # check users preferences are still enabled
    self.assertEquals(user_a_1.getPreferenceState(), 'enabled')
    self.assertEquals(user_b_1.getPreferenceState(), 'enabled')
    self.assertEquals(user_a_2.getPreferenceState(), 'disabled')
350

351 352 353 354 355 356 357 358
  def test_GlobalPreference(self):
    # globally enabled preference are preference for anonymous users.
    ptool = self.getPreferenceTool()
    ptool.site.setPreferredAccountingTransactionSimulationStateList(
                          ['this_is_visible_by_anonymous'])
    self.getPortal().portal_workflow.doActionFor(
                  ptool.site, 'enable_action', wf_id='preference_workflow')
    self.assertEquals('global', ptool.site.getPreferenceState())
359
    transaction.commit()
360 361 362 363
    self.tic()
    noSecurityManager()
    self.assertEquals(['this_is_visible_by_anonymous'],
        ptool.getPreferredAccountingTransactionSimulationStateList())
364 365 366 367 368 369 370 371 372 373 374

  def test_GetDefault(self):
    portal_workflow = self.getWorkflowTool()
    pref_tool = self.getPreferenceTool()
    site = self.getPreferenceTool()['site']
    portal_workflow.doActionFor(
       site, 'enable_action', wf_id='preference_workflow')
    self.assertEquals(site.getPreferenceState(),    'global')

    method = pref_tool.getPreferredAccountingTransactionSimulationState
    state = method()
375
    self.assertEquals(state, [])
376 377 378
    state = method('default')
    self.assertEquals(state, 'default')

379 380
    method = lambda *args: pref_tool.getPreference('preferred_accounting_transaction_simulation_state', *args)
    state = method()
381
    self.assertEquals(state, [])
382 383 384
    state = method('default')
    self.assertEquals(state, 'default')

385 386
    method = pref_tool.getPreferredAccountingTransactionSimulationStateList
    state_list = method()
387
    self.assertEquals(state_list, [])
388
    state_list = method(('default',))
389 390 391
    # Initially, tuples were always casted to lists. This is not the case
    # anymore when preference_tool.getXxxList returns the default value.
    self.assertEquals(state_list, ('default',))
Łukasz Nowak's avatar
Łukasz Nowak committed
392

393 394
    method = lambda *args: pref_tool.getPreference('preferred_accounting_transaction_simulation_state_list', *args)
    state_list = method()
395
    self.assertEquals(state_list, [])
396 397 398
    state_list = method(('default',))
    self.assertEquals(state_list, ('default',))

399 400
  def test_Permissions(self):
    # create a new site preference for later
401 402
    preference_tool = self.portal.portal_preferences
    site_pref = preference_tool.newContent(
403 404 405 406
                          portal_type='Preference',
                          priority=Priority.SITE)
    self.portal.portal_workflow.doActionFor(site_pref, 'enable_action')
    self.assertEquals(site_pref.getPreferenceState(), 'global')
Łukasz Nowak's avatar
Łukasz Nowak committed
407

408 409 410 411 412
    # Members can add new preferences
    uf = self.getPortal().acl_users
    uf._doAddUser('member', '', ['Member', ], [])
    member = uf.getUserById('member').__of__(uf)
    newSecurityManager(None, member)
413
    user_pref = preference_tool.newContent(portal_type='Preference')
414 415 416

    # Members can copy & paste existing preferences
    user_pref.Base_createCloneDocument()
417 418 419 420 421 422
    # note that copy & pasting a site preference reset the priority to USER
    # preference.
    cp_data = preference_tool.manage_copyObjects(ids=[site_pref.getId()])
    copy_id = preference_tool.manage_pasteObjects(cp_data)[0]['new_id']
    self.assertEquals(Priority.USER, preference_tool[copy_id].getPriority())

423 424 425 426 427 428 429
    # Globally enabled preferences can be viewed by Members
    self.assertTrue(member.has_permission('View', site_pref))

    # Member does not have Manage properties on their own preferences, 
    # otherwise the "Metadata" tab is shown
    self.assertFalse(member.has_permission(
                         'Manage properties', user_pref))
430

Łukasz Nowak's avatar
Łukasz Nowak committed
431

432
  def test_SystemPreference(self):
433 434 435 436
    # We want to test a property with a default value defined
    self.assertTrue(default_large_image_height > 0)
    large_image_height = default_large_image_height + 1

437
    preference_tool = self.portal.portal_preferences
438
    system_pref = preference_tool.newContent(
439
                          portal_type='System Preference',
440
                          preferred_ooodoc_server_address='127.0.0.1',
441
                          priority=Priority.SITE)
442
    # check not taken into account if not enabled
443 444 445 446 447 448
    self.assertEqual(None,
                     preference_tool.getPreferredOoodocServerAddress())
    self.assertEqual('localhost',
                     preference_tool.getPreferredOoodocServerAddress('localhost'))
    self.assertEqual(default_large_image_height,
                     preference_tool.getPreferredLargeImageHeight())
449
    # enable it and check preference is returned
450 451
    self.portal.portal_workflow.doActionFor(system_pref, 'enable_action')
    self.assertEqual(system_pref.getPreferenceState(), 'global')
452
    transaction.commit()
453
    self.tic()
454 455 456 457 458 459
    self.assertEqual('127.0.0.1',
                     preference_tool.getPreferredOoodocServerAddress())
    self.assertEqual('127.0.0.1',
                     preference_tool.getPreferredOoodocServerAddress('localhost'))
    self.assertEqual(default_large_image_height,
                     preference_tool.getPreferredLargeImageHeight())
Łukasz Nowak's avatar
Łukasz Nowak committed
460

461 462 463 464 465 466 467
    # Members can't add new system preferences
    uf = self.getPortal().acl_users
    uf._doAddUser('member', '', ['Member', ], [])
    member = uf.getUserById('member').__of__(uf)
    newSecurityManager(None, member)
    self.assertRaises(Unauthorized, preference_tool.newContent, portal_type='System Preference')
    # But they can see others
468
    system_pref.view()
469
    # check accessors works
470
    system_pref.setPreferredOoodocServerAddress('1.2.3.4')
471
    transaction.commit()
472
    self.tic()
473 474 475 476 477 478
    self.assertEqual('1.2.3.4',
                     preference_tool.getPreferredOoodocServerAddress())
    self.assertEqual('1.2.3.4',
                     preference_tool.getPreferredOoodocServerAddress('localhost'))
    self.assertEqual(default_large_image_height,
                     preference_tool.getPreferredLargeImageHeight())
479

480
    # create a user pref and check it doesn't outranks the system one if
481 482 483 484
    # they both defined same pref
    user_pref = preference_tool.newContent(
                          portal_type='Preference',
                          priority=Priority.USER)
485
    user_pref.setPreferredLargeImageHeight(large_image_height)
486
    self.portal.portal_workflow.doActionFor(user_pref, 'enable_action')
487
    self.assertEqual(user_pref.getPreferenceState(), 'enabled')
488
    transaction.commit()
489
    self.tic()
490 491 492 493 494 495 496
    self.assertEqual('1.2.3.4',
                     preference_tool.getPreferredOoodocServerAddress('localhost'))
    self.assertEqual(large_image_height,
                     preference_tool.getPreferredLargeImageHeight())

    # check a user can't edit preference which are marked for manager
    self.assertRaises(Unauthorized, user_pref.edit, preferred_ooodoc_server_address="localhost")
497 498 499
    # even if there is System Preference enabled getActivePreference shall return
    # user preference
    self.assertEqual(user_pref, preference_tool.getActivePreference())
500
    self.assertEqual(system_pref, preference_tool.getActiveSystemPreference())
501

502 503 504 505
def test_suite():
  suite = unittest.TestSuite()
  suite.addTest(unittest.makeSuite(TestPreferences))
  return suite