Skip to content

Commit

Permalink
Translating access request mails and collection/group messages
Browse files Browse the repository at this point in the history
  • Loading branch information
Mathis-Z committed Mar 8, 2024
1 parent aad502a commit d5dfc87
Show file tree
Hide file tree
Showing 15 changed files with 123 additions and 51 deletions.
3 changes: 1 addition & 2 deletions app/controllers/collections_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,7 @@ def leave

def share_message
user = User.find_by(email: params[:user])
text = t('collections.share_message.text', user: current_user.name, collection: @collection.title, locale: :en)
Message.new(sender: current_user, recipient: user, param_type: 'collection', param_id: @collection.id, text:)
Message.new(sender: current_user, recipient: user, param_type: 'collection', param_id: @collection.id)
end

def push_exercises
Expand Down
34 changes: 8 additions & 26 deletions app/controllers/groups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def leave
def request_access
flash[:notice] = t('.success_notice')
@group.admins.each do |admin|
send_access_request_message(admin, @group)
send_message(admin, :group_requested)

AccessRequestMailer.send_access_request(current_user, admin, @group).deliver_now
end
Expand All @@ -77,7 +77,7 @@ def remove_task

def grant_access
@group.grant_access(@user)
send_grant_access_messages(@user, @group)
send_message(@user, :group_accepted)

Message.where(sender: @user, recipient: current_user, param_type: 'group', param_id: @group.id).destroy_all
redirect_to @group, notice: t('.success_notice')
Expand All @@ -90,7 +90,7 @@ def delete_from_group

def deny_access
@group.users.delete(@user)
send_deny_access_message(@user, @group)
send_message(@user, :group_declined)

Message.where(sender: @user, recipient: current_user, param_type: 'group', param_id: @group.id).destroy_all
redirect_to @group, notice: t('.success_notice')
Expand All @@ -108,30 +108,12 @@ def demote_admin

private

def send_access_request_message(admin, group)
# type is one of [group_requested, group_accepted, group_declined]
def send_message(recipient, type)
Message.create(sender: current_user,
recipient: admin,
text: t('groups.send_access_request_message.message', user: current_user.name, group: group.name),
param_type: 'group',
param_id: group.id,
sender_status: 'd')
end

def send_deny_access_message(user, group)
Message.create(sender: current_user,
recipient: user,
text: t('groups.send_deny_access_message.message', user: current_user.name, group: group.name),
param_type: 'group_declined',
param_id: group.id,
sender_status: 'd')
end

def send_grant_access_messages(user, group)
Message.create(sender: current_user,
recipient: user,
text: t('groups.send_grant_access_messages.message', user: current_user.name, group: group.name),
param_type: 'group_accepted',
param_id: group.id,
recipient:,
param_type: type,
param_id: @group.id,
sender_status: 'd')
end

Expand Down
4 changes: 2 additions & 2 deletions app/models/message.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

class Message < ApplicationRecord
validates :text, presence: true
validates :text, presence: true, unless: -> { %w[group_requested group_accepted group_declined collection].include?(param_type) }

belongs_to :sender, class_name: 'User', inverse_of: :sent_messages
belongs_to :recipient, class_name: 'User', inverse_of: :received_messages
Expand All @@ -18,7 +18,7 @@ def mark_as_deleted(user)

