Пример #1
0
    def test_browse_flags(self):
        """ Test the browse_flags function. """

        create_flagged_project(self.session)

        output = self.app.get('/flags', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(b'<ul id="flashes" class="list-group">'
                        b'<li class="list-group-item list-group-item-warning">'
                        b'Login required</li></ul>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?page=abc&limit=def&from_date=ghi')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?from_date=%s' %
                           datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            # geany shouldn't show up if the "from date" is tomorrow
            tomorrow = datetime.datetime.utcnow().date() + datetime.timedelta(
                days=1)
            output = c.get('/flags?from_date=%s' % tomorrow)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertFalse(b'geany' in output.data)

            output = c.get('/flags?from_date=%s&project=geany' %
                           datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)
Пример #2
0
    def test_browse_flags(self):
        """ Test the browse_flags function. """

        create_flagged_project(self.session)

        output = self.app.get('/flags', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(
            b'<ul id="flashes" class="list-group">'
            b'<li class="list-group-item list-group-item-warning">'
            b'Login required</li></ul>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/flags')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?page=abc&limit=def&from_date=ghi')
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            output = c.get('/flags?from_date=%s' % datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)

            # geany shouldn't show up if the "from date" is tomorrow
            tomorrow = datetime.datetime.utcnow().date() + datetime.timedelta(days=1)
            output = c.get('/flags?from_date=%s' % tomorrow)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertFalse(b'geany' in output.data)

            output = c.get('/flags?from_date=%s&project=geany' % datetime.datetime.utcnow().date())
            self.assertEqual(output.status_code, 200)
            self.assertTrue(b'<h1>Flags</h1>' in output.data)
            self.assertTrue(b'geany' in output.data)
Пример #3
0
    def test_flag_project(self):
        """ Test setting the flag state of a project. """

        flag = create_flagged_project(self.session)

        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'some_invalid_openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                           follow_redirects=True)

            # Non-admin ID will complain, insufficient creds
            self.assertEqual(output.status_code, 401)

        # Nothing should have changed.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        self.assertEqual(flag.state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                           follow_redirects=True)
            self.assertEqual(output.status_code, 200)

            # Now the flag state should *not* have toggled because while we did
            # provide a valid admin openid, we did not provide a CSRF token.
            project = model.Project.by_name(self.session, 'geany')[0]
            self.assertEqual(len(project.flags), 1)
            self.assertEqual(project.flags[0].state, 'open')

            # Go ahead and get the csrf token from the page and try again.
            data = {}

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

            data['csrf_token'] = csrf_token

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Now the flag state should have toggled.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'closed')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                           follow_redirects=True)

            # Get a new CSRF Token
            output = c.get('/distro/add')
            csrf_token = output.data.split(
                b'name="csrf_token" type="hidden" value="')[1].split(b'">')[0]

            # Grab the CSRF token again so we can toggle the flag again
            data = {'csrf_token': csrf_token}

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Make sure we can toggle the flag again.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/nonsense'.format(flag.id),
                           follow_redirects=True)
            self.assertEqual(output.status_code, 422)

        # Make sure that passing garbage doesn't change anything.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')
Пример #4
0
    def test_flag_project(self):
        """ Test setting the flag state of a project. """

        flag = create_flagged_project(self.session)

        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'some_invalid_openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                            follow_redirects=True)

            # Non-admin ID will complain, insufficient creds
            self.assertEqual(output.status_code, 401)

        # Nothing should have changed.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        self.assertEqual(flag.state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

            # Now the flag state should *not* have toggled because while we did
            # provide a valid admin openid, we did not provide a CSRF token.
            project = model.Project.by_name(self.session, 'geany')[0]
            self.assertEqual(len(project.flags), 1)
            self.assertEqual(project.flags[0].state, 'open')

            # Go ahead and get the csrf token from the page and try again.
            data = {}

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

            data['csrf_token'] = csrf_token

            output = c.post('/flags/{0}/set/closed'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Now the flag state should have toggled.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'closed')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                            follow_redirects=True)

            # Get a new CSRF Token
            output = c.get('/distro/add')
            csrf_token = output.data.split(
                b'name="csrf_token" type="hidden" value="')[1].split(b'">')[0]

            # Grab the CSRF token again so we can toggle the flag again
            data = {'csrf_token': csrf_token}

            output = c.post('/flags/{0}/set/open'.format(flag.id),
                            data=data,
                            follow_redirects=True)
            self.assertEqual(output.status_code, 200)

        # Make sure we can toggle the flag again.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.post('/flags/{0}/set/nonsense'.format(flag.id),
                            follow_redirects=True)
            self.assertEqual(output.status_code, 422)

        # Make sure that passing garbage doesn't change anything.
        project = model.Project.by_name(self.session, 'geany')[0]
        self.assertEqual(len(project.flags), 1)
        self.assertEqual(project.flags[0].state, 'open')