コード例 #1
0
    def test_update_collection_status(self):
        """ Test the update_collection_status function. """
        create_collection(self.session)

        collection = model.Collection.by_name(self.session, 'F-18')
        self.assertEqual(collection.status, 'Active')

        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_collection_status,
            self.session,
            'F-18',
            'EOL',
            user=FakeFasUser(),
        )

        pkgdblib.update_collection_status(self.session,
                                          'F-18',
                                          'EOL',
                                          user=FakeFasUserAdmin())
        self.session.commit()

        msg = pkgdblib.update_collection_status(self.session,
                                                'F-18',
                                                'EOL',
                                                user=FakeFasUserAdmin())
        self.assertEqual(msg, 'Collection "F-18" already had this status')

        collection = model.Collection.by_name(self.session, 'F-18')
        self.assertEqual(collection.status, 'EOL')
コード例 #2
0
ファイル: test_pkgdb.py プロジェクト: apevec/pkgdb2
    def test_is_pkgdb_admin(self):
        """ Test the is_pkgdb_admin function of pkgdb2. """
        user = FakeFasUser()
        out = pkgdb2.is_pkgdb_admin(user)
        self.assertEqual(out, False)

        user.groups = []
        out = pkgdb2.is_pkgdb_admin(user)
        self.assertEqual(out, False)

        user = FakeFasUser()
        out = pkgdb2.is_pkgdb_admin(None)
        self.assertEqual(out, False)

        user = FakeFasUserAdmin()
        out = pkgdb2.is_pkgdb_admin(user)
        self.assertEqual(out, True)

        pkgdb2.APP.config['ADMIN_GROUP'] = 'sysadmin-main'

        out = pkgdb2.is_pkgdb_admin(user)
        self.assertEqual(out, False)

        # Reset the ADMIN_GROUP for the other tests
        pkgdb2.APP.config['ADMIN_GROUP'] = ('sysadmin-main', 'sysadmin-cvs')
コード例 #3
0
    def test_admin_actions(self, login_func):
        """ Test the admin_actions function. """
        login_func.return_value = None

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/actions/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />' in
                output.data)

            output = self.app.get(
                '/admin/actions/?page=abc&limit=def&status=ghi&package=test')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />' in
                output.data)
            self.assertTrue(
                'class="errors">Incorrect limit provided, using default</' in
                output.data)
            self.assertTrue(
                '<li class="errors">No package exists</li>' in output.data)

            output = self.app.get('/admin/actions/?package=guake')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />' in
                output.data)
            self.assertTrue(
                '<th>Status</th>\n    \n    <th></th>\n    \n  </tr>\n\n</table>'
                in output.data)
コード例 #4
0
    def test_admin(self, login_func):
        """ Test the admin function. """
        login_func.return_value = None

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Admin interface</h1>' in output.data)
コード例 #5
0
    def test_admin_actions(self, login_func):
        """ Test the admin_actions function. """
        login_func.return_value = None

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/actions/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)

            output = self.app.get(
                '/admin/actions/?page=abc&limit=def&status=ghi&package=test')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)
            self.assertTrue(
                'class="errors">Incorrect limit provided, using default</'
                in output.data)
            self.assertTrue(
                '<li class="errors">No package exists</li>' in output.data)

            output = self.app.get('/admin/actions/?package=guake')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)
            self.assertTrue(
                '<p>No actions found</p>' in output.data)

            # Create some actions to see
            create_collection(pkgdb2.SESSION)
            create_package(pkgdb2.SESSION)
            create_admin_actions(pkgdb2.SESSION, n=2)

            # set the pagination
            pkgdb2.APP.config['ITEMS_PER_PAGE'] = 1

            # Check the list
            output = self.app.get('/admin/actions/?status=all')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)
            # 3 actions = 3 pages
            self.assertTrue('<td>1 / 3</td>' in output.data)

            # Reset the pagination
            pkgdb2.APP.config['ITEMS_PER_PAGE'] = 50
コード例 #6
0
    def test_edit_collection(self):
        """ Test the edit_collection function. """
        create_collection(self.session)

        collection = pkgdblib.search_collection(self.session, 'F-18')[0]

        out = pkgdblib.edit_collection(self.session,
                                       collection,
                                       user=FakeFasUserAdmin())
        self.assertEqual(out, None)

        self.assertRaises(pkgdblib.PkgdbException, pkgdblib.edit_collection,
                          self.session, collection)

        out = pkgdblib.edit_collection(
            self.session,
            collection,
            clt_name='Fedora youhou!',
            clt_version='Awesome 18',
            clt_status='EOL',
            clt_publishurl='http://.....',
            clt_pendingurl='http://.....',
            clt_summary='Fedora awesome release 18',
            clt_description='This is a description of how cool Fedora is',
            clt_branchname='f18_b',
            clt_disttag='fc18',
            clt_gitbranch='F-18',
            user=FakeFasUserAdmin(),
        )

        self.assertEqual(out, 'Collection "f18_b" edited')

        collections = pkgdblib.search_collection(self.session, 'F-18')
        self.assertEqual(collections, [])

        collection = pkgdblib.search_collection(self.session, 'f18_b')[0]
        self.assertEqual(collection.name, 'Fedora youhou!')
        self.assertEqual(collection.status, 'EOL')
