Coverage for portality / events / consumers / update_request_publisher_rejected_notify.py: 95%

43 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-04 09:41 +0100

1# ~~UpdateRequestPublisherRejectedNotify:Consumer~~ 

2from portality import constants 

3from portality import models 

4from portality.bll import DOAJ 

5from portality.events import consumer_utils 

6from portality.events.consumer import EventConsumer 

7from portality.lib import dates 

8from portality.lib.dates import FMT_DATE_HUMAN_A 

9from portality.models import Account 

10 

11 

12class UpdateRequestPublisherRejectedNotify(EventConsumer): 

13 ID = "update_request:publisher:rejected:notify" 

14 

15 @classmethod 

16 def should_consume(cls, event): 

17 if event.id != constants.EVENT_APPLICATION_STATUS: 

18 return False 

19 

20 if not Account.is_enable_publisher_email(): 

21 return False 

22 

23 app_source = event.context.get("application") 

24 if app_source is None: 

25 return False 

26 

27 if event.context.get("new_status") != constants.APPLICATION_STATUS_REJECTED: 

28 return False 

29 

30 if event.context.get("old_status") == constants.APPLICATION_STATUS_REJECTED: 

31 return False 

32 

33 application = consumer_utils.parse_application(app_source) 

34 is_update_request = application.application_type == constants.APPLICATION_TYPE_UPDATE_REQUEST 

35 return is_update_request 

36 

37 @classmethod 

38 def consume(cls, event): 

39 app_source = event.context.get("application") 

40 

41 application = consumer_utils.parse_application(app_source) 

42 if not application.owner: 

43 return None 

44 

45 # ~~-> Notifications:Service ~~ 

46 svc = DOAJ.notificationsService() 

47 

48 notification = models.Notification() 

49 notification.who = application.owner 

50 notification.created_by = cls.ID 

51 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE 

52 datetime_object = dates.parse(application.date_applied) 

53 date_applied = datetime_object.strftime(FMT_DATE_HUMAN_A) 

54 notification.long = svc.long_notification(cls.ID).format( 

55 title=application.bibjson().title, 

56 date_applied=date_applied, 

57 ) 

58 notification.short = svc.short_notification(cls.ID).format( 

59 issns=application.bibjson().issns_as_text() 

60 ) 

61 

62 # there is no action url associated with this notification 

63 

64 svc.notify(notification) 

65 return notification