Upload new version: generate approval activity item #95
@ -10,6 +10,7 @@ class Verb:
|
|||||||
REPORTED_RATING = 'reported rating'
|
REPORTED_RATING = 'reported rating'
|
||||||
REQUESTED_CHANGES = 'requested changes'
|
REQUESTED_CHANGES = 'requested changes'
|
||||||
REQUESTED_REVIEW = 'requested review'
|
REQUESTED_REVIEW = 'requested review'
|
||||||
|
UPLOADED_NEW_VERSION = 'uploaded new version'
|
||||||
|
|
||||||
|
|
||||||
class Flag:
|
class Flag:
|
||||||
|
@ -8,6 +8,7 @@ from django.db.models.signals import m2m_changed, pre_save, post_save, pre_delet
|
|||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
|
||||||
from constants.activity import Flag
|
from constants.activity import Flag
|
||||||
|
from reviewers.models import ApprovalActivity
|
||||||
import extensions.models
|
import extensions.models
|
||||||
import files.models
|
import files.models
|
||||||
|
|
||||||
@ -165,3 +166,26 @@ def _auto_approve_subsequent_uploads(
|
|||||||
args = {'f_id': file.pk, 'pk': instance.pk, 'sender': sender, 's': file.source.name}
|
args = {'f_id': file.pk, 'pk': instance.pk, 'sender': sender, 's': file.source.name}
|
||||||
logger.info('Auto-approving file pk=%(f_id)s of %(sender)s pk=%(pk)s source=%(s)s', args)
|
logger.info('Auto-approving file pk=%(f_id)s of %(sender)s pk=%(pk)s source=%(s)s', args)
|
||||||
file.save(update_fields={'status', 'date_modified'})
|
file.save(update_fields={'status', 'date_modified'})
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=extensions.models.Version)
|
||||||
|
def _create_approval_activity_for_new_version_if_listed(
|
||||||
|
sender: object,
|
||||||
|
instance: extensions.models.Version,
|
||||||
|
created: bool,
|
||||||
|
raw: bool,
|
||||||
|
**kwargs: object,
|
||||||
|
):
|
||||||
|
if raw:
|
||||||
|
return
|
||||||
|
if not created:
|
||||||
|
return
|
||||||
|
extension = instance.extension
|
||||||
|
if not extension.is_listed or not instance.file:
|
||||||
|
return
|
||||||
|
ApprovalActivity(
|
||||||
|
type=ApprovalActivity.ActivityType.UPLOADED_NEW_VERSION,
|
||||||
|
user=instance.file.user,
|
||||||
|
extension=instance.extension,
|
||||||
|
message=f'uploaded new version: {instance.version}',
|
||||||
|
).save()
|
||||||
|
@ -10,6 +10,7 @@ from common.tests.factories.users import UserFactory
|
|||||||
from common.tests.utils import _get_all_form_errors
|
from common.tests.utils import _get_all_form_errors
|
||||||
from extensions.models import Extension, Version
|
from extensions.models import Extension, Version
|
||||||
from files.models import File
|
from files.models import File
|
||||||
|
from reviewers.models import ApprovalActivity
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
|
|
||||||
@ -425,6 +426,14 @@ class NewVersionTest(TestCase):
|
|||||||
f'/add-ons/{self.extension.slug}/manage/versions/new/{file.pk}/',
|
f'/add-ons/{self.extension.slug}/manage/versions/new/{file.pk}/',
|
||||||
)
|
)
|
||||||
self.assertEqual(self.extension.versions.count(), 1)
|
self.assertEqual(self.extension.versions.count(), 1)
|
||||||
|
self.extension.approve()
|
||||||
|
self.assertEqual(
|
||||||
|
ApprovalActivity.objects.filter(
|
||||||
|
extension=self.extension,
|
||||||
|
type=ApprovalActivity.ActivityType.UPLOADED_NEW_VERSION,
|
||||||
|
).count(),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
|
||||||
# Check step 2: finalise new version and send to review
|
# Check step 2: finalise new version and send to review
|
||||||
url = response['Location']
|
url = response['Location']
|
||||||
@ -444,3 +453,10 @@ class NewVersionTest(TestCase):
|
|||||||
self.assertEqual(new_version.schema_version, '1.0.0')
|
self.assertEqual(new_version.schema_version, '1.0.0')
|
||||||
self.assertEqual(new_version.release_notes, 'new version')
|
self.assertEqual(new_version.release_notes, 'new version')
|
||||||
self.assertEqual(new_version.file.get_status_display(), 'Approved')
|
self.assertEqual(new_version.file.get_status_display(), 'Approved')
|
||||||
|
self.assertEqual(
|
||||||
|
ApprovalActivity.objects.filter(
|
||||||
|
extension=self.extension,
|
||||||
|
type=ApprovalActivity.ActivityType.UPLOADED_NEW_VERSION,
|
||||||
|
).count(),
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
@ -80,6 +80,7 @@ class ApprovalActivity(CreatedModifiedMixin, RecordDeletionMixin, models.Model):
|
|||||||
APPROVED = "APR", _("Approved")
|
APPROVED = "APR", _("Approved")
|
||||||
AWAITING_CHANGES = "AWC", _("Awaiting Changes")
|
AWAITING_CHANGES = "AWC", _("Awaiting Changes")
|
||||||
AWAITING_REVIEW = "AWR", _("Awaiting Review")
|
AWAITING_REVIEW = "AWR", _("Awaiting Review")
|
||||||
|
UPLOADED_NEW_VERSION = "UNV", _("Uploaded New Version")
|
||||||
|
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
|
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
|
||||||
extension = models.ForeignKey(
|
extension = models.ForeignKey(
|
||||||
|
@ -30,6 +30,7 @@ def _create_action_from_review_and_follow(
|
|||||||
ApprovalActivity.ActivityType.AWAITING_CHANGES: Verb.REQUESTED_CHANGES,
|
ApprovalActivity.ActivityType.AWAITING_CHANGES: Verb.REQUESTED_CHANGES,
|
||||||
ApprovalActivity.ActivityType.AWAITING_REVIEW: Verb.REQUESTED_REVIEW,
|
ApprovalActivity.ActivityType.AWAITING_REVIEW: Verb.REQUESTED_REVIEW,
|
||||||
ApprovalActivity.ActivityType.COMMENT: Verb.COMMENTED,
|
ApprovalActivity.ActivityType.COMMENT: Verb.COMMENTED,
|
||||||
|
ApprovalActivity.ActivityType.UPLOADED_NEW_VERSION: Verb.UPLOADED_NEW_VERSION,
|
||||||
}
|
}
|
||||||
action.send(
|
action.send(
|
||||||
instance.user,
|
instance.user,
|
||||||
|
Loading…
Reference in New Issue
Block a user