コード例 #7
0
    def test_add_collection(self):
        """ Test the add_collection function. """

        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.add_collection,
            session=self.session,
            clt_name='Fedora',
            clt_version='19',
            clt_status='Active',
            clt_publishurl=None,
            clt_pendingurl=None,
            clt_summary='Fedora 19 release',
            clt_description='Fedora 19 collection',
            clt_branchname='F-19',
            clt_disttag='.fc19',
            clt_gitbranch='f19',
            user=FakeFasUser(),
        )
        self.session.rollback()

        pkgdblib.add_collection(
            self.session,
            clt_name='Fedora',
            clt_version='19',
            clt_status='Active',
            clt_publishurl=None,
            clt_pendingurl=None,
            clt_summary='Fedora 19 release',
            clt_description='Fedora 19 collection',
            clt_branchname='F-19',
            clt_disttag='.fc19',
            clt_gitbranch='f19',
            user=FakeFasUserAdmin(),
        )
        self.session.commit()
        collection = model.Collection.by_name(self.session, 'F-19')
        self.assertEqual(
            "Collection(u'Fedora', u'19', u'Active', u'admin', "
            "publishurltemplate=None, pendingurltemplate=None, "
            "summary=u'Fedora 19 release', "
            "description=u'Fedora 19 collection')", collection.__repr__())
コード例 #8
0
    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)
コード例 #9
0
    def test_admin_log(self, login_func):
        """ Test the admin_log function. """
        login_func.return_value = None

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/log/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Logs</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)

            output = self.app.get(
                '/admin/log/?page=abc&limit=def&from_date=ghi&package=test')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Logs</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)
            self.assertTrue(
                'class="errors">Incorrect limit provided, using default</'
                in output.data)
            self.assertTrue(
                'class="errors">Incorrect from_date provided, using default</'
                in output.data)
            self.assertTrue(
                '<li class="errors">No package exists</li>' in output.data)

            output = self.app.get('/admin/log/?from_date=2013-10-19')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Logs</h1>' in output.data)
            self.assertTrue(
                'Restrict to package: <input type="text" name="package" />'
                in output.data)
            self.assertTrue(
                '<p class=\'error\'>No logs found in the database.</p>'
                in output.data)
コード例 #10
0
    def test_update_pkg_status(self):
        """ Test the update_pkg_status function. """
        create_package_acl(self.session)

        # Wrong package
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_status,
            self.session,
            pkg_name='test',
            clt_name='F-17',
            status='Deprecated',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Wrong collection
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_status,
            self.session,
            pkg_name='guake',
            clt_name='F-16',
            status='Orphaned',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # User not allowed to deprecate the package on F-18
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_status,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            status='Deprecated',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Wrong status
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_status,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            status='Depreasdcated',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # User not allowed to change status to Allowed
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.update_pkg_status,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            status='Allowed',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Admin can retire package
        pkgdblib.update_pkg_status(self.session,
                                   pkg_name='guake',
                                   clt_name='F-18',
                                   status='Deprecated',
                                   user=FakeFasUserAdmin())

        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, 'Deprecated')

        # User can orphan package
        pkgdblib.update_pkg_status(self.session,
                                   pkg_name='guake',
                                   clt_name='devel',
                                   status='Orphaned',
                                   user=FakeFasUser())

        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, 'Deprecated')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'orphan')
        self.assertEqual(pkg_acl[1].status, 'Orphaned')

        # Admin must give a poc when un-orphan/un-retire a package
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_status,
                          self.session,
                          pkg_name='guake',
                          clt_name='devel',
                          status='Approved',
                          user=FakeFasUserAdmin())

        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, 'Deprecated')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'orphan')
        self.assertEqual(pkg_acl[1].status, 'Orphaned')

        # Admin can un-orphan package
        pkgdblib.update_pkg_status(self.session,
                                   pkg_name='guake',
                                   clt_name='devel',
                                   status='Approved',
                                   poc="pingou",
                                   user=FakeFasUserAdmin())

        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, 'Deprecated')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'pingou')
        self.assertEqual(pkg_acl[1].status, 'Approved')

        # Admin can un-retire package
        pkgdblib.update_pkg_status(self.session,
                                   pkg_name='guake',
                                   clt_name='F-18',
                                   status='Approved',
                                   poc="pingou",
                                   user=FakeFasUserAdmin())

        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')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'pingou')
        self.assertEqual(pkg_acl[1].status, 'Approved')

        # Not Admin and status is not Orphaned nor Deprecated
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.update_pkg_status,
                          self.session,
                          pkg_name='guake',
                          clt_name='devel',
                          status='Removed',
                          user=FakeFasUser())
