Example #1
0
 def testClone(self):
     self._make_testapp()
     (child_stdin, child_stdout, child_stderr) = popen3("%s push -v my-app couchapp-test" % self.cmd)
             
     design_doc = self.db['_design/my-app']
     
     app_dir =  os.path.join(self.tempdir, "couchapp-test")
     
     (child_stdin, child_stdout, child_stderr) = popen3("%s clone %s %s" % (
                 self.cmd, "http://127.0.0.1:5984/couchapp-test/_design/my-app",
                 app_dir))
                 
     # should create .couchapprc
     self.assert_(os.path.isfile(os.path.join(app_dir, ".couchapprc")))
      
      
     # should clone the views
     self.assert_(os.path.isdir(os.path.join(app_dir, "views")))
     
     # should create foo/bar.txt file
     self.assert_(os.path.isfile(os.path.join(app_dir, 'foo/bar.txt')))
     
     # should create lib/helpers/math.js file
     self.assert_(os.path.isfile(os.path.join(app_dir, 'lib/helpers/math.js')))
     
     # should work when design doc is edited manually
     design_doc['test.txt'] = "essai"
     self.db['_design/my-app'] = design_doc
     deltree(app_dir)
     (child_stdin, child_stdout, child_stderr) = popen3("%s clone %s %s" % (self.cmd, 
                 "http://127.0.0.1:5984/couchapp-test/_design/my-app",
                 app_dir))
     self.assert_(os.path.isfile(os.path.join(app_dir, 'test.txt')))
     
     # should work when a view is added manually
     design_doc["views"]["more"] = { "map": "function(doc) { emit(null, doc); }" }
     self.db['_design/my-app'] = design_doc
     deltree(app_dir)
     (child_stdin, child_stdout, child_stderr) = popen3("%s clone %s %s" % (
                 self.cmd, "http://127.0.0.1:5984/couchapp-test/_design/my-app",
                 app_dir))
     self.assert_(os.path.isfile(os.path.join(app_dir, 'views/example/map.js')))
     
     # should work without manifest
     del design_doc['couchapp']['manifest']
     self.db['_design/my-app'] = design_doc
     deltree(app_dir)
     (child_stdin, child_stdout, child_stderr) = popen3("%s clone %s %s" % (
                 self.cmd, "http://127.0.0.1:5984/couchapp-test/_design/my-app",
                 app_dir))
     self.assert_(os.path.isfile(os.path.join(app_dir, 'views/example/map.js')))
     
     # should create foo/bar without manifest
     self.assert_(os.path.isfile(os.path.join(app_dir, 'foo/bar')))
     
     # should create lib/helpers.json without manifest
     self.assert_(os.path.isfile(os.path.join(app_dir, 'lib/helpers.json')))
Example #2
0
    def testPushDocs(self):
        os.chdir(self.tempdir)
        docsdir = os.path.join(self.tempdir, 'docs')
        os.makedirs(docsdir)
        
        # create 2 apps
        (child_stdin, child_stdout, child_stderr) = popen3("%s generate docs/app1" % self.cmd)
        (child_stdin, child_stdout, child_stderr) = popen3("%s generate docs/app2" % self.cmd)

        
        (child_stdin, child_stdout, child_stderr) = popen3("%s pushdocs docs/ http://127.0.0.1:5984/couchapp-test" % self.cmd)
        
        alldocs = self.db.all_docs()['rows']
        self.assert_(len(alldocs) == 2)
        
        self.assert_('_design/app1' == alldocs[0]['id'])
Example #3
0
 def testGenerate(self):
     (child_stdin, child_stdout, child_stderr) = popen3("%s generate my-app" % self.cmd)
     # should create application dir
     self.assert_(os.path.isdir(self.app_dir))
     # should create view dir
     self.assert_(os.path.isdir(os.path.join(self.app_dir, 'views')))
     # should create attachments dir
     self.assert_(os.path.isdir(os.path.join(self.app_dir, '_attachments')))
     # should create show dir
     self.assert_(os.path.isdir(os.path.join(self.app_dir, 'shows')))
     # should create vendor dir
     self.assert_(os.path.isdir(os.path.join(self.app_dir, 'vendor')))
     # deep attachment test
     self.assert_(os.path.isfile(os.path.join(self.app_dir, '_attachments', 'style/main.css')))
