示例#1
0
    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">&#39;epel7&#39; 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_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)
示例#3
0
    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_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_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)
示例#6
0
    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 &#34;admin&#34; 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)
示例#7
0
    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">&#39;master&#39; 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">&#39;master&#39; 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)
示例#8
0
    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)
示例#9
0
    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 &#34;toshio&#34; 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&#39;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&#39;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&#39;s commit ACL updated on '
                'master</li>' in output.data)
            # One more approved ACL
            self.assertTrue(output.data.count('title="ACL Approved"'), 3)
示例#10
0
    def test_upload_results_loggedin(self):
        ''' Test the app.upload_results function. '''
        folder = os.path.dirname(os.path.abspath(__file__))
        filename = '1.log'
        full_path = os.path.join(folder, filename)

        user = FakeFasUser()
        with user_set(app.APP, user):
            output = self.app.get('/upload/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<td><input id="test_result" name="test_result" '
                'type="file"></td>' in output.data)

            csrf_token = output.data.split(
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]

            # Valid upload via the UI
            stream = open(full_path)
            data = {
                'test_result': stream,
                'username': '******',
                'csrf_token': csrf_token,
            }
            output = self.app.post('/upload/', data=data)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Upload successful!</li>' in output.data)

            # Valid upload authenticated and via the anonymous API
            stream = open(full_path)
            data = {
                'test_result': stream,
                'username': '******',
            }
            output = self.app.post('/upload/anonymous', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(data, {'message': 'Upload successful!'})

            # Invalid file upload
            full_path = os.path.join(folder, 'invalid.log')
            stream = open(full_path)
            data = {
                'test_result': stream,
                'username': '******',
                'csrf_token': csrf_token,
            }
            output = self.app.post('/upload/', data=data)
            self.assertEqual(output.status_code, 302)

            # Invalid file upload
            full_path = os.path.join(folder, 'invalid.log')
            stream = open(full_path)
            data = {
                'test_result': stream,
                'username': '******',
                'csrf_token': csrf_token,
            }
            output = self.app.post('/upload/', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Could not parse these results</li>'
                in output.data)

        # Invalid username
        user = FakeFasUser()
        user.username = '******'
        with user_set(app.APP, user):
            full_path = os.path.join(folder, 'invalid.log')
            stream = open(full_path)
            data = {
                'test_result': stream,
                'username': '******',
                'csrf_token': csrf_token,
            }
            output = self.app.post('/upload/', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="error">The `kerneltest` username is reserved, '
                'you are not allowed to use it</li>' in output.data)
示例#11
0
    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)