コード例 #11
0
    def test_add_package(self):
        """ Test the add_package function. """
        create_collection(self.session)

        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.add_package,
                          self.session,
                          pkg_name='test',
                          pkg_summary='test package',
                          pkg_status='Approved',
                          pkg_collection='F-18',
                          pkg_poc='ralph',
                          pkg_reviewURL=None,
                          pkg_shouldopen=None,
                          pkg_upstreamURL='http://example.org',
                          user=FakeFasUser())
        self.session.rollback()

        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.add_package,
                          self.session,
                          pkg_name='test',
                          pkg_summary='test package',
                          pkg_status='Approved',
                          pkg_collection='F-18',
                          pkg_poc='group::tests',
                          pkg_reviewURL=None,
                          pkg_shouldopen=None,
                          pkg_upstreamURL='http://example.org',
                          user=FakeFasUserAdmin())
        self.session.rollback()

        msg = pkgdblib.add_package(self.session,
                                   pkg_name='guake',
                                   pkg_summary='Drop down terminal',
                                   pkg_status='Approved',
                                   pkg_collection='F-18',
                                   pkg_poc='ralph',
                                   pkg_reviewURL=None,
                                   pkg_shouldopen=None,
                                   pkg_upstreamURL='http://guake.org',
                                   user=FakeFasUserAdmin())
        self.assertEqual(msg, 'Package created')
        self.session.commit()
        packages = model.Package.all(self.session)
        self.assertEqual(1, len(packages))
        self.assertEqual('guake', packages[0].name)

        pkgdblib.add_package(self.session,
                             pkg_name='geany',
                             pkg_summary='GTK IDE',
                             pkg_status='Approved',
                             pkg_collection='devel, F-18',
                             pkg_poc='ralph',
                             pkg_reviewURL=None,
                             pkg_shouldopen=None,
                             pkg_upstreamURL=None,
                             user=FakeFasUserAdmin())
        self.session.commit()
        packages = model.Package.all(self.session)
        self.assertEqual(2, len(packages))
        self.assertEqual('guake', packages[0].name)
        self.assertEqual('geany', packages[1].name)

        pkgdblib.add_package(self.session,
                             pkg_name='fedocal',
                             pkg_summary='web calendar for Fedora',
                             pkg_status='Approved',
                             pkg_collection='devel, F-18',
                             pkg_poc='group::infra-sig',
                             pkg_reviewURL=None,
                             pkg_shouldopen=None,
                             pkg_upstreamURL=None,
                             user=FakeFasUserAdmin())
        self.session.commit()
        packages = model.Package.all(self.session)
        self.assertEqual(3, len(packages))
        self.assertEqual('guake', packages[0].name)
        self.assertEqual('geany', packages[1].name)
        self.assertEqual('fedocal', packages[2].name)
コード例 #12
0
    def test_collection_new(self, login_func):
        """ Test the collection_new function. """
        login_func.return_value = None
        create_package_acl(self.session)

        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/new/collection/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/new/collection/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Create a new collection</h1>' in output.data)
            self.assertTrue(
                '<input id="csrf_token" name="csrf_token"' in output.data)

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

            data = {
                'clt_name': '',
                'version': '',
                'clt_status': '',
                'branchname': '',
                'dist_tag': '',
                'csrf_token': csrf_token,
            }

            output = self.app.post('/new/collection/', data=data)
            self.assertEqual(output.status_code, 200)
            self.assertEqual(
                output.data.count(
                    '<td class="errors">This field is required.</td>'
                ), 6)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/new/collection/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Create a new collection</h1>' in output.data)
            self.assertTrue(
                '<input id="csrf_token" name="csrf_token"' in output.data)

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

            data = {
                'clt_name': 'Fedora',
                'version': '19',
                'clt_status': 'Active',
                'branchname': 'f19',
                'dist_tag': '.fc19',
                'kojiname': 'f19',
                'csrf_token': csrf_token,
            }

            output = self.app.post('/new/collection/', data=data,
                                   follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Collection &#34;f19&#34; created</li>'
                in output.data)
