Changeset 35144

Show
Ignore:
Timestamp:
04/12/06 15:45:24 (3 years ago)
Author:
gracinet
Message:

#1608: datamodel is instancied if necessary in ProxyTool?.createRevision

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • CPSCore/trunk/ProxyTool.py

    r30942 r35144  
    4444     REQUEST_LANGUAGE_KEY 
    4545from Products.CPSUtil.session import sessionGet 
     46from Products.CPSUtil.integration import isProductPresent 
     47try: 
     48    from Products.CPSSchemas.DataModel import DataModel 
     49except ImportError: 
     50    DATAMODEL_PRESENT = False 
     51else: 
     52    DATAMODEL_PRESENT = True 
    4653 
    4754from zope.app.event.interfaces import IObjectModifiedEvent 
     
    165172            ob, rev = repotool.copyRevision(docid, from_rev) 
    166173        else: 
     174            dm = kw.get('datamodel') 
     175            if dm is None and DATAMODEL_PRESENT: 
     176                dm = DataModel(None) 
     177                kw['datamodel'] = dm 
     178            if dm is not None: 
     179                dm._setObject(None, proxy=proxy) 
    167180            ob, rev = repotool.createRevision(docid, type_name, *args, **kw) 
    168181        if hasattr(aq_base(ob), 'setLanguage'): 
  • CPSCore/trunk/tests/dummy.py

    r24888 r35144  
    6565            return DummyTypeInfo('Dummy Content') 
    6666        return None 
     67 
     68class DummyObjectRepositoryTool(Folder): 
     69    _last_calls = {} 
     70 
     71    def createRevision(self, docid, type_name, *args, **kw): 
     72        self._last_calls['createRevision'] = {'docid': docid, 
     73                                              'type_name': type_name, 
     74                                              'args': args, 
     75                                              'kw': kw} 
     76        rev = 17 
     77 
     78        id = 'ob_%s_%s' % (docid, rev)  #Copy/Paste from DummyProxyTool 
     79        if id not in self.objectIds(): 
     80            doc = SimpleItem(id) 
     81            doc._setId(id) 
     82            doc.portal_type = 'Some Type' 
     83            self._setObject(id, doc) 
     84        return self._getOb(id), rev 
     85 
     86    def getFreeDocid(self): 
     87        return 'a free docid from repotool' 
     88 
     89    def isObjectInRepository(self, ob): 
     90        return ob in self.objectValues() 
     91 
  • CPSCore/trunk/tests/test_indexing.py

    r33451 r35144  
    7070class FakeTI: 
    7171    _isTypeInformation = True 
    72     def _constructInstance(self, container, id): 
     72    def _constructInstance(self, container, id, **kw): 
    7373        ob = DummyOb(id) 
    7474        container._setObject(id, ob) 
  • CPSCore/trunk/tests/test_proxy.py

    r35129 r35144  
    3434 
    3535from Products.CPSCore.ProxyTool import ProxyTool 
     36from Products.CPSCore.ProxyTool import DATAMODEL_PRESENT 
    3637from Products.CPSCore.ProxyBase import ProxyBase, ProxyFolder 
    3738 
    38 from dummy import DummyPortalUrl, DummyWorkflowTool, DummyRoot 
     39from dummy import DummyPortalUrl 
     40from dummy import DummyWorkflowTool 
     41from dummy import DummyRoot 
     42from dummy import DummyTypesTool 
     43from dummy import DummyObjectRepositoryTool 
    3944 
    4045from Products.CMFCore.permissions import View 
     
    7883        self.id = id 
    7984        ProxyBase.__init__(self, **kw) 
    80  
    8185 
    8286def sortinfos(infos): 
     
    264268        root = self.root 
    265269 
     270        root._setObject('portal_repository', DummyObjectRepositoryTool()) 
    266271        root._setObject('portal_proxies', ProxyTool()) 
    267272        root._setObject('portal_url', DummyPortalUrl()) 
    268273        root._setObject('portal_workflow', DummyWorkflowTool()) 
     274        root._setObject('portal_types', DummyTypesTool()) 
    269275 
    270276        root.docs = Folder() 
     
    340346        self.assertRaises(KeyError, ptool.getProxyInfosFromDocid, 'blah') 
    341347 
     348    def test_createRevision(self): 
     349        # see #1608 
     350        ptool = self.root.portal_proxies 
     351        ptool.ignore_events = True # Dummy repotool cannot cope 
     352 
     353        proxy = ProxyBase(1357, language_revs={'en': 78}) 
     354 
     355        # preparing the proxy to insulate what's being tested 
     356        def getPortalTypeName(): 
     357            return 'Dummy Content' 
     358        def dontReindex(): 
     359            pass 
     360        proxy.getPortalTypeName = getPortalTypeName 
     361        proxy.proxyChanged = dontReindex 
     362 
     363        # call 
     364        rev = ptool.createRevision(proxy, 'fr') 
     365 
     366        if not DATAMODEL_PRESENT: 
     367            return 
     368 
     369        # datamodel was constructed and tied to the proxy 
     370        passed = self.root.portal_repository._last_calls['createRevision'] 
     371        dm = passed['kw'].get('datamodel') 
     372        self.assert_(dm is not None) 
     373        self.assertEquals(dm.getProxy(), proxy) 
     374 
     375        # previous datamodel stays the same, but is now tied to the proxy 
     376        from Products.CPSCore.ProxyTool import DataModel 
     377        dm = DataModel(None) 
     378        rev = ptool.createRevision(proxy, 'fr2', datamodel=dm) 
     379        passed = self.root.portal_repository._last_calls['createRevision'] 
     380        passed_dm = passed['kw'].get('datamodel') 
     381        self.assert_(passed_dm is dm) 
     382        self.assertEquals(dm.getProxy(), proxy) 
     383 
     384 
    342385 
    343386def test_suite():