def test_comaintain_package(self, login_func): """ Test the comaintain_package function. """ login_func.return_value=None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb.APP, user): output = self.app.get( '/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) output = self.app.get( '/acl/random/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb.APP, user): output = self.app.get( '/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">You must be a packager</li>' in output.data)
def test_is_pkgdb_admin(self): """ Test the is_pkgdb_admin function of pkgdb2. """ user = FakeFasUser() out = pkgdb2.is_pkgdb_admin(user) self.assertEqual(out, False) user.groups = [] out = pkgdb2.is_pkgdb_admin(user) self.assertEqual(out, False) user = FakeFasUser() out = pkgdb2.is_pkgdb_admin(None) self.assertEqual(out, False) user = FakeFasUserAdmin() out = pkgdb2.is_pkgdb_admin(user) self.assertEqual(out, True) pkgdb2.APP.config['ADMIN_GROUP'] = 'sysadmin-main' out = pkgdb2.is_pkgdb_admin(user) self.assertEqual(out, False) # Reset the ADMIN_GROUP for the other tests pkgdb2.APP.config['ADMIN_GROUP'] = ('sysadmin-main', 'sysadmin-cvs')
def test_api_package_retire3(self, login_func, mock_func): """ Test a third time the api_package_retire function. """ login_func.return_value = None create_package_acl(self.session) mock_func.log.return_value = '' # Redirect as you are not a packager user = FakeFasUser() user.groups = [] # Add the EPEL 7 collection collection = model.Collection( name='Fedora EPEL', version='7', status='Active', owner='kevin', branchname='epel7', dist_tag='.el7', ) self.session.add(collection) self.session.commit() # Add guake to epel7 guake_pkg = model.Package.by_name(self.session, 'guake') el7_collec = model.Collection.by_name(self.session, 'epel7') pkgltg = model.PackageListing( point_of_contact='orphan', status='Orphaned', package_id=guake_pkg.id, collection_id=el7_collec.id, ) self.session.add(pkgltg) self.session.commit() # Retire an orphaned package on an EPEL branch user = FakeFasUser() data = { 'pkgnames': 'guake', 'branches': ['epel7'], } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/retire/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "messages": [""], "output": "ok" } )
def test_package_request_new(self, login_func, mock_func): """ Test the package_request_new function. """ login_func.return_value = None mock_func.return_value = ['pingou', 'toshio'] create_package_acl(self.session) data = { 'pkgname': 'gnome-terminal', 'summary': 'terminal for GNOME', 'description': 'desc', 'review_url': 'https://bz.rh.c/123', 'status': 'Approved', 'critpath': False, 'poc': 'pingou', 'upstream_url': 'http://gnome.org', 'branches': 'master', 'namespace': 'rpms', } user = FakeFasUser() user.username = '******' data['branches'] = 'epel7' with user_set(pkgdb2.APP, user): # Branch EPEL7 does not exist output = self.app.post( '/request/package/', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">'epel7' is not a valid choice' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data['csrf_token'] = csrf_token data['branches'] = 'master' # All good user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/request/package/', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">user: pingou request package: ' 'gnome-terminal on branch master</li>' in output.data)
def test_admin_new_release(self): """ Test the admin_new_release function. """ user = None with user_set(app.APP, user): output = self.app.get('/admin/new', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<title>OpenID transaction in progress</title>' in output.data) user = FakeFasUser() user.groups = [] user.cla_done = False with user_set(app.APP, user): output = self.app.get('/admin/new', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You are not an admin</li>' in output.data) user = FakeFasUser() user.groups = [] with user_set(app.APP, user): output = self.app.get('/admin/new', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You are not an admin</li>' in output.data) user = FakeFasUser() user.groups.append('sysadmin-main') with user_set(app.APP, user): output = self.app.get('/admin/new') self.assertEqual(output.status_code, 200) self.assertTrue( '<title> New release' in output.data) self.assertTrue( "<label for=\"releasenum\">Release number <span " "class='error'>*</span></label>" in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'csrf_token': csrf_token, 'releasenum': 20, 'support': 'RELEASE', } output = self.app.post( '/admin/new', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Release "20" added</li>' in output.data) self.assertTrue("<a href='/release/20'>" in output.data) self.assertTrue("<a href='/admin/20/edit'" in output.data)
def test_update_collection_status(self): """ Test the update_collection_status function. """ create_collection(self.session) collection = model.Collection.by_name(self.session, 'F-18') self.assertEqual(collection.status, 'Active') self.assertRaises( pkgdblib.PkgdbException, pkgdblib.update_collection_status, self.session, 'F-18', 'EOL', user=FakeFasUser(), ) pkgdblib.update_collection_status(self.session, 'F-18', 'EOL', user=FakeFasUserAdmin()) self.session.commit() msg = pkgdblib.update_collection_status(self.session, 'F-18', 'EOL', user=FakeFasUserAdmin()) self.assertEqual(msg, 'Collection "F-18" already had this status') collection = model.Collection.by_name(self.session, 'F-18') self.assertEqual(collection.status, 'EOL')
def test_dropcommit_package(self, bz_mail_func, login_func, mock_func): """ Test the dropcommit_package function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/dropcommit/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post('/acl/rpms/guake/dropcommit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) output = self.app.post('/acl/rpms/random/dropcommit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data)
def test_logout(self): """ Test the logout function. """ output = self.app.get('/logout') self.assertEqual(output.status_code, 302) output = self.app.get('/logout', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<title>Home - Kernel-test harness</title>' in output.data) user = FakeFasUser() with user_set(app.APP, user): output = self.app.get('/logout', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer logged-in</li>' in output.data) self.assertTrue( '<title>Home - Kernel-test harness</title>' in output.data) user = FakeFasUser() with user_set(app.APP, user): output = self.app.get( '/logout?next=/logout', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer logged-in</li>' in output.data) self.assertTrue( '<title>Home - Kernel-test harness</title>' in output.data) user = FakeFasUser() with user_set(app.APP, user): output = self.app.get( '/logout?next=/stats', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer logged-in</li>' in output.data) self.assertTrue( '<title>Stats - Kernel-test harness</title>' in output.data)
def test_package_orphan(self, login_func, mock_func): """ Test the package_orphan function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/devel/orphan', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You are not allowed to change the point ' 'of contact.</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/devel/orphan', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: devel</li>' in output.data) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/devel/orphan', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: devel</li>' in output.data) with user_set(pkgdb2.APP, user): output = self.app.get( '/package/random/devel/orphan', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_is_admin(self): """ Test the is_admin method. """ self.assertFalse(app.is_admin(None)) user = FakeFasUser() user.cla_done = False self.assertFalse(app.is_admin(user)) user = FakeFasUser() user.groups = [] self.assertFalse(app.is_admin(user)) user = FakeFasUser() user.groups.append('sysadmin-main') self.assertTrue(app.is_admin(user))
def test_comaintain_package(self, login_func): """ Test the comaintain_package function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You are already a co-maintainer on ' 'F-18</li>' in output.data) self.assertFalse( '<li class="message">ACLs updated</li>' in output.data) output = self.app.get('/acl/random/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) output = self.app.get('/acl/random/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="errors">You must be a packager</li>' in output.data)
def test_package_take(self, login_func, mock_func): """ Test the package_take function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/devel/take', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Package is not orphaned on devel</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/devel/orphan', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: devel</li>' in output.data) output = self.app.get('/package/guake/devel/take', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You have taken the package guake on ' 'branch devel</li>' in output.data) with user_set(pkgdb2.APP, user): output = self.app.get('/package/random/devel/take', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_pending_acl(self, login_func): """ Test the pending_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/pending/') self.assertTrue('<table id="pending">' in output.data) self.assertTrue( '<a href="/package/rpms/guake/acl/commit/">' in output.data) self.assertTrue( '<input type="submit" value="Update"/>' in output.data)
def test_watch_package(self, login_func): """ Test the watch_package function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/watch/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) output = self.app.get('/acl/random/watch/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data)
def test_add_collection(self): """ Test the add_collection function. """ self.assertRaises( pkgdblib.PkgdbException, pkgdblib.add_collection, session=self.session, clt_name='Fedora', clt_version='19', clt_status='Active', clt_publishurl=None, clt_pendingurl=None, clt_summary='Fedora 19 release', clt_description='Fedora 19 collection', clt_branchname='F-19', clt_disttag='.fc19', clt_gitbranch='f19', user=FakeFasUser(), ) self.session.rollback() pkgdblib.add_collection( self.session, clt_name='Fedora', clt_version='19', clt_status='Active', clt_publishurl=None, clt_pendingurl=None, clt_summary='Fedora 19 release', clt_description='Fedora 19 collection', clt_branchname='F-19', clt_disttag='.fc19', clt_gitbranch='f19', user=FakeFasUserAdmin(), ) self.session.commit() collection = model.Collection.by_name(self.session, 'F-19') self.assertEqual( "Collection(u'Fedora', u'19', u'Active', u'admin', " "publishurltemplate=None, pendingurltemplate=None, " "summary=u'Fedora 19 release', " "description=u'Fedora 19 collection')", collection.__repr__())
def test_logout(self): """ Test the logout function. """ output = self.app.get('/logout') self.assertEqual(output.status_code, 301) output = self.app.get('/logout/') self.assertEqual(output.status_code, 302) output = self.app.get('/logout/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<h1>Fedora Package Database' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/logout/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer logged-in</li>' in output.data) self.assertTrue('<h1>Fedora Package Database' in output.data)
def test_admin_edit_release(self): """ Test the admin_new_release function. """ self.test_admin_new_release() user = FakeFasUser() user.groups.append('sysadmin-kernel') with user_set(app.APP, user): output = self.app.get('/admin/21/edit', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">No release 21 found</li>' in output.data) output = self.app.get('/admin/20/edit') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1> Release: 20 </h1>' in output.data) self.assertTrue( '<form action="/admin/20/edit" method="POST">' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'csrf_token': csrf_token, 'releasenum': 21, 'support': 'RAWHIDE', } output = self.app.post( '/admin/20/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Release "21" updated</li>' in output.data) self.assertTrue("<a href='/release/21'>" in output.data) self.assertTrue("Fedora Rawhide" in output.data) self.assertTrue("<a href='/admin/21/edit'" in output.data) self.assertFalse("<a href='/release/20'>" in output.data) self.assertFalse("<a href='/admin/20/edit'" in output.data)
def test_pending_acl_approve(self, login_func, mock_func, bz_email): """ Test the pending_acl_approve function. """ login_func.return_value = None bz_email.return_value = True create_package_acl(self.session) mock_func.return_value = ['pingou', 'ralph', 'kevin', 'toshio'] user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/pending/') self.assertTrue('<table id="pending">' in output.data) self.assertTrue( '<a href="/package/rpms/guake/acl/commit/">' in output.data) self.assertTrue( '<input type="submit" value="Update"/>' in output.data) # No CSRF provided output = self.app.post('/acl/pending/approve', follow_redirects=True) self.assertTrue('<table id="pending">' in output.data) self.assertTrue( '<a href="/package/rpms/guake/acl/commit/">' in output.data) self.assertTrue( '<input type="submit" value="Update"/>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Valid request data = {'csrf_token': csrf_token} output = self.app.post('/acl/pending/approve', data=data, follow_redirects=True) self.assertTrue( '<li class="message">All ACLs approved</li>' in output.data) self.assertFalse('<table id="pending">' in output.data) self.assertFalse( '<a href="/package/rpms/guake/acl/commit/">' in output.data) self.assertFalse( '<input type="submit" value="Update"/>' in output.data)
def test_login(self): """ Test the login function. """ output = self.app.get('/login') self.assertEqual(output.status_code, 200) self.assertTrue( '<title>OpenID transaction in progress</title>' in output.data) app.APP.config['ADMIN_GROUP'] = 'sysadmin-main' output = self.app.get( '/login?next=/login', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<title>OpenID transaction in progress</title>' in output.data) user = FakeFasUser() with user_set(app.APP, user): output = self.app.get( '/login?next=/login', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Fedora Kernel Test Results</h1>' in output.data)
def test_request_acl_all_branch(self, bz_mail_func, login_func, mock_func): """ Test the request_acl_all_branch function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/request/approveacls/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post('/acl/rpms/guake/request/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="message">ACL approveacls requested on branch f18</li>' in output.data) self.assertTrue( 'class="message">ACL approveacls requested on branch master</l' in output.data) self.assertEqual(output.data.count('<a class="pending"'), 2) output = self.app.post('/acl/rpms/guake/request/foobar/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Invalid ACL provided foobar.</li>' in output.data) output = self.app.post('/acl/rpms/barfoo/request/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user.username = '******' user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post('/acl/rpms/guake/request/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You must be a packager to apply to the ' 'ACL: commit on guake</li>' in output.data) output = self.app.post('/acl/rpms/guake/request/watchcommits/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACL watchcommits requested on branch ' 'f18</li>' in output.data) self.assertTrue( '<li class="message">ACL watchcommits requested on branch ' 'master</li>' in output.data)
def test_unwatch_package(self, bz_mail_func, login_func, mock_func): """ Test the unwatch_package function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/unwatch/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post('/acl/rpms/guake/unwatch/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You cannot remove `Watch*` ACLs from ' 'the Point of Contact.</li>' in output.data) output = self.app.post('/acl/rpms/random/unwatch/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) # Give watchbugzilla to ralph on guake/master guake_pkg = model.Package.by_name(self.session, 'rpms', 'guake') devel_collec = model.Collection.by_name(self.session, 'master') pklist_guake_devel = model.PackageListing.by_pkgid_collectionid( self.session, guake_pkg.id, devel_collec.id) packager = model.PackageListingAcl( fas_name='ralph', packagelisting_id=pklist_guake_devel.id, acl='watchbugzilla', status='Approved', ) self.session.add(packager) self.session.commit() # Drop watch* for ralph user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post('/acl/rpms/guake/unwatch/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) output = self.app.post('/acl/rpms/random/unwatch/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data)
def test_collection_edit(self, login_func): """ Test the collection_edit function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/collection/master/edit') self.assertEqual(output.status_code, 302) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/collection/master/edit') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Edit collection</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/collection/random/edit') self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No collection of this name found.</li>' in output.data) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/collection/f17/edit') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Edit collection</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] collections = model.Collection.by_name(self.session, 'f17') self.assertEqual( "Collection(u'Fedora', u'17', u'Active', owner:u'toshio')", collections.__repr__()) self.assertEqual(collections.branchname, 'f17') data = { 'clt_name': 'Fedora', 'version': '17', 'clt_status': 'Active', 'branchname': 'f17', 'dist_tag': '.fc17', 'kojiname': 'f17', 'csrf_token': csrf_token, } output = self.app.post('/collection/f17/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Collection "f17" edited</li>' in output.data) collections = model.Collection.by_name(self.session, 'f17') self.assertEqual( "Collection(u'Fedora', u'17', u'Active', owner:u'toshio')", collections.__repr__()) self.assertEqual(collections.branchname, 'f17')
def test_acl_reassign(self, login_func, mock_func): """ Test the api_acl_reassign function. """ login_func.return_value = None output = self.app.post('/api/package/acl/reassign') self.assertEqual(output.status_code, 301) user = FakeFasUser() with user_set(APP, user): output = self.app.post('/api/package/acl/reassign/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual(data, { "output": "notok", "error": "Invalid input submitted", }) create_package_acl(self.session) data = { 'pkgnames': ['guake', 'geany'], 'branches': 'master', 'namespace': 'rpms', 'poc': 'toshio', } # Fails is user is not a packager. user = FakeFasUser() with user_set(APP, user): exp = { "error": "User \"toshio\" is not in the packager group", "output": "notok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp) mock_func.get_packagers.return_value = ['pingou', 'ralph', 'toshio'] mock_func.log.return_value = '' # Fails for geany is user is a packager but not in the group that # is the current poc - works for guake with user_set(APP, user): exp = { "error": "You are not part of the group \"gtk-sig\", you " "are not allowed to change the point of contact.", "messages": [""], "output": "ok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) print output.data self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Works data = { 'pkgnames': ['geany'], 'branches': 'master', 'namespace': 'rpms', 'poc': 'toshio', } user.groups.append('gtk-sig') with user_set(APP, user): exp = {"messages": [''], "output": "ok"} output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Check if it fails normally user.username = '******' with user_set(APP, user): exp = { "error": "You are not allowed to change the point of contact.", "output": "notok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp)
def test_package_give_acls(self, login_func, mock_func): """ Test the package_give_acls function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/give/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'watchbugzilla', 'user': '******', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/give/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">ACLs updated</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/acl/foo/give/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) self.assertTrue('<h1>Search packages</h1>' in output.data) output = self.app.get('/acl/guake/give/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'commit', 'user': '******', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/give/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="error">You are not allowed to update ACLs of someone ' 'else.</li>' in output.data)
def test_collection_new(self, login_func): """ Test the api_collection_new function. """ login_func.return_value = None # Redirect as you are not admin user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/new/') self.assertEqual(output.status_code, 302) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/new/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Invalid input submitted", "error_detail": [ "dist_tag: This field is required.", "version: This field is required.", "clt_status: Not a valid choice", "kojiname: This field is required.", "clt_name: This field is required.", "branchname: This field is required.", ], "output": "notok", }) data = { 'clt_name': 'Fedora EPEL', 'version': '6', 'branchname': 'EL-6', 'clt_status': 'ACTIVE', 'dist_tag': '.el6', 'kojiname': 'epel6' } with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/new/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Invalid input submitted", "error_detail": ["clt_status: Not a valid choice"], "output": "notok" }) # Need to find out how to set flask.g.fas_user data = { 'clt_name': 'Fedora EPEL', 'version': '6', 'branchname': 'EL-6', 'clt_status': 'Active', 'dist_tag': '.el6', 'kojiname': 'epel6' } with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/new/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual(data, { "messages": ["Collection \"EL-6\" created"], "output": "ok" })
def test_package_give(self, login_func, mock_func): """ Test the package_give function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': '', 'pkg_poc': '', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data) self.assertEqual(output.status_code, 200) self.assertEqual( output.data.count( '<td class="errors">This field is required.</td>' ), 1) with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_poc': 'limb', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">The point of contact of this package ' 'is not in the packager group</li>' in output.data) mock_func.get_packagers.return_value = ['spot'] mock_func.log.return_value = '' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_poc': 'spot', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<h1 property="doap:name">guake</h1>' in output.data) self.assertTrue('<a href="/packager/spot/">' in output.data) with user_set(pkgdb2.APP, user): output = self.app.get('/package/random/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_poc': 'spot', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<td><select id="pkg_branch" multiple ''name="pkg_branch">' '</select></td>' in output.data)
def test_update_acl(self, login_func, mock_func): """ Test the update_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertEqual( output.data.count('<td class="users">'), 1) # Fails `toshio` is not a packager user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="Approved">Approved' in output.data) self.assertEqual( output.data.count('class="username">'), 1) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">User "toshio" is not in the ' 'packager group</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): # Invalid package name output = self.app.get( '/package/foobar/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) # Invalid ACL name output = self.app.get( '/package/guake/acl/foobar/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Invalid ACL to update.</li>' in output.data) # GET works output = self.app.get( '/package/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="Approved">Approved' in output.data) self.assertEqual( output.data.count('class="username">'), 2) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'csrf_token': csrf_token, } # No user provided, so we don't know for who to update the ACLs output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Invalid input submitted</li>' in output.data) mock_func.return_value = ['pingou', 'ralph', 'toshio'] user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): # Get works output = self.app.get( '/package/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="Approved">Approved' in output.data) self.assertEqual( output.data.count('class="username">'), 1) # Only 2 approved ACLs output = self.app.get( '/package/guake/', follow_redirects=True) self.assertEqual(output.data.count('title="ACL Approved"'), 2) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } # Toshio drops his ACL request on master output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): data = { 'branch': 'master', 'acls': 'foobar', 'user': '******', 'csrf_token': csrf_token, } # Invalid ACL status provided output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Invalid ACL: foobar</li>' in output.data) data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } # Toshio is no longer requesting, thus is not in the list of # users and thus makes the request invalid output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h4>Package Administrator(s)</h4>' in output.data) self.assertTrue( '<li class="error">Invalid user: toshio</li>' in output.data) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): # Toshio asks for commit on master data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): # Invalid branch data = { 'branch': 'foo', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # Nothing to change data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # Nothing to change (2) data = { 'branch': 'f18', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # package admin cannot remove the user's ACL data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Only the user can remove his/her ' 'ACL</li>' in output.data) # package admin grants commit to Toshio on master data = { 'branch': 'master', 'acls': 'Approved', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post( '/package/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) # One more approved ACL self.assertTrue(output.data.count('title="ACL Approved"'), 3)
def test_delete_package(self, login_func, utils_module): """ Test the delete_package function. """ login_func.return_value = None utils_module.get_packagers.return_value = ['pingou', 'toshio'] create_package_acl(self.session) data = {} # User is not an admin user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/delete', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">You are not an administrator of pkgdb' '</li>' in output.data) # User is an admin but no csrf user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/delete', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Invalid input</li>' in output.data) output = self.app.get('/package/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'csrf_token': csrf_token, } # User is not an admin but csrf user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/delete', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">You are not an administrator of pkgdb' '</li>' in output.data) # Check before deleting output = self.app.get('/packages/') self.assertEqual(output.status_code, 200) self.assertTrue( '<p>4 packages found</p>' in output.data) # User is an admin with csrf user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/delete', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Package guake deleted</li>' in output.data) self.assertTrue( '<p>3 packages found</p>' in output.data) output = self.app.post( '/package/random/delete', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_package_request_branch(self, login_func, mock_func): """ Test the package_request_branch function. """ login_func.return_value = None mock_func.get_packagers.return_value = ['pingou', 'toshio'] create_package_acl(self.session) data = { 'branches': ['epel7'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/foobar/request_branch', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) output = self.app.post( '/package/guake/request_branch', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">'epel7' is not a valid choice ' 'for this field</td>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': ['el6'], 'csrf_token': csrf_token, } # Input correct but user is not allowed user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/request_branch/0', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">User "kevin" is not in the ' 'packager group</li>' in output.data) data = { 'branches': ['el6'], 'csrf_token': csrf_token, } # All good user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/request_branch', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Branch el6 requested for user pingou</' in output.data) # Check the request authenticated user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/requests/1') self.assertEqual(output.status_code, 200) self.assertTrue('<h1>Update request: 1</h1>' in output.data) self.assertTrue( 'As current admin of the package you have the possibility' in output.data) self.assertTrue( '<form action="/package/requests/1"' in output.data) # Check the request un-authenticated with user_set(pkgdb2.APP, None): output = self.app.get('/package/requests/1') self.assertEqual(output.status_code, 200) self.assertTrue('<h1>Request: 1</h1>' in output.data) self.assertFalse( 'As current admin of the package you have the possibility' in output.data) self.assertFalse( '<form action="/package/requests/1"' in output.data)
def test_package_take(self, login_func, utils_module): """ Test the package_take function. """ login_func.return_value = None utils_module.get_packagers.return_value = ['pingou', 'toshio'] create_package_acl(self.session) data = { 'branches': ['master'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/take', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No branches orphaned found</li>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': ['master'], 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: master</li>' in output.data) data = { 'branches': ['foo'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/take', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">'foo' is not a valid choice ' 'for this field</td>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': ['master'], 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/take') self.assertEqual(output.status_code, 200) self.assertTrue( '<title> Select branches | PkgDB </title>' in output.data) output = self.app.get('/package/guake/take/0') self.assertEqual(output.status_code, 200) self.assertFalse( '<title> Select branches | PkgDB </title>' in output.data) output = self.app.post( '/package/guake/take', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You have taken the package guake on ' 'branch master</li>' in output.data) with user_set(pkgdb2.APP, user): output = self.app.post( '/package/random/take', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_package_unretire(self, login_func, utils_module): """ Test the package_unretire function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/orphan') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Oprhan and retire guake on F18 data = { 'branches': ['f18'], 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: f18</li>' in output.data) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">This package has been retired on ' 'branch: f18</li>' in output.data) # Start testing unretire with user_set(pkgdb2.APP, user): output = self.app.get( '/package/random/unretire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) output = self.app.post( '/package/random/unretire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) output = self.app.post( '/package/guake/unretire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">User "admin" is not in the ' 'packager group</li>' in output.data) utils_module.get_packagers.return_value = ['pingou', 'toshio'] user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get( '/package/guake/unretire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td><select id="branches" multiple name="branches">' '<option value="f18">f18</option></select></td>' in output.data) output = self.app.post( '/package/guake/unretire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Admins have been asked to un-retire ' 'branch: f18</li>' in output.data) output = self.app.post( '/package/guake/unretire/0', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Could not save the request for branch: ' 'f18, has it already been requested?</li>' in output.data)
def test_package_retire(self, login_func, utils_module): """ Test the package_retire function. """ login_func.return_value = None create_package_acl(self.session) # Check at the very beginning output = self.app.get('/package/guake/') self.assertEqual(output.data.count('Obsolete'), 0) self.assertEqual(output.data.count('Awaiting Review'), 3) data = { 'branches': ['foobar'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="errors">Only Admins are allowed to retire package ' 'here, you should use `fedpkg retire`.</li>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': ['master'], 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: master</li>' in output.data) data['branches'] = ['f18'] output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: f18</li>' in output.data) # Check after orphaning # Orphaning already drops the ACLs of the person doing the action output = self.app.get('/package/guake/') self.assertEqual(output.data.count('Obsolete'), 8) self.assertEqual(output.data.count('Awaiting Review'), 3) data = { 'branches': ['master'], 'csrf_token': csrf_token, } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="errors">Only Admins are allowed to retire package ' 'here, you should use `fedpkg retire`.</li>' in output.data) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/retire') self.assertEqual(output.status_code, 200) self.assertTrue( '<title> Select branches | PkgDB </title>' in output.data) output = self.app.get('/package/guake/retire/0') self.assertEqual(output.status_code, 200) self.assertFalse( '<title> Select branches | PkgDB </title>' in output.data) data['branches'] = ['foobar'] output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">'foobar' is not a valid choice ' 'for this field</td>' in output.data) # Retire F18 that has been orphaned before data['branches'] = ['f18'] output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">This package has been retired on ' 'branch: f18</li>' in output.data) # Package retired, clear all the ACLs on branch f18 output = self.app.get('/package/guake/') self.assertEqual(output.data.count('Obsolete'), 8) self.assertEqual(output.data.count('Awaiting Review'), 3) # Retire branch master data['branches'] = ['master'] output = self.app.post( '/package/guake/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">This package has been retired on ' 'branch: master</li>' in output.data) # Package retired, clear all the ACLs on master output = self.app.get('/package/guake/') self.assertEqual(output.data.count('Obsolete'), 12) self.assertEqual(output.data.count('Awaiting Review'), 0) with user_set(pkgdb2.APP, user): output = self.app.post( '/package/random/retire', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_api_package_unorphan(self, login_func, mock_func): """ Test the api_package_unorphan function. """ login_func.return_value = None # Redirect as you are not a packager user = FakeFasUser() user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/') self.assertEqual(output.status_code, 302) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Invalid input submitted", "error_detail": [ "pkgnames: This field is required.", "branches: This field is required.", "poc: This field is required.", ], "output": "notok" } ) mock_func.get_packagers.return_value = ['test'] data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "No package found by this name", "output": "notok" } ) create_package_acl(self.session) mock_func.log.return_value = '' # Unorphan a not-orphaned package data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Package \"guake\" is not orphaned on f18", "output": "notok" } ) # Orphan the package data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/orphan/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "messages": ["", ""], "output": "ok" } ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'f18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'orphan') self.assertEqual(pkg_acl[0].status, 'Orphaned') self.assertEqual(pkg_acl[1].collection.branchname, 'master') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'orphan') self.assertEqual(pkg_acl[1].status, 'Orphaned') # Unorphan the package for someone else data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "You are not allowed to update ACLs of someone " "else.", "output": "notok" } ) mock_func.get_packagers.return_value = ['pingou'] # Unorphan the package data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'pingou', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unorphan/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "messages": [ "Package guake has been unorphaned on f18 by pingou", "Package guake has been unorphaned on master by pingou" ], "output": "ok" } ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'f18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'pingou') self.assertEqual(pkg_acl[0].status, 'Approved') self.assertEqual(pkg_acl[1].collection.branchname, 'master') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'pingou') self.assertEqual(pkg_acl[1].status, 'Approved')
def test_request_acl(self, login_func): """ Test the request_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_acl': 'watchbugzilla', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">ACLs updated</li>' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) self.assertTrue( '<li class="errors">You must be a packager to apply to the ' 'ACL: commit on devel</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/test/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: test</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/test/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data)
def test_package_orphan(self, login_func, utils_module): """ Test the package_orphan function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/orphan') self.assertEqual(output.status_code, 200) self.assertTrue( '<title> Select branches | PkgDB </title>' in output.data) output = self.app.get('/package/guake/orphan/0') self.assertEqual(output.status_code, 200) self.assertFalse( '<title> Select branches | PkgDB </title>' in output.data) output = self.app.post( '/package/guake/orphan', follow_redirects=True, data={'branches': ['master']}) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="errors">'master' is not a valid choice for ' 'this field</td>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': ['master'], 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">You are no longer point of contact on ' 'branch: master</li>' in output.data) # You cannot orphan twice the same package, the branch is no # longer available output = self.app.post( '/package/guake/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">'master' is not a valid choice ' 'for this field</td>' in output.data) with user_set(pkgdb2.APP, user): output = self.app.post( '/package/random/orphan', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_update_acl(self, login_func): """ Test the update_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/update/pingou/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Update ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_acl': 'commit', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post( '/acl/guake/update/pingou/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/update/test/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Update ACLs on package: guake</h1>' in output.data) self.assertTrue( 'No pending ACLs for this user on this package.' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/update/toshio/devel', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Update ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/update/pingou/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Update ACLs on package: guake</h1>' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'pkg_branch': 'devel', 'pkg_acl': 'watchbugzilla', 'acl_status': 'Awaiting Review', 'csrf_token': csrf_token, } output = self.app.post( '/acl/guake/update/pingou/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data)
def test_request_acl(self, login_func, mock_func): """ Test the request_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'watchbugzilla', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">ACLs updated</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'watchbugzilla', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">ACLs updated</li>' in output.data) data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="error">User "Toshio" is not in the packager' ' group</' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) self.assertTrue( '<li class="errors">You must be a packager to apply to the ' 'ACL: commit on master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/test/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/test/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_acl_reassign(self, login_func, mock_func): """ Test the api_acl_reassign function. """ login_func.return_value = None output = self.app.post('/api/package/acl/reassign') self.assertEqual(output.status_code, 301) user = FakeFasUser() with user_set(APP, user): output = self.app.post('/api/package/acl/reassign/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual(data, { "output": "notok", "error": "Invalid input submitted", }) create_package_acl(self.session) data = { 'pkgnames': ['guake', 'geany'], 'branches': 'master', 'poc': 'toshio', } # Fails is user is not a packager. user = FakeFasUser() with user_set(APP, user): exp = { "error": "User \"toshio\" is not in the packager group", "output": "notok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp) mock_func.get_packagers.return_value = ['pingou', 'ralph', 'toshio'] mock_func.log.return_value = '' # Fails for geany is user is a packager but not in the group that # is the current poc - works for guake with user_set(APP, user): exp = { "error": "You are not part of the group \"gtk-sig\", you " "are not allowed to change the point of contact.", "messages": [""], "output": "ok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Works data = { 'pkgnames': ['geany'], 'branches': 'master', 'poc': 'toshio', } user.groups.append('gtk-sig') with user_set(APP, user): exp = {"messages": [''], "output": "ok"} output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Check if it fails normally user.username = '******' with user_set(APP, user): exp = { "error": "You are not allowed to change the point of contact.", "output": "notok" } output = self.app.post('/api/package/acl/reassign/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp)
def test_package_request_edit(self, login_func, mock_func): """ Test the package_request_edit function. """ login_func.return_value = None mock_func.get_packagers.return_value = ['pingou', 'toshio'] mock_func.log.return_value = 'foo bar' create_package_acl(self.session) data = { 'branches': ['epel7'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post('/package/foobar/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No action found with this identifier.</li>' in output.data) create_admin_actions(self.session) # Package name / Admin Action do not match output = self.app.post('/package/foobar/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">The specified action (id:1) is not ' 'related to the specified package: foobar.</li>' in output.data) # User not allowed to view request output = self.app.post('/package/guake/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Only package adminitrators (`approveacls`)' ' and the requester can review pending branch requests</li>' in output.data) # Before the edit user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/requests/1') self.assertEqual(output.status_code, 200) self.assertTrue('<h1>Update request: 1</h1>' in output.data) self.assertTrue('<option selected value="Pending">' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'status': 'Awaiting Review', 'csrf_token': csrf_token, } # User cannot approve their own request output = self.app.post('/package/guake/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">Not a valid choice</td>' in output.data) data = { 'status': 'Obsolete', 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): # Admin cannot obsolete a request that is not their output = self.app.post('/package/guake/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">Not a valid choice</td>' in output.data) data['status'] = 'Awaiting Review' # All good output = self.app.post('/package/guake/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">foo bar</li>' in output.data)
def test_acl_update(self, bz_mail_func, login_func, pkger_func): """ Test the api_acl_update function. """ login_func.return_value = None bz_mail_func.return_value = 1 output = self.app.post('/api/package/acl') self.assertEqual(output.status_code, 301) user = FakeFasUser() with user_set(APP, user): output = self.app.post('/api/package/acl/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( sorted(data), ['error', 'error_detail', 'output'] ) self.assertEqual( data['error'], "Invalid input submitted") self.assertEqual( data['output'], "notok") self.assertEqual( sorted(data['error_detail']), [ "acl: This field is required.", "acl_status: Not a valid choice", "branches: This field is required.", "pkgname: This field is required.", "user: This field is required.", ] ) create_package_acl(self.session) data = { 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } # Check if it works authenticated user = FakeFasUser() pkger_func.return_value = ['pingou', 'ralph', 'toshio'] with user_set(APP, user): exp = { "messages": [ "user: pingou set for toshio acl: commit of package: " "guake from: Awaiting Review to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Test that auto-approved ACL gets automatically Approved data = { 'pkgname': 'guake', 'branches': 'master', 'acl': 'watchcommits', 'acl_status': 'Awaiting Review', 'user': '******', } exp = { "messages": [ "user: pingou set for toshio acl: watchcommits of " "package: guake from: to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Check if it fails normally user.username = '******' data = { 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } with user_set(APP, user): exp = { "error": "You are not allowed to update ACLs of someone else.", "output": "notok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp) data = { 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Awaiting Review', 'user': '******', } user = FakeFasUser() with user_set(APP, user): # Revert it back to Awaiting Review exp = { "messages": [ "user: pingou set for toshio acl: commit of package: " "guake from: Approved to: Awaiting Review on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) data = { 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } # Check if it works for admins user = FakeFasUserAdmin() with user_set(APP, user): exp = { "messages": [ "user: admin set for toshio acl: commit of package: " "guake from: Awaiting Review to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) exp = { "messages": [ "Nothing to update on branch: master for acl: commit" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp)
def test_collection_status(self, login_func): """ Test the api_collection_status function. """ login_func.return_value = None # Redirect as you are not admin user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/f18/status/') self.assertEqual(output.status_code, 302) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/f18/status/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual(sorted(data), ['error', 'error_detail', 'output']) self.assertEqual(data['error'], "Invalid input submitted") self.assertEqual(data['output'], "notok") self.assertEqual(sorted(data['error_detail']), [ "branch: This field is required.", "clt_status: Not a valid choice", ]) data = {'branch': 'f18', 'clt_status': 'EOL'} with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/f19/status/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "output": "notok", "error": "You're trying to update the wrong collection", }) data = {'branch': 'f18', 'clt_status': 'EOL'} with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/f18/status', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual(data, { "output": "notok", "error": 'Could not find collection "f18"', }) create_collection(self.session) data = {'branch': 'f18', 'clt_status': 'EOL'} with user_set(pkgdb2.APP, user): output = self.app.post('/api/collection/f18/status', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "output": "ok", "messages": ['Collection updated from "Active" to \"EOL\"'], })
def test_api_package_unretire(self, login_func, mock_func): """ Test the api_package_unretire function. """ login_func.return_value = None # Redirect as you are not a packager user = FakeFasUser() user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unretire/') self.assertEqual(output.status_code, 302) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unretire/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Invalid input submitted", "error_detail": [ "pkgnames: This field is required.", "branches: This field is required.", ], "output": "notok" } ) data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unretire/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "No package found by this name", "output": "notok" } ) create_package_acl(self.session) mock_func.log.return_value = '' # User is not an admin data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unretire/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "You are not allowed to update the status of " "the package: guake on branch f18 to " "Approved.", "output": "notok" } ) # Unretire the package user = FakeFasUserAdmin() data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/unretire/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "messages": ["", ""], "output": "ok" } )
def test_collection_new(self, login_func): """ Test the collection_new function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/new/collection/') self.assertEqual(output.status_code, 302) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/new/collection/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Create a new collection</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'clt_name': '', 'version': '', 'clt_status': '', 'branchname': '', 'dist_tag': '', 'csrf_token': csrf_token, } output = self.app.post('/new/collection/', data=data) self.assertEqual(output.status_code, 200) self.assertEqual( output.data.count( '<td class="errors">This field is required.</td>' ), 6) user = FakeFasUserAdmin() with user_set(pkgdb2.APP, user): output = self.app.get('/new/collection/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Create a new collection</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'clt_name': 'Fedora', 'version': '19', 'clt_status': 'Active', 'branchname': 'f19', 'dist_tag': '.fc19', 'kojiname': 'f19', 'csrf_token': csrf_token, } output = self.app.post('/new/collection/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Collection "f19" created</li>' in output.data)
def test_request_acl(self, bz_mail_func, login_func, mock_func): """ Test the request_acl function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'watchbugzilla', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'watchbugzilla', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="error">User "Toshio" is not in the packager' ' group</' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Request ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) self.assertTrue( '<li class="errors">You must be a packager to apply to the ' 'ACL: commit on master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/test/request/') self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) data = { 'branches': 'master', 'acl': 'commit', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/test/request/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data)
def test_acl_update(self, bz_mail_func, login_func, pkger_func): """ Test the api_acl_update function. """ login_func.return_value = None bz_mail_func.return_value = 1 output = self.app.post('/api/package/acl') self.assertEqual(output.status_code, 301) user = FakeFasUser() with user_set(APP, user): output = self.app.post('/api/package/acl/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual(sorted(data), ['error', 'error_detail', 'output']) self.assertEqual(data['error'], "Invalid input submitted") self.assertEqual(data['output'], "notok") self.assertEqual(sorted(data['error_detail']), [ "acl: This field is required.", "acl_status: Not a valid choice", "branches: This field is required.", "pkgname: This field is required.", "user: This field is required.", ]) create_package_acl(self.session) data = { 'namespace': 'rpms', 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } # Check if it works authenticated user = FakeFasUser() pkger_func.return_value = ['pingou', 'ralph', 'toshio'] with user_set(APP, user): exp = { "messages": [ "user: pingou set for toshio acl: commit of package: " "guake from: Awaiting Review to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Test that auto-approved ACL gets automatically Approved data = { 'namespace': 'rpms', 'pkgname': 'guake', 'branches': 'master', 'acl': 'watchcommits', 'acl_status': 'Awaiting Review', 'user': '******', } exp = { "messages": [ "user: pingou set for toshio acl: watchcommits of " "package: guake from: to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) # Check if it fails normally user.username = '******' data = { 'namespace': 'rpms', 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } with user_set(APP, user): exp = { "error": "You are not allowed to update ACLs of someone else.", "output": "notok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 500) self.assertEqual(json_out, exp) data = { 'namespace': 'rpms', 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Awaiting Review', 'user': '******', } user = FakeFasUser() with user_set(APP, user): # Revert it back to Awaiting Review exp = { "messages": [ "user: pingou set for toshio acl: commit of package: " "guake from: Approved to: Awaiting Review on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) data = { 'namespace': 'rpms', 'pkgname': 'guake', 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'user': '******', } # Check if it works for admins user = FakeFasUserAdmin() with user_set(APP, user): exp = { "messages": [ "user: admin set for toshio acl: commit of package: " "guake from: Awaiting Review to: Approved on branch: " "master" ], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp) exp = { "messages": ["Nothing to update on branch: master for acl: commit"], "output": "ok" } output = self.app.post('/api/package/acl/', data=data) json_out = json.loads(output.data) self.assertEqual(output.status_code, 200) self.assertEqual(json_out, exp)
def test_api_package_orphan(self, login_func, mock_func): """ Test the api_package_orphan function. """ login_func.return_value = None # Redirect as you are not a packager user = FakeFasUser() user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/orphan/') self.assertEqual(output.status_code, 302) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/orphan/') self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "Invalid input submitted", "error_detail": [ "pkgnames: This field is required.", "branches: This field is required.", ], "output": "notok" } ) data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/orphan/', data=data) self.assertEqual(output.status_code, 500) data = json.loads(output.data) self.assertEqual( data, { "error": "No package found by this name", "output": "notok" } ) create_package_acl(self.session) mock_func.log.return_value = '' data = { 'pkgnames': 'guake', 'branches': ['f18', 'master'], 'poc': 'test', } with user_set(pkgdb2.APP, user): output = self.app.post('/api/package/orphan/', data=data) self.assertEqual(output.status_code, 200) data = json.loads(output.data) self.assertEqual( data, { "messages": ["", ""], "output": "ok" } ) pkg_acl = pkgdblib.get_acl_package(self.session, 'guake') self.assertEqual(pkg_acl[0].collection.branchname, 'f18') self.assertEqual(pkg_acl[0].package.name, 'guake') self.assertEqual(pkg_acl[0].point_of_contact, 'orphan') self.assertEqual(pkg_acl[0].status, 'Orphaned') self.assertEqual(pkg_acl[1].collection.branchname, 'master') self.assertEqual(pkg_acl[1].package.name, 'guake') self.assertEqual(pkg_acl[1].point_of_contact, 'orphan') self.assertEqual(pkg_acl[1].status, 'Orphaned')
def test_giveup_acl(self, bz_mail_func, login_func, mock_func): """ Test the giveup_acl function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin', 'dodji'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/giveup/approveacls/', follow_redirects=True) self.assertEqual(output.status_code, 405) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post( '/acl/docker/offlineimap/giveup/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No active branches found for you for ' 'the ACL: approveacls</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} print 'give up' output = self.app.post('/acl/rpms/guake/giveup/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Your ACL approveacls is obsoleted on ' 'branch f18 of package guake</li>' in output.data) self.assertTrue( '<li class="message">Your ACL approveacls is obsoleted on ' 'branch master of package guake</li>' in output.data) #print output.data self.assertEqual(output.data.count('<a class="pending"'), 1) output = self.app.post('/acl/rpms/guake/giveup/foobar/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Invalid ACL provided foobar.</li>' in output.data) output = self.app.post('/acl/rpms/barfoo/giveup/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user.username = '******' user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post('/acl/rpms/guake/giveup/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertFalse( '<li class="error">User "toshio" is not in the ' 'packager group</li>' in output.data)
def test_giveup_acl(self, login_func, mock_func): """ Test the giveup_acl function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin', 'dodji'] with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/giveup/approveacls/', follow_redirects=True) self.assertEqual(output.status_code, 405) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post( '/acl/offlineimap/giveup/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No active branches found for you for ' 'the ACL: approveacls</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post( '/acl/guake/giveup/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Your ACL approveacls is obsoleted on ' 'branch f18 of package guake</li>' in output.data) self.assertTrue( '<li class="message">Your ACL approveacls is obsoleted on ' 'branch master of package guake</li>' in output.data) self.assertEqual( output.data.count('<a class="pending"'), 1) output = self.app.post( '/acl/guake/giveup/foobar/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Invalid ACL provided foobar.</li>' in output.data) output = self.app.post( '/acl/barfoo/giveup/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user.username = '******' user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post( '/acl/guake/giveup/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">User "toshio" is not in the ' 'packager group</li>' in output.data)
def test_comaintain_package(self, bz_mail_func, login_func, mock_func): """ Test the comaintain_package function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post('/acl/rpms/guake/comaintain/', data=data, follow_redirects=True) self.assertTrue( '<li class="error">You are already a co-maintainer on ' 'f18</li>' in output.data) self.assertFalse( '<li class="message">ACLs updated</li>' in output.data) output = self.app.post('/acl/rpms/random/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post('/acl/rpms/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) # Nothing to update the second time output = self.app.post('/acl/rpms/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update</li>' in output.data) output = self.app.post('/acl/rpms/random/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.post('/acl/rpms/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="errors">You must be a packager</li>' in output.data)
def test_comaintain_package(self, login_func, mock_func): """ Test the comaintain_package function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/comaintain/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post( '/acl/guake/comaintain/', data=data, follow_redirects=True) self.assertTrue( '<li class="error">You are already a co-maintainer on ' 'f18</li>' in output.data) self.assertFalse( '<li class="message">ACLs updated</li>' in output.data) output = self.app.post( '/acl/random/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/acl/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) # Nothing to update the second time output = self.app.post( '/acl/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update</li>' in output.data) output = self.app.post( '/acl/random/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user = FakeFasUser() user.groups = ['gitr2spec'] with user_set(pkgdb2.APP, user): output = self.app.post( '/acl/guake/comaintain/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">You must be a packager</li>' in output.data)
def test_update_acl(self, login_func, mock_func, bz_email): """ Test the update_acl function. """ login_func.return_value = None bz_email.return_value = True create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertEqual(output.data.count('<td class="users">'), 1) # Fails `toshio` is not a packager user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/rpms/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue('<option value="Approved">Approved' in output.data) self.assertEqual(output.data.count('class="username">'), 1) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">User "toshio" is not in the ' 'packager group</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): # Invalid package name output = self.app.get('/package/rpms/foobar/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) # Invalid ACL name output = self.app.get('/package/rpms/guake/acl/foobar/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="errors">Invalid ACL to update.</li>' in output.data) # GET works output = self.app.get('/package/rpms/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue('<option value="Approved">Approved' in output.data) self.assertEqual(output.data.count('class="username">'), 2) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'acl': 'commit', 'acl_status': 'Approved', 'csrf_token': csrf_token, } # No user provided, so we don't know for who to update the ACLs output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="error">Invalid input submitted</li>' in output.data) mock_func.return_value = ['pingou', 'ralph', 'toshio'] user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): # Get works output = self.app.get('/package/rpms/guake/acl/commit/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('</a> > Edit Commit Access</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue('<option value="Approved">Approved' in output.data) self.assertEqual(output.data.count('class="username">'), 1) # Only 2 approved ACLs output = self.app.get('/package/rpms/guake/', follow_redirects=True) self.assertEqual(output.data.count('title="ACL Approved"'), 2) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } # Toshio drops his ACL request on master output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): data = { 'branch': 'master', 'acls': 'foobar', 'user': '******', 'csrf_token': csrf_token, } # Invalid ACL status provided output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Invalid ACL: foobar</li>' in output.data) data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } # Toshio is no longer requesting, thus is not in the list of # users and thus makes the request invalid output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h4 title="`approveacls` ACL">Package Administrator(s)</h4>' in output.data) self.assertTrue( '<li class="error">Invalid user: toshio</li>' in output.data) user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): # Toshio asks for commit on master data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) user = FakeFasUser() with user_set(pkgdb2.APP, user): # Invalid branch data = { 'branch': 'foo', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # Nothing to change data = { 'branch': 'master', 'acls': 'Awaiting Review', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # Nothing to change (2) data = { 'branch': 'f18', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">Nothing to update' in output.data) # package admin cannot remove the user's ACL data = { 'branch': 'master', 'acls': '', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">Only the user can remove his/her ' 'ACL</li>' in output.data) # package admin grants commit to Toshio on master data = { 'branch': 'master', 'acls': 'Approved', 'user': '******', 'csrf_token': csrf_token, } output = self.app.post('/package/rpms/guake/acl/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">toshio's commit ACL updated on ' 'master</li>' in output.data) # One more approved ACL self.assertTrue(output.data.count('title="ACL Approved"'), 3)
def test_package_give(self, login_func, utils_module): """ Test the package_give function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<title> Give package | PkgDB </title>' in output.data) output = self.app.get('/package/guake/give/0') self.assertEqual(output.status_code, 200) self.assertFalse( '<title> Give package | PkgDB </title>' in output.data) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': '', 'poc': '', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data) self.assertEqual(output.status_code, 200) self.assertEqual( output.data.count( '<td class="errors">This field is required.</td>' ), 1) with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'poc': 'limb', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="error">User "limb" is not in the packager ' 'group</' in output.data) utils_module.get_packagers.return_value = ['spot'] utils_module.log.return_value = '' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'poc': 'spot', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1 class="inline" property="doap:name">guake</h1>' in output.data) self.assertTrue('<a href="/packager/spot/">' in output.data) with user_set(pkgdb2.APP, user): output = self.app.get('/package/random/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No package of this name found.</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'poc': 'spot', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<td><select id="branches" multiple ''name="branches">' '</select></td>' in output.data)
def test_package_request_edit(self, login_func, mock_func): """ Test the package_request_edit function. """ login_func.return_value = None mock_func.get_packagers.return_value = ['pingou', 'toshio'] mock_func.log.return_value = 'foo bar' create_package_acl(self.session) data = { 'branches': ['epel7'], } user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.post( '/package/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">No action found with this identifier.</li>' in output.data) create_admin_actions(self.session) # User not allowed to view request output = self.app.post( '/package/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Only package adminitrators (`approveacls`)' ' and the requester can review pending branch requests</li>' in output.data) # Before the edit user = FakeFasUser() user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/package/requests/1') self.assertEqual(output.status_code, 200) self.assertTrue('<h1>Update request: 1</h1>' in output.data) self.assertTrue( '<option selected value="Pending">' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'status': 'Awaiting Review', 'csrf_token': csrf_token, } # User cannot approve their own request output = self.app.post( '/package/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">Not a valid choice</td>' in output.data) data = { 'status': 'Obsolete', 'csrf_token': csrf_token, } user = FakeFasUser() with user_set(pkgdb2.APP, user): # Admin cannot obsolete a request that is not their output = self.app.post( '/package/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue( '<td class="errors">Not a valid choice</td>' in output.data) data['status'] = 'Awaiting Review' # All good output = self.app.post( '/package/requests/1', follow_redirects=True, data=data) self.assertEqual(output.status_code, 200) self.assertTrue('<li class="message">foo bar</li>'in output.data)
def test_request_acl_all_branch(self, login_func, mock_func): """ Test the request_acl_all_branch function. """ login_func.return_value = None create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get( '/acl/guake/request/approveacls/', follow_redirects=True) self.assertEqual(output.status_code, 405) with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/') csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} output = self.app.post( '/acl/guake/request/approveacls/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="message">ACL approveacls requested on branch f18</li>' in output.data) self.assertTrue( 'class="message">ACL approveacls requested on branch master</l' in output.data) self.assertEqual( output.data.count('<a class="pending"'), 2) output = self.app.post( '/acl/guake/request/foobar/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="errors">Invalid ACL provided foobar.</li>' in output.data) output = self.app.post( '/acl/barfoo/request/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) user.username = '******' user.groups = [] with user_set(pkgdb2.APP, user): output = self.app.post( '/acl/guake/request/commit/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">You must be a packager to apply to the ' 'ACL: commit on guake</li>' in output.data) output = self.app.post( '/acl/guake/request/watchcommits/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACL watchcommits requested on branch ' 'f18</li>' in output.data) self.assertTrue( '<li class="message">ACL watchcommits requested on branch ' 'master</li>' in output.data)
def test_package_give_acls(self, bz_mail_func, login_func, mock_func): """ Test the package_give_acls function. """ login_func.return_value = None bz_mail_func.return_value = 1 create_package_acl(self.session) user = FakeFasUser() mock_func.return_value = ['pingou', 'ralph', 'kevin'] with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/guake/give/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'namespace': 'rpms', 'branches': 'master', 'acl': 'watchbugzilla', 'user': '******', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/give/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) # Add test for giving ACLs without providing the namespace in # the form (in which case it relies on the one in the URL) data = { 'branches': 'master', 'acl': 'watchcommits', 'user': '******', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/give/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="message">ACLs updated</li>' in output.data) user.username = '******' with user_set(pkgdb2.APP, user): output = self.app.get('/acl/rpms/foo/give/', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<li class="error">No package found by this name</li>' in output.data) self.assertTrue('<h1>Search packages (rpms) </h1>' in output.data) output = self.app.get('/acl/rpms/guake/give/') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give ACLs on package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) self.assertTrue( '<option value="approveacls">approveacls' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'namespace': 'rpms', 'branches': 'master', 'acl': 'commit', 'user': '******', 'acl_status': 'Approved', 'csrf_token': csrf_token, } output = self.app.post('/acl/rpms/guake/give/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( 'class="error">You are not allowed to update ACLs of someone ' 'else.</li>' in output.data)
def test_package_give_group(self, login_func, mock_func): """ Test the package_give function to a group. """ login_func.return_value = None create_package_acl(self.session) mock_func.get_packagers.return_value = ['spot'] group = FakeFasGroupValid() group.name = 'gtk-sig' mock_func.get_fas_group.return_value = group mock_func.log.return_value = '' user = FakeFasUser() with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'poc': 'spot', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue( '<h1 class="inline" property="doap:name">guake</h1>' in output.data) self.assertEqual( output.data.count('<a href="/packager/spot/">'), 2) user.username = '******' user.groups.append('gtk-sig') with user_set(pkgdb2.APP, user): output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<input id="csrf_token" name="csrf_token"' in output.data) csrf_token = output.data.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { 'branches': 'master', 'poc': 'group::gtk-sig', 'csrf_token': csrf_token, } output = self.app.post('/package/guake/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertEqual( output.data.count('<a href="/packager/spot/">'), 2) self.assertEqual( output.data.count('<a href="/packager/group::gtk-sig/">'), 1) output = self.app.get('/package/guake/give') self.assertEqual(output.status_code, 200) self.assertTrue( '<h1>Give Point of Contact of package: guake</h1>' in output.data) self.assertTrue( '<td><select id="branches" multiple name="branches">' '</select></td>' in output.data)