コード例 #13
0
    def test_api_package_new(self, login_func, mock_func):
        """ Test the api_package_new function.  """
        login_func.return_value = None

        # Redirect as you are not admin
        user = FakeFasUser()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error":
                    "Invalid input submitted",
                    "error_detail": [
                        "pkg_summary: This field is required.",
                        "pkg_collection: This field is required.",
                        "pkg_reviewURL: This field is required.",
                        "pkg_poc: This field is required.",
                        "pkg_status: Not a valid choice",
                        "pkg_name: This field is required."
                    ],
                    "output":
                    "notok"
                })

        data = {
            'pkg_name': 'gnome-terminal',
            'pkg_summary': 'Terminal emulator for GNOME',
            'pkg_description': 'Terminal for GNOME...',
            'pkg_reviewURL': 'http://bugzilla.redhat.com/1234',
            'pkg_status': '',
            'pkg_shouldopen': '',
            'pkg_critpath': '',
            'pkg_collection': '',
            'pkg_poc': '',
            'pkg_upstreamURL': '',
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            ## FIXME: this is damn ugly but there is something wrong between
            ## me and jenkins that needs sorting out.
            self.assertTrue(
                data == {
                    "error":
                    "Invalid input submitted",
                    "error_detail": [
                        "pkg_status: This field is required.",
                        "pkg_poc: This field is required.",
                        "pkg_collection: '' is not a valid choice for this "
                        "field", "pkg_critpath: This field is required.",
                        "pkg_shouldopen: This field is required."
                    ],
                    "output":
                    "notok"
                } or data == {
                    "error":
                    "Invalid input submitted",
                    "error_detail": [
                        "pkg_status: This field is required.",
                        "pkg_poc: This field is required.",
                        "pkg_collection: '' is not a valid choice for this "
                        "field"
                    ],
                    "output":
                    "notok"
                })

        data = {
            'pkg_name': 'gnome-terminal',
            'pkg_summary': 'Terminal emulator for GNOME',
            'pkg_description': 'Terminal for GNOME...',
            'pkg_reviewURL': 'http://bugzilla.redhat.com/1234',
            'pkg_status': 'Approved',
            'pkg_shouldopen': True,
            'pkg_collection': 'devel',
            'pkg_poc': 'mclasen',
            'pkg_upstreamURL': 'http://www.gnome.org/',
            'pkg_critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error":
                    "Invalid input submitted",
                    "error_detail": [
                        "pkg_collection: 'devel' is not a valid choice for "
                        "this field"
                    ],
                    "output":
                    "notok"
                })

        create_collection(self.session)

        data = {
            'pkg_name': 'gnome-terminal',
            'pkg_summary': 'Terminal emulator for GNOME',
            'pkg_description': 'Terminal for GNOME...',
            'pkg_reviewURL': 'http://bugzilla.redhat.com/1234',
            'pkg_status': 'Approved',
            'pkg_shouldopen': True,
            'pkg_collection': 'devel',
            'pkg_poc': 'mclasen',
            'pkg_upstreamURL': 'http://www.gnome.org/',
            'pkg_critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "The point of contact of this package is not "
                    "in the packager group",
                    "output": "notok"
                })

        mock_func.get_packagers.return_value = ['mclasen']
        mock_func.log.return_value = ''

        data = {
            'pkg_name': 'gnome-terminal',
            'pkg_summary': 'Terminal emulator for GNOME',
            'pkg_description': 'Terminal for GNOME...',
            'pkg_reviewURL': 'http://bugzilla.redhat.com/1234',
            'pkg_status': 'Approved',
            'pkg_shouldopen': True,
            'pkg_collection': 'devel',
            'pkg_poc': 'mclasen',
            'pkg_upstreamURL': 'http://www.gnome.org/',
            'pkg_critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(data, {
                "messages": ["Package created"],
                "output": "ok"
            })
コード例 #14
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)
コード例 #15
0
    def test_api_package_unretire(self, login_func, mock_func):
        """ Test the api_package_unretire function.  """
        login_func.return_value = None

        # Redirect as you are not a packager
        user = FakeFasUser()
        user.groups = []

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/unretire/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/unretire/')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "Invalid input submitted",
                    "error_detail": [
                        "pkgnames: This field is required.",
                        "branches: This field is required.",
                    ],
                    "output": "notok"
                }
            )

        data = {
            'pkgnames': 'guake',
            'branches': ['f18', 'master'],
            'poc': 'test',
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/unretire/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "No package found by this name",
                    "output": "notok"
                }
            )

        create_package_acl(self.session)
        mock_func.log.return_value = ''

        # User is not an admin
        data = {
            'pkgnames': 'guake',
            'branches': ['f18', 'master'],
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/unretire/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "You are not allowed to update the status of "
                             "the package: guake on branch f18 to "
                             "Approved.",
                    "output": "notok"
                }
            )

        # Unretire the package
        user = FakeFasUserAdmin()
        data = {
            'pkgnames': 'guake',
            'branches': ['f18', 'master'],
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/unretire/', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "messages": ["", ""],
                    "output": "ok"
                }
            )
