Add specs for xmpp default bookmarks, refactor xmpp job usage
This commit is contained in:
parent
705bd63b42
commit
ad90fcd539
@ -1,18 +1,21 @@
|
|||||||
class XmppExchangeContactsJob < ApplicationJob
|
class XmppExchangeContactsJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(inviter, username, domain)
|
def perform(inviter, invitee)
|
||||||
|
return unless inviter.services_enabled.include?("ejabberd") &&
|
||||||
|
invitee.services_enabled.include?("ejabberd")
|
||||||
|
|
||||||
ejabberd = EjabberdApiClient.new
|
ejabberd = EjabberdApiClient.new
|
||||||
|
|
||||||
ejabberd.add_rosteritem({
|
ejabberd.add_rosteritem({
|
||||||
"localuser": username, "localhost": domain,
|
"localuser": invitee.cn, "localhost": invitee.ou,
|
||||||
"user": inviter.cn, "host": inviter.ou,
|
"user": inviter.cn, "host": inviter.ou,
|
||||||
"nick": inviter.cn, "group": Setting.ejabberd_buddy_roster, "subs": "both"
|
"nick": inviter.cn, "group": Setting.ejabberd_buddy_roster, "subs": "both"
|
||||||
})
|
})
|
||||||
ejabberd.add_rosteritem({
|
ejabberd.add_rosteritem({
|
||||||
"localuser": inviter.cn, "localhost": inviter.ou,
|
"localuser": inviter.cn, "localhost": inviter.ou,
|
||||||
"user": username, "host": domain,
|
"user": invitee.cn, "host": invitee.ou,
|
||||||
"nick": username, "group": Setting.ejabberd_buddy_roster, "subs": "both"
|
"nick": invitee.cn, "group": Setting.ejabberd_buddy_roster, "subs": "both"
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -59,11 +59,10 @@ class User < ApplicationRecord
|
|||||||
enable_service %w[ discourse ejabberd gitea mediawiki ]
|
enable_service %w[ discourse ejabberd gitea mediawiki ]
|
||||||
|
|
||||||
#TODO enable in development when we have easy setup of ejabberd etc.
|
#TODO enable in development when we have easy setup of ejabberd etc.
|
||||||
return if Rails.env.development?
|
return if Rails.env.development? || !Setting.ejabberd_enabled?
|
||||||
|
|
||||||
if inviter.present?
|
XmppExchangeContactsJob.perform_later(inviter, self) if inviter.present?
|
||||||
exchange_xmpp_contact_with_inviter if Setting.ejabberd_enabled?
|
XmppSetDefaultBookmarksJob.perform_later(self)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_devise_notification(notification, *args)
|
def send_devise_notification(notification, *args)
|
||||||
@ -134,12 +133,6 @@ class User < ApplicationRecord
|
|||||||
ldap.delete_attribute(dn,:service)
|
ldap.delete_attribute(dn,:service)
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def ldap
|
def ldap
|
||||||
|
@ -3,14 +3,17 @@ require 'webmock/rspec'
|
|||||||
|
|
||||||
RSpec.describe XmppExchangeContactsJob, type: :job do
|
RSpec.describe XmppExchangeContactsJob, type: :job do
|
||||||
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
|
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
|
||||||
|
let(:guest) { create :user, cn: "isaacnewton", ou: "kosmos.org",
|
||||||
|
id: 2, email: "hotapple42@eol.com" }
|
||||||
|
|
||||||
subject(:job) {
|
subject(:job) {
|
||||||
described_class.perform_later(user, 'isaacnewton', 'kosmos.org')
|
described_class.perform_later(user, guest)
|
||||||
}
|
}
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:post, "http://xmpp.example.com/api/add_rosteritem")
|
stub_request(:post, "http://xmpp.example.com/api/add_rosteritem")
|
||||||
.to_return(status: 200, body: "", headers: {})
|
.to_return(status: 200, body: "", headers: {})
|
||||||
|
allow_any_instance_of(User).to receive(:services_enabled).and_return(["ejabberd"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "posts add_rosteritem commands to the ejabberd API" do
|
it "posts add_rosteritem commands to the ejabberd API" do
|
||||||
|
34
spec/jobs/xmpp_set_default_bookmarks_job_spec.rb
Normal file
34
spec/jobs/xmpp_set_default_bookmarks_job_spec.rb
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
require 'webmock/rspec'
|
||||||
|
|
||||||
|
RSpec.describe XmppSetDefaultBookmarksJob, type: :job do
|
||||||
|
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
|
||||||
|
|
||||||
|
before do
|
||||||
|
Setting.xmpp_default_rooms = [
|
||||||
|
"Welcome <welcome@kosmos.chat>",
|
||||||
|
"Kosmos Dev <kosmos-dev@kosmos.chat>"
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
subject(:job) {
|
||||||
|
described_class.perform_later(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
before do
|
||||||
|
stub_request(:post, "http://xmpp.example.com/api/private_set")
|
||||||
|
.to_return(status: 200, body: "", headers: {})
|
||||||
|
end
|
||||||
|
|
||||||
|
it "posts a private_set command to the ejabberd API" do
|
||||||
|
perform_enqueued_jobs { job }
|
||||||
|
|
||||||
|
expect(WebMock).to have_requested(:post, "http://xmpp.example.com/api/private_set")
|
||||||
|
.with { |req| req.body == '{"user":"willherschel","host":"kosmos.org","element":"\u003cstorage xmlns=\'storage:bookmarks\'\u003e\u003cconference jid=\'welcome@kosmos.chat\' name=\'Welcome\' autojoin=\'false\'\u003e\u003cnick\u003ewillherschel\u003c/nick\u003e\u003c/conference\u003e\u003cconference jid=\'kosmos-dev@kosmos.chat\' name=\'Kosmos Dev\' autojoin=\'false\'\u003e\u003cnick\u003ewillherschel\u003c/nick\u003e\u003c/conference\u003e\u003c/storage\u003e"}' }
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
clear_enqueued_jobs
|
||||||
|
clear_performed_jobs
|
||||||
|
end
|
||||||
|
end
|
@ -101,38 +101,23 @@ RSpec.describe User, type: :model do
|
|||||||
end
|
end
|
||||||
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
|
describe "#devise_after_confirmation" do
|
||||||
|
include ActiveJob::TestHelper
|
||||||
|
after { clear_enqueued_jobs }
|
||||||
|
|
||||||
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
|
let(:user) { create :user, cn: "willherschel", ou: "kosmos.org" }
|
||||||
|
|
||||||
it "enables default services" do
|
it "enables default services" do
|
||||||
expect(user).to receive(:enable_service).with(%w[ discourse ejabberd gitea mediawiki ])
|
expect(user).to receive(:enable_service).with(%w[ discourse ejabberd gitea mediawiki ])
|
||||||
user.send(:devise_after_confirmation)
|
user.send :devise_after_confirmation
|
||||||
|
end
|
||||||
|
|
||||||
|
it "enqueues a job to set default chatroom bookmarks for XMPP" do
|
||||||
|
allow(user).to receive(:enable_service).and_return(true)
|
||||||
|
user.send :devise_after_confirmation
|
||||||
|
|
||||||
|
job = enqueued_jobs.select{|j| j['job_class'] == "XmppSetDefaultBookmarksJob"}.first
|
||||||
|
expect(job['arguments'][0]['_aj_globalid']).to eq('gid://akkounts/User/1')
|
||||||
end
|
end
|
||||||
|
|
||||||
context "for invited user with ejabberd enabled" do
|
context "for invited user with ejabberd enabled" do
|
||||||
@ -140,12 +125,15 @@ RSpec.describe User, type: :model do
|
|||||||
|
|
||||||
before do
|
before do
|
||||||
Invitation.create! user: user, invited_user_id: guest.id, used_at: DateTime.now
|
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)
|
allow_any_instance_of(User).to receive(:enable_service)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "exchanges XMPP contacts with the inviter" do
|
it "enqueues jobs to exchange XMPP contacts between inviter and invitee" do
|
||||||
expect(guest).to receive(:exchange_xmpp_contact_with_inviter)
|
guest.send :devise_after_confirmation
|
||||||
guest.send(:devise_after_confirmation)
|
|
||||||
|
job = enqueued_jobs.select{|j| j['job_class'] == "XmppExchangeContactsJob"}.first
|
||||||
|
expect(job["arguments"][0]['_aj_globalid']).to eq('gid://akkounts/User/1')
|
||||||
|
expect(job["arguments"][1]['_aj_globalid']).to eq('gid://akkounts/User/2')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user