From 71023d8bbd6533473591dacd1aea8b78864af815 Mon Sep 17 00:00:00 2001 From: Michael Simacek Date: Oct 17 2014 11:26:38 +0000 Subject: Tests for triggers --- diff --git a/test/common.py b/test/common.py index d42e371..8f2a053 100644 --- a/test/common.py +++ b/test/common.py @@ -81,6 +81,7 @@ class DBTest(AbstractTest): def __init__(self, *args, **kwargs): super(DBTest, self).__init__(*args, **kwargs) self.s = None + self.inited = False if use_postgres: cfg = util.config['database_config'].copy() @@ -96,7 +97,9 @@ class DBTest(AbstractTest): def setUp(self): super(DBTest, self).setUp() - m.Base.metadata.create_all(m.engine) + if not self.inited: + m.Base.metadata.create_all(m.engine) + self.inited = True tables = m.Base.metadata.tables conn = m.engine.connect() for table in tables.values(): @@ -120,19 +123,19 @@ class DBTest(AbstractTest): return pkg, build def prepare_packages(self, pkg_names): - pkgs = {} + pkgs = [] for name in pkg_names: pkg = self.s.query(m.Package).filter_by(name=name).first() if not pkg: pkg = m.Package(name=name) self.s.add(pkg) - pkgs[name] = pkg + pkgs.append(pkg) self.s.commit() return pkgs def prepare_builds(self, repo_id, **builds): new_builds = [] - for pkg_name, state in builds.items(): + for pkg_name, state in sorted(builds.items()): states = { True: m.Build.COMPLETE, False: m.Build.FAILED, diff --git a/test/trigger_test.py b/test/trigger_test.py new file mode 100644 index 0000000..1b07dd6 --- /dev/null +++ b/test/trigger_test.py @@ -0,0 +1,82 @@ +# Copyright (C) 2014 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Author: Michael Simacek + +from common import DBTest, postgres_only +from koschei.models import Build, ResolutionResult + +class TriggerTest(DBTest): + + @postgres_only + def test_new(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + self.prepare_builds(123, rnv=None) + self.assertIsNone(p.last_complete_build_id) + self.assertIsNone(e.last_complete_build_id) + + @postgres_only + def test_update(self): + [p, _] = self.prepare_packages(['rnv', 'eclipse']) + [b] = self.prepare_builds(123, rnv=None) + b.state = Build.FAILED + self.s.commit() + self.assertEqual(b.id, p.last_complete_build_id) + + @postgres_only + def test_complete(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + [b] = self.prepare_builds(123, rnv=True) + self.assertEqual(b.id, p.last_complete_build_id) + self.assertIsNone(e.last_complete_build_id) + + @postgres_only + def test_failed(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + [b] = self.prepare_builds(123, eclipse=False) + self.assertEqual(b.id, e.last_complete_build_id) + self.assertIsNone(p.last_complete_build_id) + + @postgres_only + def test_running(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + [be, br] = self.prepare_builds(123, eclipse=False, rnv=True) + [b3] = self.prepare_builds(126, eclipse=None) + + self.assertEqual(br.id, p.last_complete_build_id) + self.assertEqual(be.id, e.last_complete_build_id) + + def prepare_resolution(self, package, repo_id, resolved): + res = ResolutionResult(package_id=package.id, repo_id=repo_id, + resolved=resolved) + self.s.add(res) + self.s.commit() + return res + + @postgres_only + def test_resolved(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + self.prepare_resolution(p, 123, True) + self.assertTrue(p.resolved) + + @postgres_only + def test_new_resolution(self): + [p, e] = self.prepare_packages(['rnv', 'eclipse']) + self.prepare_resolution(p, 123, False) + self.prepare_resolution(e, 123, False) + self.prepare_resolution(e, 126, True) + self.assertFalse(p.resolved) + self.assertTrue(e.resolved)