コード例 #16
0
ファイル: test_flask_api_admin.py プロジェクト: apevec/pkgdb2
    def test_api_admin_action_edit_status(self, login_func):
        """ Test the api_admin_action_edit_status function.  """
        login_func.return_value = None

        # Redirect as you are not admin
        user = FakeFasUser()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/admin/action/status')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/admin/action/status')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(sorted(data), ['error', 'error_detail', 'output'])
            self.assertEqual(data['error'], "Invalid input submitted")

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

            self.assertEqual(sorted(data['error_detail']), [
                'id: This field is required.',
                'status: Not a valid choice',
            ])

        data = {
            'id': 'foo',
            'status': 'Approved',
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "Invalid input submitted",
                    "error_detail": [
                        "id: Field must contain a number",
                    ],
                    "output": "notok"
                })

        # Have another test create a pending Admin Action
        from test_flask_ui_packages import FlaskUiPackagesTest
        uitest = FlaskUiPackagesTest('test_package_request_branch')
        uitest.session = self.session
        uitest.app = self.app
        uitest.test_package_request_branch()

        # Before edit:
        output = self.app.get('/api/admin/actions/')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)
        self.assertEqual(len(data['actions']), 1)
        action = data['actions'][0]
        self.assertEqual(action['action'], "request.branch")
        self.assertEqual(action['id'], 1)
        self.assertEqual(action['collection']['branchname'], 'el6')
        self.assertEqual(action['package']['name'], 'guake')
        self.assertEqual(action['user'], 'pingou')

        data = {
            'id': 1,
            'status': 'Denied',
        }

        # User is not an admin
        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 302)

        # User is an admin
        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):

            data = {
                'id': 10,
                'status': 'Denied',
            }

            # Wrong identifier
            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "No Admin action with this identifier found",
                    "output": "notok"
                })

            data = {
                'id': 1,
                'status': 'Denied',
            }

            # Missing explanatory message for the user
            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "You must provide a message explaining why "
                    "when you block or deny a request",
                    "output": "notok"
                })

            #Only the person creating the request can obsolete it
            data = {
                'id': 1,
                'status': 'Obsolete',
                'message': 'Because this is a test suite',
            }

            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "Only the person having made the request can "
                    "change its status to obsolete",
                    "output": "notok"
                })

            # All good
            data = {
                'id': 1,
                'status': 'Denied',
                'message': 'Because this is a test suite',
            }

            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "messages": [
                        "user: admin updated action: 1 of guake from "
                        "`Awaiting Review` to `Denied` with message: "
                        "Because this is a test suite"
                    ],
                    "output":
                    "ok"
                })

        # After Denying:
        output = self.app.get('/api/admin/actions')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)
        self.assertEqual(len(data['actions']), 1)
        action = data['actions'][0]
        self.assertEqual(action['action'], "request.branch")
        self.assertEqual(action['id'], 1)
        self.assertEqual(action['collection']['branchname'], 'el6')
        self.assertEqual(action['package']['name'], 'guake')
        self.assertEqual(action['user'], 'pingou')
        self.assertEqual(action['status'], 'Denied')

        # User is an admin
        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            data = {
                'id': 1,
                'status': 'Approved',
            }

            output = self.app.post('/api/admin/action/status', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "messages": [
                        "user: admin updated action: 1 of guake from "
                        "`Denied` to `Approved`"
                    ],
                    "output":
                    "ok"
                })

        # After approving:
        output = self.app.get('/api/admin/actions')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)
        self.assertEqual(len(data['actions']), 1)
        action = data['actions'][0]
        self.assertEqual(action['action'], "request.branch")
        self.assertEqual(action['id'], 1)
        self.assertEqual(action['collection']['branchname'], 'el6')
        self.assertEqual(action['package']['name'], 'guake')
        self.assertEqual(action['user'], 'pingou')
        self.assertEqual(action['status'], 'Approved')
コード例 #17
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)
コード例 #18
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)
コード例 #19
0
    def test_admin_action_edit_status(self, login_func):
        """ Test the admin_action_edit_status function. """
        login_func.return_value = None

        user = FakeFasUser()

        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/action/1/status')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.get('/admin/action/1/status')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="errors">No action found with this identifier.</li>'
                in output.data)

        # Have another test create a pending Admin Action
        from test_flask_ui_packages import FlaskUiPackagesTest
        uitest = FlaskUiPackagesTest('test_package_request_branch')
        uitest.session = self.session
        uitest.app = self.app
        uitest.test_package_request_branch()

        with user_set(pkgdb2.APP, user):
            # Before
            # No action Pending
            output = self.app.get('/admin/actions/?status=Pending')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertFalse(
                '<td class="col_odd">request.branch</td>' in output.data)
            self.assertFalse(
                '<td class="col_odd" >Awaiting Review</td>' in output.data)

            # But one action in total
            output = self.app.get('/admin/actions/?status=All')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                '<td class="col_odd">request.branch</td>' in output.data)
            self.assertEqual(
                output.data.count('<td class="col_odd">request.branch</td>'),
                1
            )
            self.assertTrue(
                '<td class="col_odd" >\n        Awaiting Review\n      </td>'
                in output.data)

            # One action Awaiting Review
            output = self.app.get('/admin/actions/?status=Awaiting Review')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertTrue(
                '<td class="col_odd">request.branch</td>' in output.data)
            self.assertEqual(
                output.data.count('<td class="col_odd">request.branch</td>'),
                1
            )
            self.assertTrue(
                '<td class="col_odd" >\n        Awaiting Review\n      </td>'
                in output.data)

            # Update
            output = self.app.get('/admin/action/1/status')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Update admin action: 1</h1>' in output.data)

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

            data = {
                'status': 'Approved',
                'csrf_token': csrf_token,
            }

            output = self.app.post('/admin/action/1/status', data=data,
                                   follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">user: admin updated action: 1 of guake '
                'from `Awaiting Review` to `Approved`</li>' in output.data)

            # After
            output = self.app.get('/admin/actions/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Actions</h1>' in output.data)
            self.assertFalse(
                '<td class="col_odd">request.branch</td>' in output.data)
