Skip to content

Commit 642fe39

Browse files
authored
Merge pull request #276 from Xpirix/check_error_on_my_plugins
Only show latest unapproved version in the reviews list
2 parents ad67aa9 + 1cb4157 commit 642fe39

File tree

2 files changed

+101
-5
lines changed

2 files changed

+101
-5
lines changed

qgis-app/plugins/models.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,12 @@ class FeedbackReceivedPlugins(models.Manager):
385385
"""
386386

387387
def get_queryset(self):
388+
latest_version = (
389+
PluginVersion.objects.filter(plugin=OuterRef("pk"))
390+
.order_by("-created_on")
391+
.values("approved")[:1]
392+
)
393+
388394
feedback_count_subquery = (
389395
PluginVersionFeedback.objects.filter(
390396
version=OuterRef("pluginversion"), is_completed=False
@@ -398,12 +404,17 @@ def get_queryset(self):
398404
super(FeedbackReceivedPlugins, self)
399405
.get_queryset()
400406
.filter(
401-
pluginversion__approved=False,
402407
deprecated=False,
403408
is_deleted=False,
404409
)
405-
.annotate(received_feedback_count=Subquery(feedback_count_subquery))
406-
.filter(received_feedback_count__gte=1)
410+
.annotate(
411+
latest_version_approved=Subquery(latest_version),
412+
received_feedback_count=Subquery(feedback_count_subquery),
413+
)
414+
.filter(
415+
latest_version_approved=False,
416+
received_feedback_count__gte=1,
417+
)
407418
.extra(
408419
select={
409420
"average_vote": "rating_score / (rating_votes + 0.001)",
@@ -430,18 +441,25 @@ class FeedbackPendingPlugins(models.Manager):
430441
"""
431442

432443
def get_queryset(self):
444+
latest_version = PluginVersion.objects.filter(
445+
plugin=OuterRef("pk")
446+
).order_by("-created_on").values("approved")[:1]
447+
433448
return (
434449
super(FeedbackPendingPlugins, self)
435450
.get_queryset()
436451
.filter(
437-
pluginversion__approved=False,
438452
deprecated=False,
439453
is_deleted=False,
440454
)
441455
.annotate(
456+
latest_version_approved=Subquery(latest_version),
442457
total_feedback_count=Count("pluginversion__feedback"),
443458
)
444-
.filter(total_feedback_count=0)
459+
.filter(
460+
latest_version_approved=False,
461+
total_feedback_count=0,
462+
)
445463
.extra(
446464
select={
447465
"average_vote": "rating_score / (rating_votes + 0.001)",

qgis-app/plugins/tests/test_plugin_version_feedback.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,47 @@ def test_approved_plugin_should_not_show_in_feedback_received_list(self):
263263
[]
264264
)
265265

266+
def test_plugin_with_older_approved_version_shows_in_feedback_received_list(self):
267+
"""Plugin should appear if its latest version is unapproved, even if an older one is approved."""
268+
self.version_1.approved = True
269+
self.version_1.save()
270+
271+
newer_version = PluginVersion.objects.create(
272+
plugin=self.plugin_1,
273+
created_by=self.creator,
274+
min_qg_version="0.0.0",
275+
max_qg_version="99.99.99",
276+
version="0.2",
277+
approved=False,
278+
external_deps="test"
279+
)
280+
PluginVersionFeedback.objects.create(
281+
version=newer_version,
282+
reviewer=self.staff,
283+
task="feedback on newer version"
284+
)
285+
286+
self.client.force_login(user=self.staff)
287+
response = self.client.get(self.url)
288+
self.assertIn(self.plugin_1, response.context['object_list'])
289+
290+
def test_plugin_with_latest_version_approved_does_not_show_in_feedback_received_list(self):
291+
"""Plugin should not appear if its latest version is approved, even if an older one is unapproved."""
292+
PluginVersion.objects.create(
293+
plugin=self.plugin_1,
294+
created_by=self.creator,
295+
min_qg_version="0.0.0",
296+
max_qg_version="99.99.99",
297+
version="0.2",
298+
approved=True,
299+
external_deps="test"
300+
)
301+
302+
self.client.force_login(user=self.staff)
303+
response = self.client.get(self.url)
304+
self.assertNotIn(self.plugin_1, response.context['object_list'])
305+
306+
266307

267308
class TestPluginFeedbackPendingList(SetupMixin, TestCase):
268309
fixtures = ["fixtures/auth.json"]
@@ -304,6 +345,43 @@ def test_staff_should_see_plugin_feedback_pending_list(self):
304345
list(response.context['object_list']),
305346
[]
306347
)
348+
def test_plugin_with_older_approved_version_shows_in_feedback_pending_list(self):
349+
"""Plugin should appear if its latest version is unapproved and has no feedback,
350+
even if an older version is approved."""
351+
self.version_2.approved = True
352+
self.version_2.save()
353+
354+
PluginVersion.objects.create(
355+
plugin=self.plugin_2,
356+
created_by=self.creator,
357+
min_qg_version="0.0.0",
358+
max_qg_version="99.99.99",
359+
version="2.1",
360+
approved=False,
361+
external_deps="test"
362+
)
363+
364+
self.client.force_login(user=self.staff)
365+
response = self.client.get(self.url)
366+
self.assertIn(self.plugin_2, response.context['object_list'])
367+
368+
369+
def test_plugin_with_latest_version_approved_does_not_show_in_feedback_pending_list(self):
370+
"""Plugin should not appear if its latest version is approved,
371+
even if an older one is unapproved."""
372+
PluginVersion.objects.create(
373+
plugin=self.plugin_2,
374+
created_by=self.creator,
375+
min_qg_version="0.0.0",
376+
max_qg_version="99.99.99",
377+
version="2.1",
378+
approved=True,
379+
external_deps="test"
380+
)
381+
382+
self.client.force_login(user=self.staff)
383+
response = self.client.get(self.url)
384+
self.assertNotIn(self.plugin_2, response.context['object_list'])
307385

308386

309387
class TestCreateVersionFeedback(SetupMixin, TestCase):

0 commit comments

Comments
 (0)