Adds preliminary review queue for editors (bug 627512)
This commit is contained in:
Родитель
7e324e44bb
Коммит
1b9b74a984
|
@ -7,7 +7,8 @@ from jingo import register
|
|||
from tower import ugettext_lazy as _, ungettext as ngettext
|
||||
|
||||
import amo
|
||||
from editors.models import ViewPendingQueue, ViewFullReviewQueue
|
||||
from editors.models import (ViewPendingQueue, ViewFullReviewQueue,
|
||||
ViewPreliminaryQueue)
|
||||
from amo.helpers import page_title
|
||||
from amo.urlresolvers import reverse
|
||||
|
||||
|
@ -101,3 +102,12 @@ class ViewFullReviewQueueTable(tables.ModelTable, EditorQueueTable):
|
|||
|
||||
class Meta(EditorQueueTable.Meta):
|
||||
model = ViewFullReviewQueue
|
||||
|
||||
|
||||
class ViewPreliminaryQueueTable(tables.ModelTable, EditorQueueTable):
|
||||
flags = tables.Column(verbose_name=_(u'Flags'))
|
||||
applications = tables.Column(verbose_name=_(u'Applications'))
|
||||
additional_info = tables.Column(verbose_name=_(u'Additional Information'))
|
||||
|
||||
class Meta(EditorQueueTable.Meta):
|
||||
model = ViewPreliminaryQueue
|
||||
|
|
|
@ -103,3 +103,16 @@ def create_view_ed_full_review_q(sender, **kw):
|
|||
|
||||
|
||||
post_syncdb.connect(create_view_ed_full_review_q)
|
||||
|
||||
|
||||
class ViewPreliminaryQueue(ViewQueue):
|
||||
|
||||
class Meta(ViewQueue.Meta):
|
||||
db_table = 'view_ed_prelim_q'
|
||||
|
||||
|
||||
def create_view_ed_prelim_q(sender, **kw):
|
||||
_create_view('137-view_ed_prelim_q.sql')
|
||||
|
||||
|
||||
post_syncdb.connect(create_view_ed_prelim_q)
|
||||
|
|
|
@ -7,7 +7,8 @@ from addons.models import Addon
|
|||
from versions.models import Version, ApplicationsVersions
|
||||
from files.models import Platform, File
|
||||
from applications.models import Application, AppVersion
|
||||
from editors.models import ViewPendingQueue, ViewFullReviewQueue
|
||||
from editors.models import (ViewPendingQueue, ViewFullReviewQueue,
|
||||
ViewPreliminaryQueue)
|
||||
|
||||
|
||||
def create_addon_file(name, version_str, addon_status, file_status,
|
||||
|
@ -78,9 +79,9 @@ class TestQueue(test_utils.TestCase):
|
|||
eq_(sorted(row.application_ids),
|
||||
[amo.FIREFOX.id, amo.THUNDERBIRD.id])
|
||||
|
||||
def test_hide_unreviewed_files(self):
|
||||
def test_reviewed_files_are_hidden(self):
|
||||
self.new_file(name='Unreviewed', version=u'0.1')
|
||||
create_addon_file('Listed', '0.1',
|
||||
create_addon_file('Already Reviewed', '0.1',
|
||||
amo.STATUS_PUBLIC, amo.STATUS_LISTED)
|
||||
eq_(sorted(q.addon_name for q in self.Queue.objects.all()),
|
||||
['Unreviewed'])
|
||||
|
@ -138,3 +139,26 @@ class TestFullReviewQueue(TestQueue):
|
|||
amo.STATUS_NOMINATED, amo.STATUS_NULL)
|
||||
eq_(sorted(q.addon_name for q in self.Queue.objects.all()),
|
||||
['Disabled', 'Null'])
|
||||
|
||||
|
||||
class TestPreliminaryQueue(TestQueue):
|
||||
__test__ = True
|
||||
Queue = ViewPreliminaryQueue
|
||||
|
||||
def new_file(self, name=u'Preliminary', version=u'1.0', **kw):
|
||||
return create_addon_file(name, version,
|
||||
amo.STATUS_LITE, amo.STATUS_UNREVIEWED,
|
||||
**kw)
|
||||
|
||||
def new_search_ext(self, name, version, **kw):
|
||||
return create_search_ext(name, version,
|
||||
amo.STATUS_LITE, amo.STATUS_UNREVIEWED,
|
||||
**kw)
|
||||
|
||||
def test_unreviewed_addons_are_in_q(self):
|
||||
create_addon_file('Lite', '0.1',
|
||||
amo.STATUS_LITE, amo.STATUS_UNREVIEWED)
|
||||
create_addon_file('Unreviewed', '0.1',
|
||||
amo.STATUS_UNREVIEWED, amo.STATUS_UNREVIEWED)
|
||||
eq_(sorted(q.addon_name for q in self.Queue.objects.all()),
|
||||
['Lite', 'Unreviewed'])
|
||||
|
|
|
@ -120,7 +120,13 @@ class QueueTest(EditorTest):
|
|||
amo.STATUS_NOMINATED, amo.STATUS_UNREVIEWED)
|
||||
self.addon_file(u'Nominated Two', u'0.1',
|
||||
amo.STATUS_LITE_AND_NOMINATED, amo.STATUS_UNREVIEWED)
|
||||
|
||||
self.addon_file(u'Prelim One', u'0.1',
|
||||
amo.STATUS_LITE, amo.STATUS_UNREVIEWED)
|
||||
self.addon_file(u'Prelim Two', u'0.1',
|
||||
amo.STATUS_UNREVIEWED, amo.STATUS_UNREVIEWED)
|
||||
self.addon_file(u'Public', u'0.1',
|
||||
amo.STATUS_PUBLIC, amo.STATUS_LISTED)
|
||||
|
||||
def addon_file(self, *args, **kw):
|
||||
a = create_addon_file(*args, **kw)
|
||||
self.versions[unicode(a['addon'].name)] = a['version']
|
||||
|
@ -218,3 +224,29 @@ class TestNominatedQueue(QueueTest):
|
|||
eq_(doc('.tabnav li a:eq(0)').text(), u'Full Reviews (2)')
|
||||
eq_(doc('.tabnav li a:eq(0)').attr('href'),
|
||||
reverse('editors.queue_nominated'))
|
||||
|
||||
|
||||
class TestPreliminaryQueue(QueueTest):
|
||||
|
||||
def test_results(self):
|
||||
r = self.client.get(reverse('editors.queue_prelim'))
|
||||
eq_(r.status_code, 200)
|
||||
doc = pq(r.content)
|
||||
row = doc('div.section table tr:eq(1)')
|
||||
eq_(doc('td:eq(0)', row).text(), u'Prelim One 0.1')
|
||||
eq_(doc('td a:eq(0)', row).attr('href'),
|
||||
reverse('editors.review',
|
||||
args=[self.versions[u'Prelim One'].id]) + '?num=1')
|
||||
row = doc('div.section table tr:eq(2)')
|
||||
eq_(doc('td:eq(0)', row).text(), u'Prelim Two 0.1')
|
||||
eq_(doc('a:eq(0)', row).attr('href'),
|
||||
reverse('editors.review',
|
||||
args=[self.versions[u'Prelim Two'].id]) + '?num=2')
|
||||
|
||||
def test_queue_count(self):
|
||||
r = self.client.get(reverse('editors.queue_prelim'))
|
||||
eq_(r.status_code, 200)
|
||||
doc = pq(r.content)
|
||||
eq_(doc('.tabnav li a:eq(2)').text(), u'Preliminary Reviews (2)')
|
||||
eq_(doc('.tabnav li a:eq(2)').attr('href'),
|
||||
reverse('editors.queue_prelim'))
|
||||
|
|
|
@ -10,8 +10,10 @@ import amo
|
|||
from amo.decorators import login_required
|
||||
from devhub.models import ActivityLog
|
||||
from editors import forms
|
||||
from editors.models import ViewPendingQueue, ViewFullReviewQueue
|
||||
from editors.helpers import ViewPendingQueueTable, ViewFullReviewQueueTable
|
||||
from editors.models import (ViewPendingQueue, ViewFullReviewQueue,
|
||||
ViewPreliminaryQueue)
|
||||
from editors.helpers import (ViewPendingQueueTable, ViewFullReviewQueueTable,
|
||||
ViewPreliminaryQueueTable)
|
||||
from amo.utils import paginate
|
||||
from amo.urlresolvers import reverse
|
||||
from files.models import Approval
|
||||
|
@ -89,8 +91,8 @@ def _queue(request, TableObj, tab):
|
|||
queue_counts = {
|
||||
'pending': ViewPendingQueue.objects.all().count(),
|
||||
'nominated': ViewFullReviewQueue.objects.all().count(),
|
||||
# TODO(Kumar) these are just placeholders
|
||||
'prelim': ViewPendingQueue.objects.all().count(),
|
||||
'prelim': ViewPreliminaryQueue.objects.all().count(),
|
||||
# TODO(Kumar) this is just a placeholder
|
||||
'moderated': ViewPendingQueue.objects.all().count()
|
||||
}
|
||||
page = paginate(request, table.rows, per_page=100,
|
||||
|
@ -118,7 +120,7 @@ def queue_pending(request):
|
|||
|
||||
@editor_required
|
||||
def queue_prelim(request):
|
||||
raise NotImplementedError
|
||||
return _queue(request, ViewPreliminaryQueueTable, 'prelim')
|
||||
|
||||
|
||||
@editor_required
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
-- bug 627512
|
||||
CREATE OR REPLACE VIEW view_ed_prelim_q AS
|
||||
SELECT
|
||||
addons.id,
|
||||
tr.localized_string as addon_name,
|
||||
addons.status as addon_status,
|
||||
addons.addontype_id as addon_type_id,
|
||||
addons.adminreview as admin_review,
|
||||
addons.sitespecific as is_site_specific,
|
||||
GROUP_CONCAT(versions.id
|
||||
ORDER BY versions.created DESC) as latest_version_ids,
|
||||
GROUP_CONCAT(versions.version
|
||||
ORDER BY versions.created DESC SEPARATOR '&&&&') as
|
||||
latest_versions,
|
||||
GROUP_CONCAT(DISTINCT files.platform_id) as file_platform_ids,
|
||||
TIMESTAMPDIFF(DAY,
|
||||
MAX(versions.created), NOW()) as waiting_time_days,
|
||||
TIMESTAMPDIFF(HOUR,
|
||||
MAX(versions.created), NOW()) as waiting_time_hours,
|
||||
GROUP_CONCAT(DISTINCT apps.application_id) as application_ids
|
||||
FROM files
|
||||
JOIN versions ON (files.version_id = versions.id)
|
||||
JOIN addons ON (versions.addon_id = addons.id)
|
||||
LEFT JOIN applications_versions as apps on versions.id = apps.version_id
|
||||
JOIN translations AS tr ON (tr.id = addons.name
|
||||
AND tr.locale = addons.defaultlocale)
|
||||
WHERE
|
||||
-- STATUS_UNREVIEWED
|
||||
files.status = 1
|
||||
-- STATUS_LITE, STATUS_UNREVIEWED
|
||||
AND addons.status in (8, 1)
|
||||
GROUP BY id;
|
Загрузка…
Ссылка в новой задаче