Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 2a42d24c4e6b0772d503303912f8548272c6d17d
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Thu Oct 2 17:58:19 2014 +0200
[frontend] [RHBZ:#1146825] Reorder chroots for monitor widget
---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 5 +-
.../coprs/views/coprs_ns/coprs_general.py | 16 ++++-
frontend/coprs_frontend/tests/coprs_test_case.py | 70 ++++++++++++++++++++
.../tests/test_logic/test_builds_logic.py | 11 +++
4 files changed, 95 insertions(+), 7 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py
b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 6f8ffc4..63c0e23 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -283,8 +283,8 @@ class BuildsMonitorLogic(object):
out = []
packages = []
for build in builds:
- chroot_results = {chroot.name: chroot.state
- for chroot in build.build_chroots}
+ chroot_results = dict(
+ [(chroot.name, chroot.state) for chroot in build.build_chroots])
build_results = []
for chroot_name in chroots:
@@ -306,7 +306,6 @@ class BuildsMonitorLogic(object):
out.append(pkg_name)
packages.sort()
- print(packages)
return {
"builds": builds,
"chroots": chroots,
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index aba25c5..993f0a4 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -546,12 +546,20 @@ def copr_build_monitor(username, coprname):
"Copr with name {0} does not exist.".format(coprname))
form = forms.CoprLegalFlagForm()
- oses = [chroot.os for chroot in copr.active_chroots]
- oses_grouped = [(len(list(group)), key) for key, group in groupby(oses)]
- archs = [chroot.arch for chroot in copr.active_chroots]
- kwargs = dict(copr=copr, oses=oses_grouped, archs=archs, form=form)
monitor = builds_logic.BuildsMonitorLogic.get_monitor_data(copr)
+
+ md_chroots = monitor["chroots"]
+ active_chroots = sorted(
+ copr.active_chroots,
+ key=lambda chroot: md_chroots.index(chroot.name)
+ )
+ oses = [chroot.os for chroot in active_chroots]
+ oses_grouped = [(len(list(group)), key) for key, group in groupby(oses)]
+ archs = [chroot.arch for chroot in active_chroots]
+
+ kwargs = dict(copr=copr, oses=oses_grouped, archs=archs,
+ form=form)
kwargs.update(monitor)
kwargs["build"] = kwargs["latest_build"]
del kwargs["latest_build"]
diff --git a/frontend/coprs_frontend/tests/coprs_test_case.py
b/frontend/coprs_frontend/tests/coprs_test_case.py
index 54fe7fe..5585bd1 100644
--- a/frontend/coprs_frontend/tests/coprs_test_case.py
+++ b/frontend/coprs_frontend/tests/coprs_test_case.py
@@ -1,4 +1,5 @@
import base64
+from collections import defaultdict
import os
import time
from functools import wraps
@@ -108,6 +109,37 @@ class CoprsTestCase(object):
self.db.session.add_all([self.mc1, self.mc2, self.mc3, self.mc4])
@pytest.fixture
+ def f_mock_chroots_many(self):
+ """
+ Adds more chroots to self.c1
+ """
+ self.mc_list = []
+ for arch in ["x86_64", "i386"]:
+ for os_version in range(17, 22):
+ mc = models.MockChroot(
+ os_release="fedora", os_version=os_version,
+ arch=arch, is_active=True)
+ self.mc_list.append(mc)
+
+ for os_version in [5, 6, 7]:
+ mc = models.MockChroot(
+ os_release="epel", os_version=os_version,
+ arch=arch, is_active=True)
+ self.mc_list.append(mc)
+
+ self.mc_list[-1].is_active = False
+
+ # only bind to coprs if the test has used the f_coprs fixture
+ if hasattr(self, "c1"):
+ for mc in self.mc_list:
+ cc = models.CoprChroot()
+ cc.mock_chroot = mc
+ self.c1.copr_chroots.append(cc)
+
+
+ self.db.session.add_all(self.mc_list)
+
+ @pytest.fixture
def f_builds(self):
self.b1 = models.Build(
copr=self.c1, user=self.u1, submitted_on=50, started_on=139086644000)
@@ -135,6 +167,44 @@ class CoprsTestCase(object):
self.db.session.add_all([self.b1, self.b2, self.b3, self.b4])
@pytest.fixture
+ def f_builds_many_chroots(self):
+ self.b_many_chroots = models.Build(
+ id=12347,
+ copr=self.c1, user=self.u1,
+ submitted_on=50, started_on=139086644000,
+
pkgs="http://example.com/copr-keygen-1.58-1.fc20.src.rpm",
+ pkg_version="1.58"
+ )
+
+ self.db.session.add(self.b_many_chroots)
+ self.status_by_chroot = {
+ 'epel-5-i386': 0,
+ 'epel-5-x86_64': 1,
+ 'epel-6-i386': 0,
+ 'epel-6-x86_64': 3,
+ 'epel-7-x86_64': 4,
+ 'fedora-17-i386': 5,
+ 'fedora-17-x86_64': 6,
+ 'fedora-18-i386': 2,
+ 'fedora-18-x86_64': 3,
+ 'fedora-19-i386': 0,
+ 'fedora-19-x86_64': 0,
+ 'fedora-20-i386': 1,
+ 'fedora-20-x86_64': 1,
+ 'fedora-21-i386': 1,
+ 'fedora-21-x86_64': 4
+ }
+
+ for chroot in self.b_many_chroots.copr.active_chroots:
+ buildchroot = models.BuildChroot(
+ build=self.b_many_chroots,
+ mock_chroot=chroot,
+ status = self.status_by_chroot[chroot.name])
+ self.db.session.add(buildchroot)
+
+ self.db.session.add(self.b_many_chroots)
+
+ @pytest.fixture
def f_copr_permissions(self):
self.cp1 = models.CoprPermission(
copr=self.c2,
diff --git a/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
b/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
index 9871664..8c03475 100644
--- a/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
+++ b/frontend/coprs_frontend/tests/test_logic/test_builds_logic.py
@@ -1,7 +1,9 @@
import pytest
+from coprs import helpers
from coprs.exceptions import ActionInProgressException
from coprs.logic.builds_logic import BuildsLogic
+from coprs.logic.builds_logic import BuildsMonitorLogic
from tests.coprs_test_case import CoprsTestCase
@@ -38,3 +40,12 @@ class TestBuildsLogic(CoprsTestCase):
b = BuildsLogic.add(**params)
for k, v in params.items():
assert getattr(b, k) == v
+
+ def test_monitor_logic(self, f_users, f_coprs, f_mock_chroots_many,
f_builds_many_chroots, f_db):
+ copr = self.c1
+ md = BuildsMonitorLogic.get_monitor_data(copr)
+ results = md["packages"][-1][2]
+ mchroots = md["chroots"]
+
+ for chr, res in zip(mchroots, results):
+ assert helpers.StatusEnum(self.status_by_chroot[chr]) == res[1]