Skip to content

Commit 927443e

Browse files
committed
[TAN-7137] Enqueue scheduled transition job from SideFx services
When a schedule is set via project or folder update, the `SideFx` service enqueues `ProcessScheduledPublicationTransitionJob` with `wait_until: scheduled_at`.
1 parent 17849b9 commit 927443e

4 files changed

Lines changed: 63 additions & 0 deletions

File tree

back/app/services/project_folders/side_fx_project_folder_service.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def after_update(folder, user)
3838
payload[:change] = sanitize_change(change) if change.present?
3939

4040
LogActivityJob.perform_later(folder, 'changed', user, folder.updated_at.to_i, payload: payload)
41+
enqueue_scheduled_transition(folder.admin_publication, user)
4142
end
4243

4344
def after_destroy(frozen_folder, user)
@@ -51,5 +52,16 @@ def after_destroy(frozen_folder, user)
5152
payload: { project_folder: serialized_folder }
5253
)
5354
end
55+
56+
private
57+
58+
def enqueue_scheduled_transition(admin_pub, user)
59+
return unless admin_pub.saved_change_to_scheduled_at?
60+
return unless admin_pub.scheduled_at.present?
61+
62+
ProcessScheduledPublicationTransitionJob
63+
.set(wait_until: admin_pub.scheduled_at)
64+
.perform_later(admin_pub.id, user&.id)
65+
end
5466
end
5567
end

back/app/services/side_fx_project_service.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ def after_update(project, user)
7474
after_folder_changed project, user if @folder_id_was != project.folder_id
7575
# We don't want to send out the "project published" campaign when e.g. changing from "archived" to "published"
7676
after_publish project, user if project.admin_publication.published? && @publication_status_was == 'draft'
77+
enqueue_scheduled_transition(project.admin_publication, user)
7778
end
7879

7980
def before_destroy(project, user); end
@@ -128,6 +129,15 @@ def after_publish(project, user)
128129
LogActivityJob.perform_later project, 'published', user, project.updated_at.to_i
129130
end
130131

132+
def enqueue_scheduled_transition(admin_pub, user)
133+
return unless admin_pub.saved_change_to_scheduled_at?
134+
return unless admin_pub.scheduled_at.present?
135+
136+
ProcessScheduledPublicationTransitionJob
137+
.set(wait_until: admin_pub.scheduled_at)
138+
.perform_later(admin_pub.id, user&.id)
139+
end
140+
131141
def after_folder_changed(project, current_user)
132142
# Defined in core app to eliminate dependency between
133143
# idea assignment and folder engine.

back/spec/services/project_folders/side_fx_project_folder_service_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,25 @@
4040
}
4141
).exactly(1).times
4242
end
43+
44+
it 'enqueues the transition job when a schedule is set' do
45+
scheduled_at = 1.day.from_now
46+
project_folder.assign_attributes(
47+
admin_publication_attributes: { scheduled_status: 'archived', scheduled_at: scheduled_at }
48+
)
49+
project_folder.save!
50+
51+
expect { service.after_update(project_folder, user) }
52+
.to have_enqueued_job(ProcessScheduledPublicationTransitionJob)
53+
.with(project_folder.admin_publication.id, user.id)
54+
end
55+
56+
it 'does not enqueue the transition job when no schedule is set' do
57+
project_folder.update!(title_multiloc: { en: 'changed' })
58+
59+
expect { service.after_update(project_folder, user) }
60+
.not_to have_enqueued_job(ProcessScheduledPublicationTransitionJob)
61+
end
4362
end
4463

4564
describe 'after_destroy' do

back/spec/services/side_fx_project_service_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,28 @@
9292
.not_to have_enqueued_job(LogActivityJob)
9393
.with(project, 'published', user, project.updated_at.to_i, anything)
9494
end
95+
96+
it 'enqueues the transition job when a schedule is set' do
97+
scheduled_at = 1.day.from_now
98+
project.assign_attributes(
99+
admin_publication_attributes: { scheduled_status: 'archived', scheduled_at: scheduled_at }
100+
)
101+
service.before_update(project, user)
102+
project.save!
103+
104+
expect { service.after_update(project, user) }
105+
.to have_enqueued_job(ProcessScheduledPublicationTransitionJob)
106+
.with(project.admin_publication.id, user.id)
107+
end
108+
109+
it 'does not enqueue the transition job when no schedule is set' do
110+
project.assign_attributes(title_multiloc: { en: 'changed' })
111+
service.before_update(project, user)
112+
project.save!
113+
114+
expect { service.after_update(project, user) }
115+
.not_to have_enqueued_job(ProcessScheduledPublicationTransitionJob)
116+
end
95117
end
96118

97119
describe 'after_destroy' do

0 commit comments

Comments
 (0)