コード例 #20
0
    def test_api_package_new(self, login_func, mock_func):
        """ Test the api_package_new function.  """
        login_func.return_value = None

        # Redirect as you are not admin
        user = FakeFasUser()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/')
            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']),
                [
                    "branches: This field is required.",
                    "pkgname: This field is required.",
                    "poc: This field is required.",
                    "review_url: This field is required.",
                    "status: Not a valid choice",
                    "summary: This field is required.",
                ]
            )

        data = {
            'pkgname': 'gnome-terminal',
            'summary': 'Terminal emulator for GNOME',
            'description': 'Terminal for GNOME...',
            'review_url': 'http://bugzilla.redhat.com/1234',
            'status': '',
            'critpath': '',
            'branches': '',
            'poc': '',
            'upstream_url': '',
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            ## FIXME: this is damn ugly but there is something wrong between
            ## me and jenkins that needs sorting out.
            self.assertTrue(
                data ==
                {
                    "error": "Invalid input submitted",
                    "error_detail": [
                        "status: This field is required.",
                        "poc: This field is required.",
                        "branches: '' is not a valid choice for this field",
                        "critpath: This field is required.",
                    ],
                    "output": "notok"
                }
                ## Me v
                or data ==
                {
                    "error": "Invalid input submitted",
                    "error_detail": [
                        "status: This field is required.",
                        "branches: '' is not a valid choice for this field",
                        "poc: This field is required.",
                    ],
                    "output": "notok"
                }
            )

        data = {
            'pkgname': 'gnome-terminal',
            'summary': 'Terminal emulator for GNOME',
            'description': 'Terminal for GNOME...',
            'review_url': 'http://bugzilla.redhat.com/1234',
            'status': 'Approved',
            'branches': 'master',
            'poc': 'mclasen',
            'upstream_url': 'http://www.gnome.org/',
            'critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "Invalid input submitted",
                    "error_detail": [
                        "branches: 'master' is not a valid choice for this "
                        "field"
                    ],
                    "output": "notok"
                }

            )

        create_collection(self.session)

        data = {
            'pkgname': 'gnome-terminal',
            'summary': 'Terminal emulator for GNOME',
            'description': 'Terminal for GNOME...',
            'review_url': 'http://bugzilla.redhat.com/1234',
            'status': 'Approved',
            'branches': 'master',
            'poc': 'mclasen',
            'upstream_url': 'http://www.gnome.org/',
            'critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "error": "User \"mclasen\" is not in the packager group",
                    "output": "notok"
                }
            )

        mock_func.get_packagers.return_value = ['mclasen']
        mock_func.log.return_value = ''

        data = {
            'pkgname': 'gnome-terminal',
            'summary': 'Terminal emulator for GNOME',
            'description': 'Terminal for GNOME...',
            'review_url': 'http://bugzilla.redhat.com/1234',
            'status': 'Approved',
            'branches': 'master',
            'poc': 'mclasen',
            'upstream_url': 'http://www.gnome.org/',
            'critpath': False,
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/package/new/', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                data,
                {
                    "messages": [
                        "Package created"
                    ],
                    "output": "ok"
                }
            )