def text # rubocop:disable Metrics/AbcSize
case param_type
when 'group'
when 'group_requested'
I18n.t('groups.send_access_request_message.message', user: sender.name, group: Group.find(param_id).name)
when 'group_accepted'
I18n.t('groups.send_grant_access_messages.message', user: sender.name, group: Group.find(param_id).name)
Expand Down
10 changes: 5 additions & 5 deletions app/views/access_request_mailer/send_access_request.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h3>Hello <%= @admin.name %></h3>
<h3><%= t('groups.access_request_mailer.greeting', user: @admin.name) %></h3>
<p>
<%= @user.name %> asked to join your group "<%= @group.name %>" <br/>
If you want to give your permission click on the link below. <br/>
Otherwise ignore this Email. <br/>
<%= t('groups.access_request_mailer.message_line1', user: @user.name, group: @group.name) %> <br/>
<%= t('groups.access_request_mailer.message_line2') %> <br/>
<%= t('groups.access_request_mailer.message_line3') %> <br/>
<br/>
<%= link_to 'Confirm Request', group_url(@group)%>
<%= link_to t('groups.access_request_mailer.confirm_request'), group_url(@group)%>
</p>
</body>
</html>
8 changes: 4 additions & 4 deletions app/views/access_request_mailer/send_access_request.text.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Hello <%= @admin.name %>
<%= t('groups.access_request_mailer.greeting', user: @admin.name) %>
<%= @user.name %> asked to join your group "<%= @group.name %>"
If you want to give your permission click on the link below.
Otherwise ignore this Email.
<%= t('groups.access_request_mailer.message_line1', user: @user.name, group: @group.name) %>
<%= t('groups.access_request_mailer.message_line2') %>
<%= t('groups.access_request_mailer.message_line3') %>
<%= group_url(@group)%>
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h3>Hello <%= @author.name %></h3>
<h3><%= t('tasks.access_request_mailer.greeting', user: @author.name) %></h3>
<p>
<%= @user.name %> asked to contribute to your Exercise "<%= @exercise.title %>".
If you want to make him a co-author or suggest Membership to a group click the link below.
Otherwise ignore this Email. <br/>
<%= t('tasks.access_request_mailer.message_line1', user: @user.name, task: @exercise.title) %> <br/>
<%= t('tasks.access_request_mailer.message_line2') %> <br/>
<%= t('tasks.access_request_mailer.message_line3') %> <br/>
<br/>
<%= link_to 'CodeHarbor', user_messages_url(@author)%>
<%= link_to t('common.app_name'), user_messages_url(@author)%>
</p>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Hello <%= @author.name %>
<%= t('tasks.access_request_mailer.greeting', user: @author.name) %>
<%= t('tasks.access_request_mailer.message_line1', user: @user.name, task: @exercise.title) %>
<%= t('tasks.access_request_mailer.message_line2') %>
<%= t('tasks.access_request_mailer.message_line3') %>
<%= @user.name %> asked to contribute to your Exercise "<%= @exercise.title %>".
If you want to make him a co-author or suggest Membership to a group click the link below.
Otherwise ignore this Email.
<%= user_messages_url(@author) %>
1 change: 1 addition & 0 deletions config/locales/de/common.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
de:
common:
app_name: CodeHarbor
button:
abort: Abbrechen
back: Zurück
Expand Down
7 changes: 7 additions & 0 deletions config/locales/de/views/groups.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
---
de:
groups:
access_request_mailer:
confirm_request: Anfrage annehmen
greeting: Hallo %{user}
message_line1: '%{user} möchte Ihrer Gruppe "%{group}" beitreten.'
message_line2: Sie können sie/ihn beitreten lassen, indem Sie auf den Link unten klicken.
message_line3: Ansonsten können Sie diese E-Mail ignorieren.
subject: '%{user} möchte Ihrer Grupper "%{group}" beitreten'
form:
button:
save: Gruppe speichern
Expand Down
6 changes: 6 additions & 0 deletions config/locales/de/views/tasks.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
---
de:
tasks:
access_request_mailer:
greeting: Hallo %{user}
message_line1: '%{user} möchte an Ihrer Aufgabe "%{task}" mitarbeiten.'
message_line2: Wenn Sie den/die Benutzer:in zum/zur Co-Autor:in ernennen oder in eine Gruppe einladen möchten, klicken Sie auf den Link unten.
message_line3: Ansonsten können Sie diese E-Mail ignorieren.
subject: '%{user} möchte an Ihrer Aufgabe "%{task}" mitarbeiten.'
editor:
button:
extract_text: Text extrahieren
Expand Down
1 change: 1 addition & 0 deletions config/locales/en/common.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
en:
common:
app_name: CodeHarbor
button:
abort: Abort
back: Back
Expand Down
7 changes: 7 additions & 0 deletions config/locales/en/views/groups.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
---
en:
groups:
access_request_mailer:
confirm_request: Confirm Request
greeting: Hello %{user}
message_line1: '%{user} asked to join your group "%{group}".'
message_line2: If you want to give your permission click on the link below.
message_line3: Otherwise ignore this Email.
subject: '%{user} wants to access your Group "%{group}"'
form:
button:
save: Save Group
Expand Down
6 changes: 6 additions & 0 deletions config/locales/en/views/tasks.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
---
en:
tasks:
access_request_mailer:
greeting: Hello %{user}
message_line1: '%{user} asked to contribute to your task "%{task}".'
message_line2: If you want to make them a co-author or suggest Membership to a group click the link below.
message_line3: Otherwise ignore this Email.
subject: '%{user} wants to contribute to your task "%{task}"'
editor:
button:
extract_text: Extract text
Expand Down
66 changes: 64 additions & 2 deletions spec/controllers/groups_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
RSpec.describe GroupsController do
render_views

