def test_no_release(self): """If a build does not have a Release, the validator should set one.""" release = models.Release.query.first() request = mock.Mock() request.db = self.db request.errors = Errors() request.koji.listTags.return_value = [{'name': release.candidate_tag}] build = models.Build.query.first() build.release = None self.db.commit() validators._validate_override_build(request, build.nvr, self.db) self.assertEqual(len(request.errors), 0) build = models.Build.query.filter_by(nvr=build.nvr).one() self.assertEqual(build.release.name, release.name)
def test_no_build_exception(self): """Assert exception handling when the build is not found and koji is unavailable.""" request = mock.Mock() request.db = self.db request.errors = Errors() request.koji.listTags.side_effect = IOError('You forgot to pay your ISP.') request.validated = {'edited': None} validators._validate_override_build(request, 'does not exist', self.db) assert request.errors == [ {'location': 'body', 'name': 'nvr', 'description': ("Couldn't determine koji tags for does not exist, 'You forgot to pay " "your ISP.'")} ] assert request.errors.status == exceptions.HTTPBadRequest.code
def test_test_gating_status_is_failed(self): """If a build's test gating status is failed, the validator should complain.""" request = mock.Mock() request.db = self.db request.errors = Errors() request.validated = {'edited': None} build = models.Build.query.first() build.update.test_gating_status = models.TestGatingStatus.failed self.db.commit() validators._validate_override_build(request, build.nvr, self.db) assert request.errors == [ {'location': 'body', 'name': 'nvr', 'description': "Cannot create a buildroot override if build's " "test gating status is failed."} ] assert request.errors.status == exceptions.HTTPBadRequest.code
def test_wrong_tag(self, get_session): """If a build does not have a candidate or testing tag, the validator should complain.""" release = models.Release.query.first() request = mock.Mock() request.db = self.db request.errors = Errors() request.koji.listTags.return_value = [{'name': release.stable_tag}] request.validated = {'edited': None} get_session.return_value.listTags.return_value = request.koji.listTags.return_value build = models.Build.query.first() validators._validate_override_build(request, build.nvr, self.db) assert request.errors == [ {'location': 'body', 'name': 'nvr', 'description': "Invalid build. It must be tagged as either candidate or testing."} ] assert request.errors.status == exceptions.HTTPBadRequest.code
def test_indeterminate_release(self): """If a build does not have tags that identify a Release, the validator should complain.""" request = mock.Mock() request.db = self.db request.errors = Errors() request.koji.listTags.return_value = [{'name': 'invalid'}] request.validated = {'edited': None} build = models.Build.query.first() build.release = None self.db.commit() validators._validate_override_build(request, build.nvr, self.db) assert request.errors == [ {'location': 'body', 'name': 'nvr', 'description': "Invalid build. Couldn't determine release from koji tags."} ] build = models.Build.query.filter_by(nvr=build.nvr).one() assert build.release is None assert request.errors.status == exceptions.HTTPBadRequest.code