Skip to content

Commit

Permalink
Use array of ids as argument since worker cant serialize ActiveRecord…
Browse files Browse the repository at this point in the history
…::Relation
  • Loading branch information
TheWalkingLeek committed Nov 21, 2023
1 parent 548ce49 commit 0484f41
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 47 deletions.
10 changes: 6 additions & 4 deletions app/domain/alumni/applicable_groups.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,20 @@ def initialize(role)
@role = role
end

def silverscout_groups
def silverscout_group_ids
Group::SilverscoutsRegion.
without_deleted.
where.not(self_registration_role_type: nil)
where.not(self_registration_role_type: nil).
pluck(:id)
end

def ex_members_groups
def ex_members_group_ids
ancestor_layers = role.group.layer_group.self_and_ancestors
Group::Ehemalige.
without_deleted.
where(layer_group_id: ancestor_layers).
where.not(self_registration_role_type: nil)
where.not(self_registration_role_type: nil).
pluck(:id)
end
end
end
4 changes: 2 additions & 2 deletions app/domain/alumni/invitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ def set_timestamp
end

def send_invitation
AlumniMailer.send(type, role.person, alumni_groups.ex_members_groups,
alumni_groups.silverscout_groups).
AlumniMailer.send(type, role.person, alumni_groups.ex_members_group_ids.presence,
alumni_groups.silverscout_group_ids.presence).
deliver_later
end
end
Expand Down
12 changes: 6 additions & 6 deletions app/mailers/alumni_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ class AlumniMailer < ApplicationMailer
CONTENT_REMINDER_WITH_REGIONAL_GROUPS = 'alumni_reminder_with_regional_alumni_groups'
CONTENT_REMINDER_WITHOUT_REGIONAL_GROUPS = 'alumni_reminder_without_regional_alumni_groups'

def invitation(person, ex_members_groups, silverscout_groups)
def invitation(person, ex_members_group_ids, silverscout_group_ids)
@person = person
@ex_members_groups = ex_members_groups
@silverscout_groups = silverscout_groups
@ex_members_groups = Group.where(id: ex_members_group_ids)
@silverscout_groups = Group.where(id: silverscout_group_ids)

key = if @ex_members_groups.present?
CONTENT_INVITATION_WITH_REGIONAL_GROUPS
Expand All @@ -31,10 +31,10 @@ def invitation(person, ex_members_groups, silverscout_groups)
custom_content_mail(@person.email, key, values_for_placeholders(key))
end

def reminder(person, ex_members_groups, silverscout_groups)
def reminder(person, ex_members_group_ids, silverscout_group_ids)
@person = person
@ex_members_groups = ex_members_groups
@silverscout_groups = silverscout_groups
@ex_members_groups = Group.where(id: ex_members_group_ids)
@silverscout_groups = Group.where(id: silverscout_group_ids)

key = if @ex_members_groups.present?
CONTENT_REMINDER_WITH_REGIONAL_GROUPS
Expand Down
26 changes: 13 additions & 13 deletions spec/domain/alumni/applicable_groups_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

subject { described_class.new(role) }

context '#silverscout_groups' do
context '#silverscout_group_ids' do
def make_group(name, selfreg:, **opts)
Fabricate(
Group::SilverscoutsRegion.name.to_sym,
Expand All @@ -24,24 +24,24 @@ def make_group(name, selfreg:, **opts)
end

let(:silverscouts) { groups(:silverscouts) }
let(:selfreg_group) { make_group('Bern', selfreg: true) }
let!(:selfreg_group) { make_group('Bern', selfreg: true) }

it 'includes groups with self_registration_role_type set' do
selfreg_group2 = make_group('Zürich', selfreg: true)

expect(subject.silverscout_groups).to match_array [selfreg_group, selfreg_group2]
expect(subject.silverscout_group_ids).to match_array [selfreg_group.id, selfreg_group2.id]
end

it 'excludes groups with blank self_registration_role_type' do
_non_selfreg_group = make_group('Zürich', selfreg: false)

expect(subject.silverscout_groups).to match_array [selfreg_group]
expect(subject.silverscout_group_ids).to match_array [selfreg_group.id]
end

it 'excludes deleted groups' do
_deleted_group = make_group('Zürich', selfreg: true, deleted_at: 1.day.ago)

expect(subject.silverscout_groups).to match_array [selfreg_group]
expect(subject.silverscout_group_ids).to match_array [selfreg_group.id]
end

it 'excludes groups of other types' do
Expand All @@ -52,11 +52,11 @@ def make_group(name, selfreg:, **opts)
self_registration_role_type: 'Group::SilverscoutsRegion::Mitglied'
)

