bodhi/controllers.py | 17 ++++++++-- bodhi/tests/test_controllers.py | 64 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 9 deletions(-)
New commits: commit 83250e00a8d411eb6a419d65a699bdbf22be046a Author: Luke Macken lmacken@redhat.com Date: Wed Jan 13 16:31:06 2010 -0500
Fix a bug with our tests
diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py index 30fcb92..e066a0c 100644 --- a/bodhi/tests/test_controllers.py +++ b/bodhi/tests/test_controllers.py @@ -1551,7 +1551,6 @@ class TestControllers(testutil.DBTest): assert json['num_items'] == 1 assert json['updates'][0]['title'] == params['builds']
- testutil.capture_log(['bodhi.model', 'bodhi.controllers']) testutil.create_request('/updates/list?%s' % urlencode({ 'tg_format': 'json', @@ -1561,4 +1560,4 @@ class TestControllers(testutil.DBTest): method='GET', headers=session)
json = simplejson.loads(cherrypy.response.body[0]) - assert json['num_items'] == 0, testutil.get_log() + assert json['num_items'] == 0
commit c2aa41e8c61ce6041e0cce00e7923b9579c3f2a7 Author: Luke Macken lmacken@redhat.com Date: Wed Jan 13 15:58:20 2010 -0500
Add a 'created_since' argument to our query API that returns updates that have been created since a given date.
diff --git a/bodhi/controllers.py b/bodhi/controllers.py index 8af5184..bd91405 100644 --- a/bodhi/controllers.py +++ b/bodhi/controllers.py @@ -222,10 +222,12 @@ class Root(controllers.RootController): 'get_auth': validators.StringBool(), 'username': validators.UnicodeString(), 'count_only': validators.StringBool(), + 'created_since': validators.UnicodeString(), }) def list(self, release=None, bugs=None, cves=None, status=None, type_=None, package=None, mine=False, get_auth=False, username=None, - start_date=None, end_date=None, count_only=False, **kw): + start_date=None, end_date=None, count_only=False, + created_since=None, **kw): """ Return a list of updates based on given parameters """ log.debug('list(%s)' % locals()) query = [] @@ -239,7 +241,7 @@ class Root(controllers.RootController):
# If no arguments are specified, return the most recent updates if not release and not bugs and not cves and not status and not type_ \ - and not package and not mine and not username: + and not package and not mine and not username and not created_since: log.debug("No arguments, returning latest") updates = PackageUpdate.select(orderBy=orderBy).reversed() num_items = updates.count() @@ -267,11 +269,18 @@ class Root(controllers.RootController): PackageUpdate.q.submitter == identity.current.user_name) if username: query.append(PackageUpdate.q.submitter == username) + if created_since: + created_since = datetime(*time.strptime(created_since, + '%Y-%m-%d %H:%M:%S')[:-2]) + log.debug('Querying updates created since %s' % created_since) + query.append(PackageUpdate.q.date_submitted >= created_since) if start_date: - start_date = datetime(*time.strptime(start_date, '%Y-%m-%d %H:%M:%S')[:-2]) + start_date = datetime(*time.strptime(start_date, + '%Y-%m-%d %H:%M:%S')[:-2]) query.append(PackageUpdate.q.date_pushed >= start_date) if end_date: - end_date = datetime(*time.strptime(end_date, '%Y-%m-%d %H:%M:%S')[:-2]) + end_date = datetime(*time.strptime(end_date, + '%Y-%m-%d %H:%M:%S')[:-2]) query.append(PackageUpdate.q.date_pushed <= end_date)
updates = PackageUpdate.select(AND(*query), diff --git a/bodhi/tests/test_controllers.py b/bodhi/tests/test_controllers.py index c0dd645..30fcb92 100644 --- a/bodhi/tests/test_controllers.py +++ b/bodhi/tests/test_controllers.py @@ -2,23 +2,24 @@ # -*- coding: utf-8 -*-
import os +import urllib +import simplejson import turbogears import cPickle as pickle -from datetime import datetime
+from urllib import urlencode +from datetime import datetime, timedelta +from sqlobject import SQLObjectNotFound from turbogears import testutil, database, config turbogears.update_config(configfile='bodhi.cfg', modulename='bodhi.config') database.set_db_uri("sqlite:///:memory:")
-import urllib -import cherrypy - -from sqlobject import SQLObjectNotFound from bodhi.model import Release, PackageUpdate, User, PackageBuild, Bugzilla, \ Group from bodhi.controllers import Root from bodhi.exceptions import DuplicateEntryError
+import cherrypy cherrypy.root = Root()
def create_release(num='7', dist='dist-fc', **kw): @@ -1507,3 +1508,57 @@ class TestControllers(testutil.DBTest): method='GET', headers=session)
assert "Mark Critical Path update as Stable" in cherrypy.response.body[0] + + def test_created_since(self): + """ + Ensure admins can submit critpath updates for pending releases to stable + """ + session = login() + create_release() + params = { + 'builds' : 'kernel-2.6.31-1.fc7', + 'release' : 'Fedora 7', + 'type_' : 'bugfix', + 'bugs' : '', + 'notes' : 'foobar', + 'stable_karma' : 1, + 'request': None, + 'unstable_karma' : -1, + } + self.save_update(params, session) + update = PackageUpdate.byTitle(params['builds']) + + # Pretend it's pushed to stable + update.pushed = True + update.status = 'stable' + update.date_submitted = datetime(2010, 01, 01, 12, 00, 00) + + ## Test web UI + testutil.create_request('/updates/list?%s' % + urlencode({'created_since': str(update.date_submitted)}), + method='GET', headers=session) + + assert '1 update found' in cherrypy.response.body[0], cherrypy.response.body[0] + assert 'kernel-2.6.31-1.fc7' in cherrypy.response.body[0] + + ## Test JSON API + testutil.create_request('/updates/list?%s' % + urlencode({'created_since': str(update.date_submitted), + 'tg_format': 'json'}), + method='GET', headers=session) + + json = simplejson.loads(cherrypy.response.body[0]) + assert json['num_items'] == 1 + assert json['updates'][0]['title'] == params['builds'] + + testutil.capture_log(['bodhi.model', 'bodhi.controllers']) + testutil.create_request('/updates/list?%s' % + urlencode({ + 'tg_format': 'json', + 'created_since': str(update.date_submitted + + timedelta(days=1)), + }), + method='GET', headers=session) + + json = simplejson.loads(cherrypy.response.body[0]) + assert json['num_items'] == 0, testutil.get_log()