from testsupport import * ZopeTestCase.installProduct('ZCatalog') ZopeTestCase.installProduct('ZWiki') from Products.ZWiki.Outline import Outline def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(Tests)) return suite def setupSomePageHierarchy(self): self.page.create('RootPage') self.wiki.RootPage.reparent(REQUEST=self.request) self.wiki.RootPage.create('ChildPage') self.wiki.ChildPage.create('GrandChildPage') self.page.create('SingletonPage') self.wiki.SingletonPage.reparent(REQUEST=self.request) class Tests(ZwikiTestCase): def afterSetUp(self): ZwikiTestCase.afterSetUp(self) setupSomePageHierarchy(self) def beforeTearDown(self): # this usually gets generated.. clear it so next tests # will get a fresh one self.wiki._delObject('outline') def test_wikiOutline(self): self.assert_(hasattr(self.wiki,'outline')) o = self.page.wikiOutline() self.assertEquals(o,self.wiki.outline) self.assertEquals(o.nesting(), [['RootPage', ['ChildPage', 'GrandChildPage']], 'SingletonPage', 'TestPage', ]) # stray empty parents should be ignored self.wiki.TestPage.parents = [''] self.wiki.ChildPage.parents.append('') o = self.page.wikiOutline() self.assertEquals(o.nesting(), [['RootPage', ['ChildPage', 'GrandChildPage']], 'SingletonPage', 'TestPage', ]) self.assertEquals(o.parentmap()['TestPage'],[]) self.assertEquals(o.parentmap()['ChildPage'],['RootPage']) def test_context(self): self.assertEquals(self.wiki.RootPage.context(), ' ') # XXX should be as below I think self.assertEquals(self.wiki.RootPage.context(with_siblings=1), '\n' ) self.assertEquals(self.wiki.ChildPage.context(), '\n' ) def test_reparent(self): p = self.wiki.SingletonPage self.wiki.RootPage.create('Parent Page') self.wiki.RootPage.create('Parent Page 2') self.wiki.RootPage.create('Parent Page 3') # no args clears parents p.parents = ['old'] p.reparent(REQUEST=self.request) self.assertEquals(p.parents,[]) # invalid page names are stripped p.reparent(parents=['nosuchpage'],REQUEST=self.request) self.assertEquals(p.parents,[]) # reparent by id, leaves title in parents p.reparent(parents=['ParentPage'],REQUEST=self.request) self.assertEquals(p.parents,['Parent Page']) # reparent by fuzzy name p.reparent(parents=[' Parent page 2..'],REQUEST=self.request) self.assertEquals(p.parents,['Parent Page 2']) # reparent by freeform name, as string p.reparent(parents='Parent Page 3',REQUEST=self.request) self.assertEquals(p.parents,['Parent Page 3']) # duplicates are removed p.reparent(parents=['ParentPage','Parent Page','parent-page'], REQUEST=self.request) self.assertEquals(p.parents,['Parent Page']) # the wiki outline object is also updated self.assertEquals(p.wikiOutline().parents('SingletonPage'), ['Parent Page']) p.reparent(parents=['TestPage'],REQUEST=self.request) self.assertEquals(p.wikiOutline().parents('SingletonPage'), ['TestPage']) def test_offspringIdsAsList(self): self.assertEquals(self.wiki.RootPage.offspringIdsAsList(), ['ChildPage','GrandChildPage']) self.assertEquals(self.wiki.ChildPage.offspringIdsAsList(), ['GrandChildPage']) self.assertEquals(self.wiki.GrandChildPage.offspringIdsAsList(), [])