expect(subject.silverscout_groups).to match_array [selfreg_group]
expect(subject.silverscout_group_ids).to match_array [selfreg_group.id]
end
end

context '#ex_members_groups' do
context '#ex_members_group_ids' do
def make_group(parent:, selfreg:, **opts)
Fabricate(
Group::Ehemalige.name.to_sym,
Expand All @@ -71,36 +71,36 @@ def make_group(parent:, selfreg:, **opts)
selfreg_group1 = make_group(parent: role.group.layer_group, selfreg: true)
selfreg_group2 = make_group(parent: role.group.layer_group, selfreg: true)

expect(subject.ex_members_groups).to match_array [selfreg_group1, selfreg_group2]
expect(subject.ex_members_group_ids).to match_array [selfreg_group1.id, selfreg_group2.id]
end

it 'excludes groups with blank self_registration_role_type' do
_non_selfreg_group = make_group(parent: role.group.layer_group, selfreg: false)

expect(subject.ex_members_groups).to be_empty
expect(subject.ex_members_group_ids).to be_empty
end

it 'exclude deleted groups' do
_deleted_group = make_group(parent: role.group.layer_group, selfreg: true,
deleted_at: 1.day.ago)

expect(subject.ex_members_groups).to be_empty
expect(subject.ex_members_group_ids).to be_empty
end

it 'includes groups of same and upper layer' do
schekka_group = make_group(parent: groups(:schekka), selfreg: true)
bern_group = make_group(parent: groups(:bern), selfreg: true)
be_group = make_group(parent: groups(:be), selfreg: true)

expect(subject.ex_members_groups).to match_array [schekka_group, bern_group, be_group]
expect(subject.ex_members_group_ids).to match_array [schekka_group.id, bern_group.id, be_group.id]
end

it 'excludes groups uncle and cousin layers' do
_berchtold_group = make_group(parent: groups(:berchtold), selfreg: true)
_oberland_group = make_group(parent: groups(:oberland), selfreg: true)
_zh_group = make_group(parent: groups(:zh), selfreg: true)

expect(subject.ex_members_groups).to be_empty
expect(subject.ex_members_group_ids).to be_empty
end

it 'excludes groups of child layers' do
Expand All @@ -113,7 +113,7 @@ def make_group(parent:, selfreg:, **opts)
_patria_group = make_group(parent: groups(:patria), selfreg: true)
_schekka_group = make_group(parent: groups(:schekka), selfreg: true)

expect(subject.ex_members_groups).to be_empty
expect(subject.ex_members_group_ids).to be_empty
end

end
Expand Down
10 changes: 5 additions & 5 deletions spec/domain/alumni/invitation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -197,16 +197,16 @@ def create_role(type, group, deleted_at: nil)
end

it 'sends email' do
ex_members_groups = [instance_double(Group), instance_double(Group)]
silverscout_groups = [instance_double(Group), instance_double(Group)]
ex_members_group_ids = [instance_double(Group), instance_double(Group)]
silverscout_group_ids = [instance_double(Group), instance_double(Group)]
groups_finder = instance_double(Alumni::ApplicableGroups,
ex_members_groups: ex_members_groups, silverscout_groups: silverscout_groups)
ex_members_group_ids: ex_members_group_ids, silverscout_group_ids: silverscout_group_ids)

mail = double('mail')
expect(mail).to receive(:deliver_later)

expect(AlumniMailer).to receive(type).with(role.person, ex_members_groups,
silverscout_groups).and_return(mail)
expect(AlumniMailer).to receive(type).with(role.person, ex_members_group_ids,
silverscout_group_ids).and_return(mail)