示例#12
0
    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_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_api_package_retire(self, login_func, mock_func):
        """ Test the api_package_retire 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/retire/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/retire/')
            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/retire/', 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',
        }
        # User is not an admin
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/retire/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "You are not allowed to retire the package: "
                    "guake on branch f18.",
                    "output": "notok"
                }
            )

        data = {
            'pkgnames': 'guake',
            'branches': ['master'],
            'poc': 'test',
        }
        # User is not the poc
        user.username = '******'
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/retire/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "You are not allowed to retire this package.",
                    "output": "notok"
                }
            )

        # Retire the package
        user = FakeFasUserAdmin()
        data = {
            'pkgnames': 'guake',
            'branches': ['f18', 'master'],
        }
        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_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)
示例#16
0
    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)
示例#17
0
    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/rpms/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/rpms/guake/give',
                                   data=data,
                                   follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                'rpms/<span property="doap:name">guake</span>' 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/rpms/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/rpms/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/rpms/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)
    def test_api_monitor_package(self, login_func, mock_func):
        """ Test the api_package_critpath function.  """
        login_func.return_value = None

        user = FakeFasUser()

        # No package
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/guake/monitor/1')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                sorted(data),
                ['error', 'output']
            )
            self.assertEqual(
                data['error'], "No package found by this name")

            self.assertEqual(
                data['output'], "notok")

        create_package_acl(self.session)
        create_package_critpath(self.session)

        # User is not a packager
        user.username = '******'
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/guake/monitor/1')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                sorted(data),
                ['error', 'output']
            )
            self.assertEqual(
                data['error'],
                "You are not allowed to update the monitor flag on this "
                "package")

            self.assertEqual(
                data['output'], "notok")

        # Works
        user.username = '******'
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/guake/monitor/1')
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                sorted(data),
                ['messages', 'output']
            )
            self.assertEqual(
                data['messages'], "Monitoring status of guake set to True")

            self.assertEqual(
                data['output'], "ok")

            output = self.app.post('/api/package/guake/monitor/1')
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                sorted(data),
                ['messages', 'output']
            )
            self.assertEqual(
                data['messages'], "Monitoring status un-changed")

            self.assertEqual(
                data['output'], "ok")

        # User is not a packager but is admin
        user = FakeFasUserAdmin()
        user.username = '******'
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/guake/monitor/False')
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                sorted(data),
                ['messages', 'output']
            )
            self.assertEqual(
                data['messages'], "Monitoring status of guake set to False")

            self.assertEqual(
                data['output'], "ok")
示例#19
0
    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_retire(self, login_func, mock_func):
        """ Test the package_retire function. """
        login_func.return_value = None
        create_package_acl(self.session)

        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)

        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">&#39;foobar&#39; is not a valid choice '
                'for this field</td>' in output.data)

            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)

        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)
示例#21
0
    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)
示例#22
0
    def test_update_pkg_poc(self):
        """ Test the update_pkg_poc function. """
        self.test_add_package()

        # Package must exists
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_poc,
            self.session,
            pkg_name='test',
            clt_name='F-17',
            user=FakeFasUser(),
            pkg_poc='toshio',
        )
        self.session.rollback()

        # Collection must exists
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_poc,
            self.session,
            pkg_name='guake',
            clt_name='F-16',
            user=FakeFasUser(),
            pkg_poc='toshio',
        )
        self.session.rollback()

        # User must be the actual Point of Contact (or an admin of course,
        # or part of the group)
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_poc,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=FakeFasUser(),
            pkg_poc='toshio',
        )
        self.session.rollback()

        # Groups must end with -sig
        user = FakeFasUser()
        user.username = '******'
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_poc,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='group::perl',
        )
        self.session.rollback()

        # Change PoC to a group
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='group::perl-sig',
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'group::perl-sig')

        # User must be in the group it gives the PoC to
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_poc,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='ralph',
        )
        self.session.rollback()

        user.groups.append('perl-sig')
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='ralph',
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'ralph')

        # PoC can change PoC
        user = FakeFasUser()
        user.username = '******'
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='toshio',
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'toshio')

        # Admin can change PoC
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=FakeFasUserAdmin(),
            pkg_poc='kevin',
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'kevin')

        # Orphan -> status changed to Orphaned
        user = FakeFasUser()
        user.username = '******'
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=user,
            pkg_poc='orphan',
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'orphan')
        self.assertEqual(pkg_acl[0].status, 'Orphaned')

        # Take orphaned package -> status changed to Approved
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            user=FakeFasUser(),
            pkg_poc=FakeFasUser().username,
        )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'pingou')
        self.assertEqual(pkg_acl[0].status, 'Approved')
示例#23
0
    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 &#34;toshio&#34; is not in the '
                'packager group</li>' in output.data)
示例#24
0
    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 &#34;toshio&#34; is not in the '
                'packager group</li>' in output.data)
示例#25
0
    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 &#34;Toshio&#34; 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)
示例#26
0
    def test_update_pkg_poc(self):
        """ Test the update_pkg_poc function. """
        self.test_add_package()

        # Package must exists
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_poc,
                          self.session,
                          pkg_name='test',
                          clt_name='F-17',
                          user=FakeFasUser(),
                          pkg_poc='toshio',
                          )
        self.session.rollback()

        # Collection must exists
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_poc,
                          self.session,
                          pkg_name='guake',
                          clt_name='F-16',
                          user=FakeFasUser(),
                          pkg_poc='toshio',
                          )
        self.session.rollback()

        # User must be the actual Point of Contact (or an admin of course,
        # or part of the group)
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_poc,
                          self.session,
                          pkg_name='guake',
                          clt_name='F-18',
                          user=FakeFasUser(),
                          pkg_poc='toshio',
                          )
        self.session.rollback()

        # Groups must end with -sig
        user = FakeFasUser()
        user.username = '******'
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_poc,
                          self.session,
                          pkg_name='guake',
                          clt_name='F-18',
                          user=user,
                          pkg_poc='group::perl',
                          )
        self.session.rollback()

        # Change PoC to a group
        pkgdblib.update_pkg_poc(
                          self.session,
                          pkg_name='guake',
                          clt_name='F-18',
                          user=user,
                          pkg_poc='group::perl-sig',
                          )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'group::perl-sig')

        # User must be in the group it gives the PoC to
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_poc,
                          self.session,
                          pkg_name='guake',
                          clt_name='F-18',
                          user=user,
                          pkg_poc='ralph',
                          )
        self.session.rollback()

        user.groups.append('perl-sig')
        pkgdblib.update_pkg_poc(
                          self.session,
                          pkg_name='guake',
                          clt_name='F-18',
                          user=user,
                          pkg_poc='ralph',
                          )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'ralph')

        # PoC can change PoC
        user = FakeFasUser()
        user.username = '******'
        pkgdblib.update_pkg_poc(self.session,
                                 pkg_name='guake',
                                 clt_name='F-18',
                                 user=user,
                                 pkg_poc='toshio',
                                 )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'toshio')

        # Admin can change PoC
        pkgdblib.update_pkg_poc(self.session,
                                 pkg_name='guake',
                                 clt_name='F-18',
                                 user=FakeFasUserAdmin(),
                                 pkg_poc='kevin',
                                 )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'kevin')

        # Orphan -> status changed to Orphaned
        user = FakeFasUser()
        user.username = '******'
        pkgdblib.update_pkg_poc(self.session,
                                 pkg_name='guake',
                                 clt_name='F-18',
                                 user=user,
                                 pkg_poc='orphan',
                                 )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'orphan')
        self.assertEqual(pkg_acl[0].status, 'Orphaned')

        # Take orphaned package -> status changed to Approved
        pkgdblib.update_pkg_poc(self.session,
                                 pkg_name='guake',
                                 clt_name='F-18',
                                 user=FakeFasUser(),
                                 pkg_poc=FakeFasUser().username,
                                 )

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[0].collection.branchname, 'F-18')
        self.assertEqual(pkg_acl[0].package.name, 'guake')
        self.assertEqual(pkg_acl[0].point_of_contact, 'pingou')
        self.assertEqual(pkg_acl[0].status, 'Approved')
示例#27
0
    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)
示例#28
0
    def test_acl_update(self, login_func):
        """ Test the api_acl_update function.  """
        login_func.return_value = None

        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(
                data, {
                    "output":
                    "notok",
                    "error_detail": [
                        "pkg_acl: Not a valid choice",
                        "pkg_name: This field is required.",
                        "acl_status: Not a valid choice",
                        "pkg_user: This field is required.",
                        "pkg_branch: This field is required."
                    ],
                    "error":
                    "Invalid input submitted",
                })

        create_package_acl(self.session)

        data = {
            'pkg_name': 'guake',
            'pkg_branch': 'devel',
            'pkg_acl': 'commit',
            'acl_status': 'Approved',
            'pkg_user': '******',
        }

        # Check if it works authenticated
        user = FakeFasUser()

        with user_set(APP, user):
            exp = {
                "messages": [
                    "user: pingou set acl: commit of package: guake from: "
                    "Awaiting Review to: Approved on branch: devel"
                ],
                "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 = '******'

        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)

        # Check if it works for admins
        user = FakeFasUserAdmin()

        with user_set(APP, user):
            exp = {
                "messages": [
                    "user: admin set acl: commit of package: guake from: "
                    "Approved to: Approved on branch: devel"
                ],
                "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)
示例#29
0
    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)
示例#30
0
    def test_package_retire(self, login_func, mock_func):
        """ Test the package_retire function. """
        login_func.return_value = None
        create_package_acl(self.session)

        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)

        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">&#39;foobar&#39; is not a valid choice '
                'for this field</td>' in output.data)

            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)

        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)
示例#31
0
    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)
示例#32
0
    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 &#34;limb&#34; 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)
示例#33
0
    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 &#34;Toshio&#34; 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)
示例#34
0
    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">&#39;master&#39; 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">&#39;master&#39; 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)
示例#35
0
    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 &#34;limb&#34; 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)
示例#36
0
    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">&#39;foobar&#39; 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)
示例#37
0
    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">&#39;foobar&#39; 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)
示例#38
0
    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 &#34;admin&#34; 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)
示例#39
0
    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">&#39;foo&#39; 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)
示例#40
0
    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">&#39;foo&#39; 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)
示例#41
0
    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">&#39;epel7&#39; 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,
        }

        # Missing one input
        user = FakeFasUser()
        user.username = '******'
        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(
                '<td class="errors">Not a valid choice</td>' in output.data)

        data = {
            'branches': ['el6'],
            'from_branch': 'master',
            'csrf_token': csrf_token,
        }

        # Input correct but user is not allowed
        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 &#34;kevin&#34; is not in the '
                'packager group</li>' in output.data)

        data = {
            'branches': ['el6'],
            'from_branch': 'master',
            '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)
示例#42
0
    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)
示例#43
0
    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)
示例#44
0
    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">&#39;epel7&#39; 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 &#34;kevin&#34; 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)
示例#45
0
    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)
示例#46
0
    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)
示例#47
0
    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)
示例#48
0
    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)
示例#49
0
    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 &#34;toshio&#34; 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&#39;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&#39;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&#39;s commit ACL updated on '
                'master</li>' in output.data)
            # One more approved ACL
            self.assertTrue(output.data.count('title="ACL Approved"'), 3)
示例#50
0
    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)
示例#51
0
    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)
示例#52
0
    def test_acl_update(self, login_func):
        """ Test the api_acl_update function.  """
        login_func.return_value=None

        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(
                data,
                {
                    "output": "notok",
                    "error_detail": [
                        "pkg_acl: Not a valid choice",
                        "pkg_name: This field is required.",
                        "acl_status: Not a valid choice",
                        "pkg_user: This field is required.",
                        "pkg_branch: This field is required."
                    ],
                    "error": "Invalid input submitted",
                }
            )

        create_package_acl(self.session)

        data = {
            'pkg_name': 'guake',
            'pkg_branch': 'devel',
            'pkg_acl': 'commit',
            'acl_status': 'Approved',
            'pkg_user': '******',
        }

        # Check if it works authenticated
        user = FakeFasUser()

        with user_set(APP, user):
            exp = {
                "messages": [
                    "user: pingou set acl: commit of package: guake from: "
                    "Awaiting Review to: Approved on branch: devel"
                ],
                "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 = '******'

        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)

        # Check if it works for admins
        user = FakeFasUserAdmin()

        with user_set(APP, user):
            exp = {
                "messages": [
                    "user: admin set acl: commit of package: guake from: "
                    "Approved to: Approved on branch: devel"
                ],
                "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)