Add service for creating invites
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Râu Cao 2024-02-09 17:53:02 +01:00
parent 22ffcd54db
commit 67689dcce3
Signed by: raucao
GPG Key ID: 37036C356E56CC51
4 changed files with 74 additions and 0 deletions

View File

@ -17,4 +17,10 @@ class NotificationMailer < ApplicationMailer
@subject = "New app connected to your storage"
mail to: @user.email, subject: @subject
end
def new_invitations_available
@user = params[:user]
@subject = "New invitations added to your account"
mail to: @user.email, subject: @subject
end
end

View File

@ -0,0 +1,17 @@
class CreateInvitations < ApplicationService
def initialize(user:, amount:, notify: true)
@user = user
@amount = amount
@notify = notify
end
def call
@amount.times do
Invitation.create(user: @user)
end
if @notify
NotificationMailer.with(user: @user).new_invitations_available.deliver_later
end
end
end

View File

@ -0,0 +1,11 @@
Hi <%= @user.display_name.presence || @user.cn %>,
New invitations have just been added to your Kosmos account, so you can invite more people to our cooperative services:
<%= invitations_url %>
Have a nice day!
---
Tip: if you want to invite someone you're meeting in person, log into your account panel on a mobile device and let people scan the invitation QR code from theirs.

View File

@ -0,0 +1,40 @@
require 'rails_helper'
RSpec.describe CreateInvitations, type: :model do
include ActiveJob::TestHelper
let(:user) { create :user }
describe "#call" do
before do
CreateInvitations.call(user: user, amount: 5)
end
after(:each) { clear_enqueued_jobs }
it "creates the right amount of invitations for the given user" do
expect(user.invitations.count).to eq(5)
end
it "sends an email notification to the user" do
expect(enqueued_jobs.size).to eq(1)
expect(enqueued_jobs.first["job_class"]).to eq("ActionMailer::MailDeliveryJob")
args = enqueued_jobs.first['arguments']
expect(args[0]).to eq("NotificationMailer")
expect(args[1]).to eq("new_invitations_available")
expect(args[3]["params"]["user"]["_aj_globalid"]).to eq("gid://akkounts/User/1")
end
end
describe "#call with notification disabled" do
before do
CreateInvitations.call(user: user, amount: 3, notify: false)
end
after(:each) { clear_enqueued_jobs }
it "does not send an email notification to the user" do
expect(enqueued_jobs.size).to eq(0)
end
end
end