invitation = described_class.new(role, type, groups_finder)
expect(invitation).to receive(:conditions_met?).and_return(true)
Expand Down
38 changes: 21 additions & 17 deletions spec/mailers/alumni_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,30 @@
describe AlumniMailer do
let(:person) { Fabricate.build(:person, email: 'person@example.com') }

let(:ex_members_groups) do
let(:ex_members_group_ids) do
[
# parent is Group::Abteilung
Fabricate.build(Group::Ehemalige.name, id: 1, name: 'Ex-Members Group 1',
parent: groups(:schekka)),
Fabricate(Group::Ehemalige.name, name: 'Ex-Members Group 1',
parent: groups(:schekka)).id,
# parent is Group::Region
Fabricate.build(Group::Ehemalige.name, id: 2, name: 'Ex-Members Group 2',
parent: groups(:bern)),
Fabricate(Group::Ehemalige.name, name: 'Ex-Members Group 2',
parent: groups(:bern)).id,
# parent is Group::Kantonalverband
Fabricate.build(Group::Ehemalige.name, id: 3, name: 'Ex-Members Group 2', parent: groups(:be))
Fabricate(Group::Ehemalige.name, name: 'Ex-Members Group 2', parent: groups(:be)).id
]
end

let(:silverscout_groups) do
let(:silverscout_group_ids) do
[
Fabricate.build(Group::SilverscoutsRegion.name, id: 4, name: 'Bern',
parent: groups(:silverscouts)),
Fabricate.build(Group::SilverscoutsRegion.name, id: 5, name: 'Luzern',
parent: groups(:silverscouts))
Fabricate(Group::SilverscoutsRegion.name, name: 'Bern',
parent: groups(:silverscouts)).id,
Fabricate(Group::SilverscoutsRegion.name, name: 'Luzern',
parent: groups(:silverscouts)).id
]
end

context '#invitation' do
let(:mail) { AlumniMailer.invitation(person, ex_members_groups, silverscout_groups) }
let(:mail) { AlumniMailer.invitation(person, ex_members_group_ids, silverscout_group_ids) }

it 'renders the subject' do
expect(mail.subject).to eq('Ehemalige Einladung zur Selbstregistrierung')
Expand All @@ -51,14 +51,16 @@
body = Capybara::Node::Simple.new(mail.body.encoded)

expect(body).to have_content('Silverscouts Selbstregistrierung:')
silverscout_groups.each do |group|
silverscout_group_ids.each do |id|
group = Group.find(id)
expect(body).to have_link(group.name,
href: group_self_registration_url(group_id: group.id,
target: '_blank'))
end

expect(body).to have_content('Ehemalige-Gruppen Selbstregistrierung:')
ex_members_groups.each do |group|
ex_members_group_ids.each do |id|
group = Group.find(id)
expect(body).to have_link("#{group.parent.name}: #{group.name}",
href: group_self_registration_url(group_id: group.id,
target: '_blank'))
Expand All @@ -68,7 +70,7 @@
end

context '#reminder' do
let(:mail) { AlumniMailer.reminder(person, ex_members_groups, silverscout_groups) }
let(:mail) { AlumniMailer.reminder(person, ex_members_group_ids, silverscout_group_ids) }

it 'renders the subject' do
expect(mail.subject).to eq('Ehemalige Erinnerung zur Selbstregistrierung')
Expand All @@ -88,14 +90,16 @@
expect(body).to have_content('Erinnerung')

expect(body).to have_content('Silverscouts Selbstregistrierung:')
silverscout_groups.each do |group|
silverscout_group_ids.each do |id|
group = Group.find(id)
expect(body).to have_link(group.name,
href: group_self_registration_url(group_id: group.id,
target: '_blank'))
end

expect(body).to have_content('Ehemalige-Gruppen Selbstregistrierung:')
ex_members_groups.each do |group|
ex_members_group_ids.each do |id|
group = Group.find(id)
expect(body).to have_link("#{group.parent.name}: #{group.name}",
href: group_self_registration_url(group_id: group.id,
target: '_blank'))
Expand Down

0 comments on commit 0484f41

Please sign in to comment.