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