let(:user) { create(:user) }
let(:user) { create(:user, preferred_locale: user_locale) }
let(:group_admin) { create(:user, preferred_locale: admin_locale) }

let(:user_locale) { :en }
let(:admin_locale) { :de }

let(:valid_post_attributes) do
attributes_for(:group, users: [user])
Expand All @@ -14,7 +18,7 @@
let(:invalid_attributes) do
{name: ''}
end
let(:group_memberships) { [build(:group_membership, :with_admin), build(:group_membership, user:)] }
let(:group_memberships) { [build(:group_membership, :with_admin, user: group_admin), build(:group_membership, user:)] }
let!(:group) { create(:group, group_memberships:) }

before { sign_in user }
Expand Down Expand Up @@ -156,4 +160,62 @@
end
end
end

describe 'POST #request_access' do
subject(:post_request) { post :request_access, params: {id: group.to_param} }

let(:group_memberships) { [build(:group_membership, :with_admin, user: group_admin)] }

it 'translates access request message into correct language for recipient' do
post_request
expect(I18n.with_locale(admin_locale) { group_admin.received_messages.find_by(param_type: 'group_requested').text }).to eq(I18n.t('groups.send_access_request_message.message', user: user.name, group: group.name, locale: admin_locale))
end

it 'sends mail in correct language for recipient' do
post_request
expect(ActionMailer::Base.deliveries.last.body.parts.first.body).to include(I18n.t('groups.access_request_mailer.message_line2', locale: admin_locale))
end
end

describe 'POST #grant_access' do
subject(:post_request) { post :grant_access, params: {id: group.to_param, user:} }

let(:group_memberships) { [build(:group_membership, :with_admin, user: group_admin)] }

before do
post :request_access, params: {id: group.to_param}
sign_in group_admin
end

it 'adds user to group' do
post_request
expect(group.users).to include(user)
end

it 'translates access granted message into correct language for recipient' do
post_request
expect(I18n.with_locale(user_locale) { user.received_messages.find_by(param_type: 'group_accepted').text }).to eq(I18n.t('groups.send_grant_access_messages.message', user: group_admin.name, group: group.name, locale: user_locale))
end
end

describe 'POST #deny_access' do
subject(:post_request) { post :deny_access, params: {id: group.to_param, user:} }

let(:group_memberships) { [build(:group_membership, :with_admin, user: group_admin)] }

before do
post :request_access, params: {id: group.to_param}
sign_in group_admin
end

it 'does not add user to group' do
post_request
expect(group.users).not_to include(user)
end

it 'translates access denied message into correct language for recipient' do
post_request
expect(I18n.with_locale(user_locale) { user.received_messages.find_by(param_type: 'group_declined').text }).to eq(I18n.t('groups.send_deny_access_message.message', user: group_admin.name, group: group.name, locale: user_locale))
end
end
end
2 changes: 1 addition & 1 deletion spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
context 'when message has type exercise', pending: 'messages and sharing permissions need to be reworked' do
before do
create(:message, sender: user, param_type: 'exercise')
create(:message, sender: user, param_type: 'group')
create(:message, sender: user, param_type: 'group_requested')
create(:message, sender: user, param_type: 'collection')
end

Expand Down

0 comments on commit d5dfc87

Please sign in to comment.