コード例 #21
0
    def test_package_new(self, login_func, utils_module):
        """ Test the package_new function. """
        login_func.return_value = None
        create_package_acl(self.session)

        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/new/package/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/new/package/')
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Create a new package</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_name': '',
                'pkg_summary': '',
                'pkg_description': '',
                'pkg_reviewURL': '',
                'pkg_status': '',
                'pkg_collection': '',
                'pkg_poc': '',
                'pkg_upstreamURL': '',
                'pkg_critpath': '',
                'csrf_token': csrf_token,
            }

            output = self.app.post('/new/package/', data=data)
            self.assertEqual(output.status_code, 200)
            self.assertEqual(
                output.data.count(
                    '<td class="errors">This field is required.</td>'), 5)

            utils_module.get_packagers.return_value = ['mclasen']
            utils_module.log.return_value = ''

            data = {
                'pkgname': 'gnome-terminal',
                'summary': 'Terminal emulator for GNOME',
                'description': 'Terminal for GNOME...',
                'review_url': 'http://bugzilla.redhat.com/1234',
                'status': 'Approved',
                'branches': 'master',
                'poc': 'mclasen',
                'upstream_url': '',
                'critpath': False,
                'csrf_token': csrf_token,
            }

            output = self.app.post('/new/package/',
                                   data=data,
                                   follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Package created</li>' in output.data)
            self.assertTrue('<h1>Search packages</h1>' in output.data)
            self.assertTrue(
                '<a href="/package/gnome-terminal/">' in output.data)
コード例 #22
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)
コード例 #23
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)
コード例 #24
0
    def test_collection_status(self, login_func):
        """ Test the api_collection_status function.  """
        login_func.return_value = None

        # Redirect as you are not admin
        user = FakeFasUser()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/f18/status/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/f18/status/')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(sorted(data), ['error', 'error_detail', 'output'])
            self.assertEqual(data['error'], "Invalid input submitted")

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

            self.assertEqual(sorted(data['error_detail']), [
                "branch: This field is required.",
                "clt_status: Not a valid choice",
            ])

        data = {'branch': 'f18', 'clt_status': 'EOL'}
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/f19/status/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "output": "notok",
                    "error": "You're trying to update the wrong collection",
                })

        data = {'branch': 'f18', 'clt_status': 'EOL'}
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/f18/status', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(data, {
                "output": "notok",
                "error": 'Could not find collection "f18"',
            })

        create_collection(self.session)

        data = {'branch': 'f18', 'clt_status': 'EOL'}
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/f18/status', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "output": "ok",
                    "messages":
                    ['Collection updated from "Active" to \"EOL\"'],
                })
コード例 #25
0
    def test_collection_new(self, login_func):
        """ Test the api_collection_new function.  """
        login_func.return_value = None

        # Redirect as you are not admin
        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/new/')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()

        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/new/')
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error":
                    "Invalid input submitted",
                    "error_detail": [
                        "dist_tag: This field is required.",
                        "version: This field is required.",
                        "clt_status: Not a valid choice",
                        "kojiname: This field is required.",
                        "clt_name: This field is required.",
                        "branchname: This field is required.",
                    ],
                    "output":
                    "notok",
                })

        data = {
            'clt_name': 'Fedora EPEL',
            'version': '6',
            'branchname': 'EL-6',
            'clt_status': 'ACTIVE',
            'dist_tag': '.el6',
            'kojiname': 'epel6'
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/new/', data=data)
            self.assertEqual(output.status_code, 500)
            data = json.loads(output.data)
            self.assertEqual(
                data, {
                    "error": "Invalid input submitted",
                    "error_detail": ["clt_status: Not a valid choice"],
                    "output": "notok"
                })

        # Need to find out how to set flask.g.fas_user
        data = {
            'clt_name': 'Fedora EPEL',
            'version': '6',
            'branchname': 'EL-6',
            'clt_status': 'Active',
            'dist_tag': '.el6',
            'kojiname': 'epel6'
        }
        with user_set(pkgdb2.APP, user):
            output = self.app.post('/api/collection/new/', data=data)
            self.assertEqual(output.status_code, 200)
            data = json.loads(output.data)
            self.assertEqual(data, {
                "messages": ["Collection \"EL-6\" created"],
                "output": "ok"
            })
コード例 #26
0
    def test_unorphan_package(self):
        """ Test the unorphan_package function. """
        create_package_acl(self.session)

        # Wrong package name
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.unorphan_package,
                          self.session,
                          pkg_name='asd',
                          clt_name='devel',
                          pkg_user='******',
                          user=FakeFasUser())

        # Wrong collection
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.unorphan_package,
                          self.session,
                          pkg_name='guake',
                          clt_name='asd',
                          pkg_user='******',
                          user=FakeFasUser())

        # Package is not orphaned
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.unorphan_package,
                          self.session,
                          pkg_name='guake',
                          clt_name='devel',
                          pkg_user='******',
                          user=FakeFasUser())

        # Orphan package
        pkgdblib.update_pkg_poc(
            self.session,
            pkg_name='guake',
            clt_name='devel',
            user=FakeFasUserAdmin(),
            pkg_poc='orphan',
        )

        # User cannot unorphan for someone else
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.unorphan_package,
                          self.session,
                          pkg_name='guake',
                          clt_name='devel',
                          pkg_user='******',
                          user=FakeFasUser())

        # User must be a packager
        user = FakeFasUser()
        user.groups = ['cla_done']
        self.assertRaises(pkgdblib.PkgdbException,
                          pkgdblib.unorphan_package,
                          self.session,
                          pkg_name='guake',
                          clt_name='devel',
                          pkg_user='******',
                          user=user)

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'orphan')
        self.assertEqual(pkg_acl[1].status, 'Orphaned')

        pkgdblib.unorphan_package(self.session,
                                  pkg_name='guake',
                                  clt_name='devel',
                                  pkg_user='******',
                                  user=FakeFasUser())

        pkg_acl = pkgdblib.get_acl_package(self.session, 'guake')
        self.assertEqual(pkg_acl[1].collection.branchname, 'devel')
        self.assertEqual(pkg_acl[1].package.name, 'guake')
        self.assertEqual(pkg_acl[1].point_of_contact, 'pingou')
        self.assertEqual(pkg_acl[1].status, 'Approved')
