Skip to content

Commit bfca242

Browse files
authored
Merge pull request #1150 from ElixirTeSS/digest-email-fix
Learning path subscription email fix
2 parents 72be4ed + 01e0613 commit bfca242

9 files changed

Lines changed: 59 additions & 8 deletions

File tree

app/mailers/subscription_mailer.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ def digest(sub, dig)
1313
else
1414
[]
1515
end
16-
subs = pluralize(@digest.total_count, "new #{@subscription.subscribable_type.downcase}")
16+
resource_type = I18n.t("features.#{@subscription.subscribable_type.underscore.pluralize}.short").downcase
17+
subs = pluralize(@digest.total_count, "new #{resource_type}")
1718
subject = "#{TeSS::Config.site['title_short']} #{sub.frequency} digest - #{subs} matching your criteria"
1819
mail(subject: subject, to: sub.user.email) do |format|
1920
format.html

app/views/subscription_mailer/_events.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
</td>
66
<td width="95%">
77
<% digest.each do |result| -%>
8-
<%= link_to(digest_event_title(result), result, style: 'color: #f57d20; font-weight: bold; text-decoration: none') %>
8+
<%= link_to(digest_event_title(result), result, style: 'color: #f57d20; font-weight: bold;') %>
99
<br/>
1010
<%= result.title %><br/><br/>
1111
<% end -%>

app/views/subscription_mailer/_materials.html.erb renamed to app/views/subscription_mailer/_resources.html.erb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
<td width="20"></td>
55
<td>
66
<% digest.each do |result| -%>
7-
<%= link_to(result.title, result, style: 'color: #f57d20; font-weight: bold; text-decoration: none') %><br/>
8-
<%= truncate(result.description, length: 120, separator: ' ') %><br/><br/>
7+
<%= link_to(result.title, result, style: 'color: #f57d20; font-weight: bold;') %><br/>
8+
<% if result.respond_to?(:description) %>
9+
<%= truncate(result.description, length: 120, separator: ' ') %><br/><br/>
10+
<% end %>
911
<% end -%>
1012
</td>
1113
</tr>

app/views/subscription_mailer/digest.html.erb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ Dear <%= @user.profile.firstname || @user.username %>,<br/>
2727
<%= pluralize(@digest.total_count, "new #{@subscription.subscribable_type.downcase}") -%>
2828
registered in <%= TeSS::Config.site['title_short'] %>:
2929
</p>
30-
<%= render partial: @subscription.subscribable_type.downcase.pluralize, locals: { digest: @digest } %>
30+
31+
<% if @subscription.subscribable_type == 'Event' %>
32+
<%= render partial: 'events', locals: { digest: @digest } %>
33+
<% else %>
34+
<%= render partial: 'resources', locals: { digest: @digest } %>
35+
<% end %>
3136

3237
<p>
3338
<% if @digest.count < @digest.total_count %>
@@ -36,7 +41,7 @@ Dear <%= @user.profile.firstname || @user.username %>,<br/>
3641
<%= link_to("View all results on #{TeSS::Config.site['title_short']}", subscription_results_url(@subscription)) %>
3742
</p>
3843

39-
<% if @collections&.any? %>
44+
<% if @collections&.any? && ['Event', 'Material'].include?(@subscription.subscribable_type) %>
4045
<p>
4146
Collections you might like to update:
4247
</p>

app/views/subscription_mailer/digest.text.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ View all results on <%= TeSS::Config.site['title_short'] %>:
2323
<%= subscription_results_url(@subscription) %>
2424

2525

26-
<% if @collections&.any? %>
26+
<% if @collections&.any? && ['Event', 'Material'].include?(@subscription.subscribable_type) %>
2727
Collections you might like to update:
2828
<% @collections.each do |collection| %>
2929
<%= collection.title %>: <%= send("curate_#{@subscription.subscribable_type.downcase.pluralize}_collection_url", collection) %>

test/controllers/subscriptions_controller_test.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ class SubscriptionsControllerTest < ActionController::TestCase
99

1010
get :index
1111

12-
assert_select '.subscription', count: 3
12+
assert users(:regular_user).subscriptions.any?
13+
assert_select '.subscription', count: users(:regular_user).subscriptions.count
1314
end
1415

1516
test "should not list other user's subscriptions" do

test/fixtures/subscriptions.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,11 @@ event_subscription:
3232
facets: { "times" : ["good", "great"] }
3333
user: admin
3434
subscribable_type: Event
35+
36+
learning_path_subscription:
37+
frequency: 1
38+
last_checked_at: 1986-11-23 10:16:33
39+
query: bananas
40+
facets: { "type": [ "fruit", "veg" ] }
41+
user: regular_user
42+
subscribable_type: LearningPath

test/mailers/previews/subscription_mailer_preview.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ def last_material_digest
1111
SubscriptionMailer.digest(sub, sub.digest)
1212
end
1313

14+
def last_learning_path_digest
15+
sub = Subscription.where(subscribable_type: 'LearningPath').last
16+
SubscriptionMailer.digest(sub, sub.digest)
17+
end
18+
1419
end

test/mailers/subscription_mailer_test.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,33 @@ class SubscriptionMailerTest < ActionMailer::TestCase
106106
assert html.include? collections(:one).title
107107
assert html.include? @routes.curate_materials_collection_url(collaborating_collection)
108108
end
109+
110+
test 'html learning path digest' do
111+
collaborating_collection = Collection.create!(title: 'collab', user: users(:regular_user))
112+
collaborating_collection.collaborators << users(:admin)
113+
sub = subscriptions(:learning_path_subscription)
114+
lp = [
115+
learning_paths(:one),
116+
learning_paths(:two)
117+
]
118+
digest = MockSearchResults.new(lp)
119+
email = SubscriptionMailer.digest(sub, digest)
120+
121+
assert_emails 1 do
122+
email.deliver_now
123+
end
124+
125+
assert_equal [TeSS::Config.sender_email], email.from
126+
assert_equal [sub.user.email], email.to
127+
assert_equal "#{TeSS::Config.site['title_short']} daily digest - #{lp.length} new learning paths matching your criteria", email.subject
128+
129+
html = email.html_part.body.to_s
130+
131+
lp.each do |l|
132+
assert html.include?(@routes.learning_path_url(l)), "Learning Path URL was missing from email: #{@routes.learning_path_url(l)}"
133+
end
134+
135+
assert html.include?(@routes.unsubscribe_subscription_url(sub, code: sub.unsubscribe_code)), 'Expected unsubscribe link'
136+
refute html.include?('Collections') # Curate feature is not available for learning paths
137+
end
109138
end

0 commit comments

Comments
 (0)