def resource_created(self, resource, context): import trac.db_default from multiproduct.env import EnvironmentStub # Don't populate product database when running from within test # environment stub as test cases really don't expect that ... if isinstance(self.env, EnvironmentStub): return product = resource self.log.debug("Adding product info (%s) to tables:" % product.prefix) with self.env.db_direct_transaction as db: # create the default entries for this Product from defaults for table in trac.db_default.get_data(db): if not table[0] in self.PRODUCT_POPULATE_TABLES: continue self.log.debug(" -> %s" % table[0]) cols = table[1] + ('product', ) rows = [p + (product.prefix, ) for p in table[2]] db.executemany( "INSERT INTO %s (%s) VALUES (%s)" % (table[0], ','.join(cols), ','.join(['%s' for c in cols])), rows) # Import default pages in product wiki wikiadmin = WikiAdmin(ProductEnvironment(self.env, product.prefix)) pages = ('TitleIndex', 'RecentChanges', 'InterTrac', 'InterWiki') for page in pages: filename = resource_filename('trac.wiki', 'default-pages/' + page) wikiadmin.import_page(filename, page)
class WikiAdminTestCase(unittest.TestCase): page_text = 'Link to WikiStart' def setUp(self): self.env = EnvironmentStub() self.env.path = tempfile.mkdtemp(prefix='trac-tempenv-') self.tmpdir = os.path.join(self.env.path, 'tmp') os.mkdir(self.tmpdir) self.filename = os.path.join(self.tmpdir, 'file.txt') create_file(self.filename, self.page_text) self.admin = WikiAdmin(self.env) with self.env.db_transaction: for name, readonly in (('WritablePage', [0, 1, 0]), ('ReadOnlyPage', [1, 0, 1, 0, 1])): for r in readonly: page = WikiPage(self.env, name) page.text = '[wiki:%s@%d]' % (name, page.version + 1) page.readonly = r page.save('trac', '') def tearDown(self): self.env.reset_db_and_disk() def _import_page(self, *args, **kwargs): with open(os.devnull, 'wb') as devnull: stdout = sys.stdout try: sys.stdout = devnull self.admin.import_page(*args, **kwargs) finally: sys.stdout = stdout def test_import_page_new(self): self._import_page(self.filename, 'NewPage') page = WikiPage(self.env, 'NewPage') self.assertEqual('NewPage', page.name) self.assertEqual(1, page.version) self.assertEqual(self.page_text, page.text) self.assertEqual(0, page.readonly) def test_import_page_readonly(self): page = WikiPage(self.env, 'ReadOnlyPage') self.assertEqual(5, page.version) self.assertEqual(1, page.readonly) self.assertNotEqual(self.page_text, page.text) self._import_page(self.filename, 'ReadOnlyPage') page = WikiPage(self.env, 'ReadOnlyPage') self.assertEqual(6, page.version) self.assertEqual(1, page.readonly) self.assertEqual(self.page_text, page.text) def test_import_page_not_readonly(self): page = WikiPage(self.env, 'WritablePage') self.assertEqual(3, page.version) self.assertEqual(0, page.readonly) self.assertNotEqual(self.page_text, page.text) self._import_page(self.filename, 'WritablePage') page = WikiPage(self.env, 'WritablePage') self.assertEqual(4, page.version) self.assertEqual(0, page.readonly) self.assertEqual(self.page_text, page.text) def test_import_page_uptodate(self): page = WikiPage(self.env, 'WritablePage') self.assertEqual(3, page.version) self.assertEqual(0, page.readonly) create_file(self.filename, page.text) page_text = page.text self._import_page(self.filename, 'WritablePage') page = WikiPage(self.env, 'WritablePage') self.assertEqual(3, page.version) self.assertEqual(0, page.readonly) self.assertEqual(page_text, page.text)