Example #4
0
 def testGenerate(self):
     os.chdir(self.tempdir) 
     (child_stdin, child_stdout, child_stderr) = popen3("%s generate my-app" % self.cmd)
     appdir = os.path.join(self.tempdir, 'my-app')
     self.assert_(os.path.isdir(appdir) == True)
     cfile = os.path.join(appdir, '.couchapprc')
     self.assert_(os.path.isfile(cfile) == True)
     
     self.assert_(os.path.isdir(os.path.join(appdir, '_attachments')) == True)
     self.assert_(os.path.isfile(os.path.join(appdir, '_attachments', 'index.html')) == True)
     self.assert_(os.path.isfile(os.path.join(self.app_dir, '_attachments', 'style', 'main.css')))
     self.assert_(os.path.isdir(os.path.join(appdir, 'views')) == True)
     self.assert_(os.path.isdir(os.path.join(appdir, 'shows')) == True)
     self.assert_(os.path.isdir(os.path.join(appdir, 'lists')) == True)
Example #5
0
 def testPushNoAtomic(self):
     self._make_testapp()
     (child_stdin, child_stdout, child_stderr) = popen3("%s push --no-atomic my-app couchapp-test" % self.cmd)
     
     # any design doc created ?
     design_doc = None
     try:
         design_doc = self.db.open_doc('_design/my-app')
     except ResourceNotFound:
         pass
     self.assert_(design_doc is not None)
     
     # there are 3 revisions (1 doc creation + 2 attachments)
     self.assert_(design_doc['_rev'].startswith('3-'))
     
     # should create view
     self.assert_('function' in design_doc['views']['example']['map'])
     
     # should use macros
     self.assert_('stddev' in design_doc['views']['example']['map'])
     self.assert_('ejohn.org' in design_doc['shows']['example-show'])
     
     # should create index
     self.assert_(design_doc['_attachments']['index.html']['content_type'] == 'text/html')
     
     # should create manifest
     self.assert_('foo/' in design_doc['couchapp']['manifest'])
     
     # should push and macro the doc shows
     self.assert_('Generated CouchApp Form Template' in design_doc['shows']['example-show'])
     
     # should push and macro the view lists
     self.assert_('Test XML Feed' in design_doc['lists']['feed'])
     
     # should allow deeper includes
     self.assertFalse('"helpers"' in design_doc['shows']['example-show'])
     
     # deep require macros
     self.assertFalse('"template"' in design_doc['shows']['example-show'])
     self.assert_('Resig' in design_doc['shows']['example-show'])
Example #6
0
__extension_name__ = "Mercurial vendor handler"
__copyright__ = "Copyright 2008,2009  Benoit Chesneau <*****@*****.**>"
__doc__ = "couchapp vendor install|update hg://somerepo (repo available via http, use http+ssh:// for ssh repos)"


from couchapp.errors import VendorError
from couchapp.utils import locate_program, popen3

def fetch(ui, url, path, *args, **opts):
    """ return git cmd path """
    if url.startswith("hg+ssh://"):
        url = url[8:]
    else:
        url = url.replace("hg://", "http://")
    try:
        cmd = locate_program("hg", raise_error=True)
    except ValueError, e:
        raise VendorError(e)
        
    cmd += " clone %s %s" % (url, path)

   # exec cmd
    (child_stdin, child_stdout, child_stderr) = popen3(cmd)
    err = child_stderr.read()
    if ui.verbose >=2:
        ui.logger.info(child_stdout.read())
    if err:
        raise VendorError(str(err))    
    return 

scheme = ['hg', 'hg+ssh']
Example #7
0
 def execute(cmd):
     return utils.popen3(cmd)
Example #8
0
 def testGenerateResource(self):
     cmd = "python %s" % self.couchapp_bin
     self._make_testapp(self.tempdir)
     (child_stdin, child_stdout, child_stderr) = popen3("%s generate --attributes title,author,body resource %s blog_post" % (cmd, self.tempdir))
     self.assert_(os.path.isfile(os.path.join(self.tempdir, '_attachments', 'blog_posts', 'new.html')) == True)