def test_create_duplicate_override(self, publish): release = Release.get(u"F17", self.db) package = Package(name=u"not-bodhi") self.db.add(package) build = Build(nvr=u"not-bodhi-2.0-2.fc17", package=package, release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = { "nvr": build.nvr, "notes": u"blah blah blah", "expiration_date": expiration_date, "csrf_token": self.get_csrf_token(), } res = self.app.post("/overrides/", data) publish.assert_called_once_with(topic="buildroot_override.tag", msg=mock.ANY) self.assertEquals(len(publish.call_args_list), 1) o = res.json_body self.assertEquals(o["build_id"], build.id) self.assertEquals(o["notes"], "blah blah blah") self.assertEquals(o["expiration_date"], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o["expired_date"], None) # Submit it again res = self.app.post("/overrides/", data, status=400) self.assertEquals( res.json_body["errors"][0]["description"], "Buildroot override for %s already exists" % build.nvr )
def get_release_json(request): id = request.matchdict.get('name') release = Release.get(id, request.db) if not release: request.errors.add('body', 'name', 'No such release') request.errors.status = HTTPNotFound.code return release
def test_cannot_edit_override_build(self, publish): session = DBSession() release = Release.get(u'F17', session) old_nvr = u'bodhi-2.0-1.fc17' res = self.app.get('/overrides/%s' % old_nvr) o = res.json_body['override'] expiration_date = o['expiration_date'] old_build_id = o['build_id'] build = Build(nvr=u'bodhi-2.0-2.fc17', release=release) session.add(build) session.flush() o.update({ 'nvr': build.nvr, 'edited': old_nvr, 'csrf_token': self.get_csrf_token(), }) res = self.app.post('/overrides/', o) override = res.json_body self.assertEquals(override['build_id'], old_build_id) self.assertEquals(override['notes'], 'blah blah blah') self.assertEquals(override['expiration_date'], expiration_date) self.assertEquals(override['expired_date'], None) self.assertEquals(len(publish.call_args_list), 0)
def test_cannot_edit_override_build(self, publish): release = Release.get(u'F17', self.db) old_nvr = u'bodhi-2.0-1.fc17' res = self.app.get('/overrides/%s' % old_nvr) o = res.json_body['override'] expiration_date = o['expiration_date'] old_build_id = o['build_id'] build = Build(nvr=u'bodhi-2.0-2.fc17', release=release) self.db.add(build) self.db.flush() o.update({ 'nvr': build.nvr, 'edited': old_nvr, 'csrf_token': self.get_csrf_token(), }) res = self.app.post('/overrides/', o) override = res.json_body self.assertEquals(override['build_id'], old_build_id) self.assertEquals(override['notes'], 'blah blah blah') self.assertEquals(override['expiration_date'], expiration_date) self.assertEquals(override['expired_date'], None) self.assertEquals(len(publish.call_args_list), 0)
def test_create_override(self, publish): session = DBSession() release = Release.get(u'F17', session) package = Package(name=u'not-bodhi') session.add(package) build = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) session.add(build) session.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = {'nvr': build.nvr, 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token()} res = self.app.post('/overrides/', data) publish.assert_called_once_with( topic='buildroot_override.tag', msg=mock.ANY) self.assertEquals(len(publish.call_args_list), 1) o = res.json_body self.assertEquals(o['build_id'], build.id) self.assertEquals(o['notes'], 'blah blah blah') self.assertEquals(o['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o['expired_date'], None)
def test_create_override(self, publish): release = Release.get(u'F17', self.db) package = Package(name=u'not-bodhi') self.db.add(package) build = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = { 'nvr': build.nvr, 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token() } res = self.app.post('/overrides/', data) publish.assert_called_once_with(topic='buildroot_override.tag', msg=mock.ANY) self.assertEquals(len(publish.call_args_list), 1) o = res.json_body self.assertEquals(o['build_id'], build.id) self.assertEquals(o['notes'], 'blah blah blah') self.assertEquals(o['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o['expired_date'], None)
def test_create_override_too_long(self, publish): release = Release.get(u'F17', self.db) package = Package(name=u'not-bodhi') self.db.add(package) build = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=60) data = {'nvr': build.nvr, 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token()} self.app.post('/overrides/', data, status=400)
def test_create_override_multiple_nvr(self, publish): session = DBSession() release = Release.get(u'F17', session) package = Package(name=u'not-bodhi') session.add(package) build1 = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) session.add(build1) session.flush() package = Package(name=u'another-not-bodhi') session.add(package) build2 = Build(nvr=u'another-not-bodhi-2.0-2.fc17', package=package, release=release) session.add(build2) session.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = { 'nvr': ','.join([build1.nvr, build2.nvr]), 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token(), } res = self.app.post('/overrides/', data) self.assertEquals(len(publish.call_args_list), 2) result = res.json_body self.assertEquals(result['caveats'][0]['description'], 'Your override submission was split into 2.') o1, o2 = result['overrides'] self.assertEquals(o1['build_id'], build1.id) self.assertEquals(o1['notes'], 'blah blah blah') self.assertEquals(o1['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o1['expired_date'], None) self.assertEquals(o2['build_id'], build2.id) self.assertEquals(o2['notes'], 'blah blah blah') self.assertEquals(o2['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o2['expired_date'], None)
def test_create_override_multiple_nvr(self, publish): release = Release.get(u'F17', self.db) package = Package(name=u'not-bodhi') self.db.add(package) build1 = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) self.db.add(build1) self.db.flush() package = Package(name=u'another-not-bodhi') self.db.add(package) build2 = Build(nvr=u'another-not-bodhi-2.0-2.fc17', package=package, release=release) self.db.add(build2) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = { 'nvr': ','.join([build1.nvr, build2.nvr]), 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token(), } res = self.app.post('/overrides/', data) self.assertEquals(len(publish.call_args_list), 2) result = res.json_body self.assertEquals(result['caveats'][0]['description'], 'Your override submission was split into 2.') o1, o2 = result['overrides'] self.assertEquals(o1['build_id'], build1.id) self.assertEquals(o1['notes'], 'blah blah blah') self.assertEquals(o1['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o1['expired_date'], None) self.assertEquals(o2['build_id'], build2.id) self.assertEquals(o2['notes'], 'blah blah blah') self.assertEquals(o2['expiration_date'], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o2['expired_date'], None)
def test_create_override_too_long(self, publish): release = Release.get(u"F17", self.db) package = Package(name=u"not-bodhi") self.db.add(package) build = Build(nvr=u"not-bodhi-2.0-2.fc17", package=package, release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=60) data = { "nvr": build.nvr, "notes": u"blah blah blah", "expiration_date": expiration_date, "csrf_token": self.get_csrf_token(), } self.app.post("/overrides/", data, status=400)
def test_create_override_too_long(self, publish): release = Release.get(u'F17', self.db) package = Package(name=u'not-bodhi') self.db.add(package) build = Build(nvr=u'not-bodhi-2.0-2.fc17', package=package, release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=60) data = { 'nvr': build.nvr, 'notes': u'blah blah blah', 'expiration_date': expiration_date, 'csrf_token': self.get_csrf_token() } self.app.post('/overrides/', data, status=400)
def test_edit_unexisting_override(self): release = Release.get(u"F17", self.db) build = Build(nvr=u"bodhi-2.0-2.fc17", release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) o = { "nvr": build.nvr, "notes": "blah blah blah", "expiration_date": expiration_date, "edited": build.nvr, "csrf_token": self.get_csrf_token(), } res = self.app.post("/overrides/", o, status=400) errors = res.json_body["errors"] self.assertEquals(len(errors), 1) self.assertEquals(errors[0]["name"], "edited") self.assertEquals(errors[0]["description"], "No buildroot override for this build")
def test_create_override_multiple_nvr(self, publish): release = Release.get(u"F17", self.db) package = Package(name=u"not-bodhi") self.db.add(package) build1 = Build(nvr=u"not-bodhi-2.0-2.fc17", package=package, release=release) self.db.add(build1) self.db.flush() package = Package(name=u"another-not-bodhi") self.db.add(package) build2 = Build(nvr=u"another-not-bodhi-2.0-2.fc17", package=package, release=release) self.db.add(build2) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) data = { "nvr": ",".join([build1.nvr, build2.nvr]), "notes": u"blah blah blah", "expiration_date": expiration_date, "csrf_token": self.get_csrf_token(), } res = self.app.post("/overrides/", data) self.assertEquals(len(publish.call_args_list), 2) result = res.json_body self.assertEquals(result["caveats"][0]["description"], "Your override submission was split into 2.") o1, o2 = result["overrides"] self.assertEquals(o1["build_id"], build1.id) self.assertEquals(o1["notes"], "blah blah blah") self.assertEquals(o1["expiration_date"], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o1["expired_date"], None) self.assertEquals(o2["build_id"], build2.id) self.assertEquals(o2["notes"], "blah blah blah") self.assertEquals(o2["expiration_date"], expiration_date.strftime("%Y-%m-%d %H:%M:%S")) self.assertEquals(o2["expired_date"], None)
def test_edit_unexisting_override(self): release = Release.get(u'F17', self.db) build = Build(nvr=u'bodhi-2.0-2.fc17', release=release) self.db.add(build) self.db.flush() expiration_date = datetime.utcnow() + timedelta(days=1) o = { 'nvr': build.nvr, 'notes': 'blah blah blah', 'expiration_date': expiration_date, 'edited': build.nvr, 'csrf_token': self.get_csrf_token(), } res = self.app.post('/overrides/', o, status=400) errors = res.json_body['errors'] self.assertEquals(len(errors), 1) self.assertEquals(errors[0]['name'], 'edited') self.assertEquals(errors[0]['description'], 'No buildroot override for this build')
def test_cannot_edit_override_build(self, publish): release = Release.get(u"F17", self.db) old_nvr = u"bodhi-2.0-1.fc17" res = self.app.get("/overrides/%s" % old_nvr) o = res.json_body["override"] expiration_date = o["expiration_date"] old_build_id = o["build_id"] build = Build(nvr=u"bodhi-2.0-2.fc17", release=release) self.db.add(build) self.db.flush() o.update({"nvr": build.nvr, "edited": old_nvr, "csrf_token": self.get_csrf_token()}) res = self.app.post("/overrides/", o) override = res.json_body self.assertEquals(override["build_id"], old_build_id) self.assertEquals(override["notes"], "blah blah blah") self.assertEquals(override["expiration_date"], expiration_date) self.assertEquals(override["expired_date"], None) self.assertEquals(len(publish.call_args_list), 0)
def get_release_html(request): id = request.matchdict.get('name') release = Release.get(id, request.db) if not release: request.errors.add('body', 'name', 'No such release') request.errors.status = HTTPNotFound.code updates = request.db.query(Update).filter( Update.release==release).order_by( Update.date_submitted.desc()) updates_count = request.db.query(Update.date_submitted, Update.type).filter( Update.release==release).order_by( Update.date_submitted.desc()) date_commits = {} dates = set() for update in updates_count.all(): d = update.date_submitted yearmonth = str(d.year) + '/' + str(d.month).zfill(2) dates.add(yearmonth) if not update.type.description in date_commits: date_commits[update.type.description] = {} if yearmonth in date_commits[update.type.description]: date_commits[update.type.description][yearmonth] += 1 else: date_commits[update.type.description][yearmonth] = 0 base_count_query = request.db.query(Update)\ .filter(Update.release==release) num_updates_pending = base_count_query\ .filter(Update.status==UpdateStatus.pending).count() num_updates_testing = base_count_query\ .filter(Update.status==UpdateStatus.testing).count() num_updates_stable = base_count_query\ .filter(Update.status==UpdateStatus.stable).count() num_updates_unpushed = base_count_query\ .filter(Update.status==UpdateStatus.unpushed).count() num_updates_obsolete = base_count_query\ .filter(Update.status==UpdateStatus.obsolete).count() num_updates_security = base_count_query\ .filter(Update.type==UpdateType.security).count() num_updates_bugfix = base_count_query\ .filter(Update.type==UpdateType.bugfix).count() num_updates_enhancement = base_count_query\ .filter(Update.type==UpdateType.enhancement).count() num_updates_newpackage = base_count_query\ .filter(Update.type==UpdateType.newpackage).count() num_active_overrides = request.db.query( BuildrootOverride ).filter( BuildrootOverride.expired_date==None ).join( BuildrootOverride.build ).join( Build.release ).filter( Build.release==release ).count() num_expired_overrides = request.db.query( BuildrootOverride ).filter( BuildrootOverride.expired_date!=None ).join( BuildrootOverride.build ).join( Build.release ).filter( Build.release==release ).count() return dict(release=release, latest_updates=updates.limit(25).all(), count=updates.count(), date_commits=date_commits, dates=sorted(dates), num_updates_pending=num_updates_pending, num_updates_testing=num_updates_testing, num_updates_stable=num_updates_stable, num_updates_unpushed=num_updates_unpushed, num_updates_obsolete=num_updates_obsolete, num_updates_security=num_updates_security, num_updates_bugfix=num_updates_bugfix, num_updates_enhancement=num_updates_enhancement, num_updates_newpackage=num_updates_newpackage, num_active_overrides=num_active_overrides, num_expired_overrides=num_expired_overrides, )