diff --git a/app/models/user.rb b/app/models/user.rb index 5734369..ebe76cb 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -53,7 +53,14 @@ class User < ApplicationRecord end def devise_after_confirmation - enable_service %w[discourse gitea mediawiki ejabberd] + enable_service %w[ discourse ejabberd gitea mediawiki ] + + #TODO enable in development when we have easy setup of ejabberd etc. + return if Rails.env.development? + + if inviter.present? + exchange_xmpp_contact_with_inviter if Setting.ejabberd_enabled? + end end def reset_password(new_password, new_password_confirmation) @@ -120,6 +127,12 @@ class User < ApplicationRecord ldap.delete_attribute(dn,:service) end + def exchange_xmpp_contact_with_inviter + return unless inviter.services_enabled.include?("ejabberd") && + services_enabled.include?("ejabberd") + XmppExchangeContactsJob.perform_later(inviter, self.cn, self.ou) + end + private def ldap diff --git a/app/services/create_account.rb b/app/services/create_account.rb index bc05e50..1219063 100644 --- a/app/services/create_account.rb +++ b/app/services/create_account.rb @@ -15,7 +15,6 @@ class CreateAccount < ApplicationService if @invitation.present? update_invitation(user.id) - exchange_xmpp_contacts if Setting.ejabberd_enabled end end @@ -43,12 +42,6 @@ class CreateAccount < ApplicationService CreateLdapUserJob.perform_later(@username, @domain, @email, hashed_pw) end - def exchange_xmpp_contacts - #TODO enable in development when we have easy setup of ejabberd etc. - return if Rails.env.development? - XmppExchangeContactsJob.perform_later(@invitation.user, @username, @domain) - end - def create_lndhub_account(user) #TODO enable in development when we have a local lndhub (mock?) API return if Rails.env.development? diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b1724f1..1dfc1ac 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -101,4 +101,52 @@ RSpec.describe User, type: :model do end end + describe "#exchange_xmpp_contact_with_inviter" do + include ActiveJob::TestHelper + + let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" } + let(:guest) { create :user, id: 2, cn: "isaacnewton", ou: "kosmos.org", email: "newt@example.com" } + + before do + Invitation.create! user: user, invited_user_id: guest.id, used_at: DateTime.now + allow_any_instance_of(User).to receive(:services_enabled).and_return(%w[ ejabberd ]) + end + + it "enqueues a job to exchange XMPP contacts between inviter and invitee" do + guest.send(:exchange_xmpp_contact_with_inviter) + + expect(enqueued_jobs.size).to eq(1) + args = enqueued_jobs.first['arguments'] + expect(args[0]['_aj_globalid']).to match('gid://akkounts/User') + expect(args[1]).to eq('isaacnewton') + expect(args[2]).to eq('kosmos.org') + end + + after do + clear_enqueued_jobs + end + end + + describe "#devise_after_confirmation" do + let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" } + + it "enables default services" do + expect(user).to receive(:enable_service).with(%w[ discourse ejabberd gitea mediawiki ]) + user.send(:devise_after_confirmation) + end + + context "for invited user with ejabberd enabled" do + let(:guest) { create :user, id: 2, cn: "isaacnewton", ou: "kosmos.org", email: "newt@example.com" } + + before do + Invitation.create! user: user, invited_user_id: guest.id, used_at: DateTime.now + allow_any_instance_of(User).to receive(:enable_service).and_return(true) + end + + it "exchanges XMPP contacts with the inviter" do + expect(guest).to receive(:exchange_xmpp_contact_with_inviter) + guest.send(:devise_after_confirmation) + end + end + end end diff --git a/spec/services/create_account_spec.rb b/spec/services/create_account_spec.rb index 9e35a2f..064d1ab 100644 --- a/spec/services/create_account_spec.rb +++ b/spec/services/create_account_spec.rb @@ -65,34 +65,6 @@ RSpec.describe CreateAccount, type: :model do end end - describe "#exchange_xmpp_contacts" do - include ActiveJob::TestHelper - - let(:inviter) { create :user, cn: "willherschel", ou: "kosmos.org" } - let(:invitation) { create :invitation, user: inviter } - let(:service) { CreateAccount.new( - username: 'isaacnewton', - email: 'isaacnewton@example.com', - password: 'bright-ideas-in-autumn', - invitation: invitation - )} - - it "enqueues a job to exchange XMPP contacts between inviter and invitee" do - service.send(:exchange_xmpp_contacts) - - expect(enqueued_jobs.size).to eq(1) - - args = enqueued_jobs.first['arguments'] - expect(args[0]['_aj_globalid']).to match('gid://akkounts/User') - expect(args[1]).to eq('isaacnewton') - expect(args[2]).to eq('kosmos.org') - end - - after do - clear_enqueued_jobs - end - end - describe "#create_lndhub_account" do include ActiveJob::TestHelper