コード例 #27
0
    def test_collection_edit(self, login_func):
        """ Test the collection_edit function. """
        login_func.return_value = None
        create_package_acl(self.session)

        user = FakeFasUser()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/collection/master/edit')
            self.assertEqual(output.status_code, 302)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/collection/master/edit')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Edit collection</h1>' in output.data)
            self.assertTrue(
                '<input id="csrf_token" name="csrf_token"' in output.data)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/collection/random/edit')

            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="errors">No collection of this name found.</li>'
                in output.data)

        user = FakeFasUserAdmin()
        with user_set(pkgdb2.APP, user):
            output = self.app.get('/collection/f17/edit')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Edit collection</h1>' in output.data)
            self.assertTrue(
                '<input id="csrf_token" name="csrf_token"' in output.data)

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

            collections = model.Collection.by_name(self.session, 'f17')
            self.assertEqual(
                "Collection(u'Fedora', u'17', u'Active', owner:u'toshio')",
                collections.__repr__())
            self.assertEqual(collections.branchname, 'f17')

            data = {
                'clt_name': 'Fedora',
                'version': '17',
                'clt_status': 'Active',
                'branchname': 'f17',
                'dist_tag': '.fc17',
                'kojiname': 'f17',
                'csrf_token': csrf_token,
            }

            output = self.app.post('/collection/f17/edit', data=data,
                                   follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Collection &#34;f17&#34; edited</li>'
                in output.data)

            collections = model.Collection.by_name(self.session, 'f17')
            self.assertEqual(
                "Collection(u'Fedora', u'17', u'Active', owner:u'toshio')",
                collections.__repr__())
            self.assertEqual(collections.branchname, 'f17')
コード例 #28
0
    def test_set_acl_package(self):
        """ Test the set_acl_package function. """
        self.test_add_package()

        # Not allowed to set acl on non-existant package
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='test',
            clt_name='F-17',
            pkg_user='******',
            acl='nothing',
            status='Appr',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Not allowed to set non-existant collection
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-16',
            pkg_user='******',
            acl='nothing',
            status='Appr',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Not allowed to set non-existant status
        self.assertRaises(
            IntegrityError,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            acl='commit',
            pkg_user='******',
            status='Appro',
            user=FakeFasUserAdmin(),
        )
        self.session.rollback()

        # Not allowed to set non-existant acl
        self.assertRaises(
            IntegrityError,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='nothing',
            status='Approved',
            user=FakeFasUserAdmin(),
        )
        self.session.rollback()

        # Not allowed to set acl for yourself
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='approveacls',
            status='Approved',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Not allowed to set acl for someone else
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='commit',
            status='Approved',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Not allowed to set acl approveacl to a group
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='approveacls',
            status='Approved',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # Group must ends with -sig
        self.assertRaises(
            pkgdblib.PkgdbException,
            pkgdblib.set_acl_package,
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='commit',
            status='Approved',
            user=FakeFasUser(),
        )
        self.session.rollback()

        # You can ask for new ACLs
        pkgdblib.set_acl_package(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='approveacls',
            status='Awaiting Review',
            user=FakeFasUser(),
        )

        # You can obsolete your own ACLs
        pkgdblib.set_acl_package(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='approveacls',
            status='Obsolete',
            user=FakeFasUser(),
        )

        # You can remove your own ACLs
        pkgdblib.set_acl_package(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='approveacls',
            status='Removed',
            user=FakeFasUser(),
        )

        # An admin can approve you ACLs
        pkgdblib.set_acl_package(
            self.session,
            pkg_name='guake',
            clt_name='F-18',
            pkg_user='******',
            acl='commit',
            status='Approved',
            user=FakeFasUserAdmin(),
        )

        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(len(pkg_acl[0].acls), 6)
コード例 #29
0
ファイル: test_flask_api_acls.py プロジェクト: voxik/pkgdb2
    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)
コード例 #30
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')