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_project_flag_search_by_date(self): """ Assert that 'ProjectFlag.search' returns correct project if from date is provided. """ create_flagged_project(self.session) from_date = datetime.datetime.utcnow().date() - datetime.timedelta(days=1) flags = models.ProjectFlag.search(self.session, from_date=from_date) self.assertEqual(len(flags), 1)
def test_project_flag_search_by_date(self): """ Assert that 'ProjectFlag.search' returns correct project if from date is provided. """ create_flagged_project(self.session) from_date = datetime.datetime.utcnow().date() - datetime.timedelta(days=1) flags = models.ProjectFlag.search(self.session, from_date=from_date) self.assertEqual(len(flags), 1)
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_project_delete_cascade(self): """ Assert deletion of mapped packages when project is deleted """ project = models.Project( name='test', homepage='https://example.com', backend='custom', ecosystem_name='pypi', version_scheme='Invalid', ) self.session.add(project) package = models.Packages( project_id=1, distro_name='Fedora', package_name='test', ) self.session.add(package) self.session.commit() projects = self.session.query(models.Project).all() self.assertEqual(len(projects), 1) self.assertEqual(len(projects[0].package), 1) self.session.delete(projects[0]) self.session.commit() projects = self.session.query(models.Project).all() packages = self.session.query(models.Packages).all() self.assertEqual(len(projects), 0) self.assertEqual(len(packages), 0) create_flagged_project(self.session) projects = self.session.query(models.Project).all() self.assertEqual(len(projects), 1) self.assertEqual(len(projects[0].flags), 1) self.session.delete(projects[0]) self.session.commit() projects = self.session.query(models.Project).all() packages = self.session.query(models.ProjectFlag).all() self.assertEqual(len(projects), 0) self.assertEqual(len(packages), 0)
def test_set_flag_state(self): """ Test set state """ flag = create_flagged_project(self.session) utilities.set_flag_state( self.session, flag=flag, state="closed", user_id="*****@*****.**" ) project_obj = models.Project.get(self.session, 1) self.assertEqual(len(project_obj.flags), 1) self.assertEqual(project_obj.flags[0].state, "closed")
def test_project_delete_cascade(self): """ Assert deletion of mapped packages when project is deleted """ project = models.Project( name="test", homepage="https://example.com", backend="custom", ecosystem_name="pypi", version_scheme="Invalid", ) self.session.add(project) package = models.Packages( project_id=1, distro_name="Fedora", package_name="test" ) self.session.add(package) self.session.commit() projects = self.session.query(models.Project).all() self.assertEqual(len(projects), 1) self.assertEqual(len(projects[0].package), 1) self.session.delete(projects[0]) self.session.commit() projects = self.session.query(models.Project).all() packages = self.session.query(models.Packages).all() self.assertEqual(len(projects), 0) self.assertEqual(len(packages), 0) create_flagged_project(self.session) projects = self.session.query(models.Project).all() self.assertEqual(len(projects), 1) self.assertEqual(len(projects[0].flags), 1) self.session.delete(projects[0]) self.session.commit() projects = self.session.query(models.Project).all() packages = self.session.query(models.ProjectFlag).all() self.assertEqual(len(projects), 0) self.assertEqual(len(packages), 0)
def test_set_flag_state_no_change(self): """ Test set state """ flag = create_flagged_project(self.session) self.assertRaises( exceptions.AnityaException, utilities.set_flag_state, self.session, flag=flag, state="open", user_id="*****@*****.**", )
def test_set_flag_state(self): """ Test set state """ flag = create_flagged_project(self.session) utilities.set_flag_state(self.session, flag=flag, state="closed", user_id="*****@*****.**") project_obj = models.Project.get(self.session, 1) self.assertEqual(len(project_obj.flags), 1) self.assertEqual(project_obj.flags[0].state, "closed")
def test_set_flag_state_no_change(self): """ Test set state """ flag = create_flagged_project(self.session) self.assertRaises( exceptions.AnityaException, utilities.set_flag_state, self.session, flag=flag, state="open", user_id="*****@*****.**", )
def test_set_flag_project_session_error(self): """ Test SQLAlchemy session error """ flag = create_flagged_project(self.session) with mock.patch.object( self.session, "flush", mock.Mock(side_effect=[SQLAlchemyError(), None]) ): self.assertRaises( exceptions.AnityaException, utilities.set_flag_state, self.session, flag=flag, state="closed", user_id="*****@*****.**", )
def test_set_flag_project_session_error(self): """ Test SQLAlchemy session error """ flag = create_flagged_project(self.session) with mock.patch.object( self.session, "flush", mock.Mock(side_effect=[SQLAlchemyError(), None])): self.assertRaises( exceptions.AnityaException, utilities.set_flag_state, self.session, flag=flag, state="closed", user_id="*****@*****.**", )
def test_set_flag_state(self): """ Test set state """ flag = create_flagged_project(self.session) with fml_testing.mock_sends(anitya_schema.ProjectFlagSet): utilities.set_flag_state( self.session, flag=flag, state="closed", user_id="*****@*****.**", ) project_obj = models.Project.get(self.session, 1) self.assertEqual(len(project_obj.flags), 1) self.assertEqual(project_obj.flags[0].state, "closed")
def test_project_flag__json__(self): """ Test the ProjectFlag.__json__ function. """ flag = create_flagged_project(self.session) data = { "created_on": time.mktime(flag.created_on.timetuple()), "user": u"*****@*****.**", "state": u"open", "project": u"geany", "updated_on": time.mktime(flag.updated_on.timetuple()), "id": 1, } self.assertEqual(flag.__json__(), data) data["reason"] = u"this is a duplicate." self.assertEqual(flag.__json__(detailed=True), data)
def test_project_flag__json__(self): """ Test the ProjectFlag.__json__ function. """ flag = create_flagged_project(self.session) data = { 'created_on': time.mktime(flag.created_on.timetuple()), 'user': u'*****@*****.**', 'state': u'open', 'project': u'geany', 'updated_on': time.mktime(flag.updated_on.timetuple()), 'id': 1 } self.assertEqual(flag.__json__(), data) data['reason'] = u'This is a duplicate.' self.assertEqual(flag.__json__(detailed=True), data)
def test_project_flag__json__(self): """ Test the ProjectFlag.__json__ function. """ flag = create_flagged_project(self.session) data = { "created_on": time.mktime(flag.created_on.timetuple()), "user": u"*****@*****.**", "state": u"open", "project": u"geany", "updated_on": time.mktime(flag.updated_on.timetuple()), "id": 1, } self.assertEqual(flag.__json__(), data) data["reason"] = u"this is a duplicate." self.assertEqual(flag.__json__(detailed=True), data)
def test_project_flag_search_by_state(self): """ Assert that 'ProjectFlag.search' returns correct project if state is provided. """ flag = create_flagged_project(self.session) flag_add = utilities.flag_project( self.session, flag.project, "This is a duplicate.", "*****@*****.**", "user_openid_id", ) flag_add.state = "closed" self.session.add(flag_add) self.session.commit() flags = models.ProjectFlag.search(self.session, state="open") self.assertEqual(len(flags), 1)
def test_project_flag_search_count(self): """ Assert that 'ProjectFlag.search' returns correct project if count is set. """ flag = create_flagged_project(self.session) flag_add = utilities.flag_project( self.session, flag.project, "This is a duplicate.", "*****@*****.**", "user_openid_id", ) flag_add.state = "closed" self.session.add(flag_add) self.session.commit() flags = models.ProjectFlag.search(self.session, count=True) self.assertEqual(flags, 2)
def test_project_flag_search_count(self): """ Assert that 'ProjectFlag.search' returns correct project if count is set. """ flag = create_flagged_project(self.session) flag_add = utilities.flag_project( self.session, flag.project, "This is a duplicate.", "*****@*****.**", "user_openid_id", ) flag_add.state = "closed" self.session.add(flag_add) self.session.commit() flags = models.ProjectFlag.search(self.session, count=True) self.assertEqual(flags, 2)
def test_project_flag_search_by_state(self): """ Assert that 'ProjectFlag.search' returns correct project if state is provided. """ flag = create_flagged_project(self.session) flag_add = utilities.flag_project( self.session, flag.project, "This is a duplicate.", "*****@*****.**", "user_openid_id", ) flag_add.state = "closed" self.session.add(flag_add) self.session.commit() flags = models.ProjectFlag.search(self.session, state="open") self.assertEqual(len(flags), 1)
def test_project_flag_search_limit(self): """ Assert that 'ProjectFlag.search' returns correct project if limit is set. """ flag = create_flagged_project(self.session) with fml_testing.mock_sends(anitya_schema.ProjectFlag): flag_add = utilities.flag_project( self.session, flag.project, "This is a duplicate.", "*****@*****.**", "user_openid_id", ) flag_add.state = "closed" self.session.add(flag_add) self.session.commit() flags = models.ProjectFlag.search(self.session, limit=1) self.assertEqual(len(flags), 1)
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')
def test_project_flag_all(self): """ Test the ProjectFlag.all function. """ create_flagged_project(self.session) flags = models.ProjectFlag.all(self.session) self.assertEqual(len(flags), 1)
def test_project_flag__repr__(self): """ Test the ProjectFlag.__repr__ function. """ flag = create_flagged_project(self.session) self.assertEqual(repr(flag), "<ProjectFlag(geany, [email protected], open)>")
def test_project_flag_all(self): """ Test the ProjectFlag.all function. """ create_flagged_project(self.session) flags = models.ProjectFlag.all(self.session) self.assertEqual(len(flags), 1)
def test_project_flag__repr__(self): """ Test the ProjectFlag.__repr__ function. """ flag = create_flagged_project(self.session) self.assertEqual(repr(flag), "<ProjectFlag(geany, [email protected], open)>")