Exchange XMPP contacts when invitee signs up #13

Merged
raucao merged 6 commits from feature/automatic_xmpp_roster into master 2020-12-09 20:52:15 +00:00
4 changed files with 45 additions and 11 deletions
Showing only changes of commit e8c1a6066a - Show all commits

View File

@ -94,14 +94,15 @@ class SignupController < ApplicationController
end
def complete_signup
@user.save!
session[:new_user] = nil
session[:validation_error] = nil
CreateAccount.call(
username: @user.cn,
domain: "kosmos.org",
email: @user.email,
password: @user.password
password: @user.password,
invitation: @invitation
)
@invitation.update! invited_user_id: @user.id, used_at: DateTime.now

View File

@ -1,16 +1,29 @@
class CreateAccount < ApplicationService
def initialize(args)
@username = args[:username]
@email = args[:email]
@password = args[:password]
@username = args[:username]
@domain = args[:ou] || "kosmos.org"
@email = args[:email]
@password = args[:password]
@invitation = args[:invitation]
end
def call
create_user_in_database
add_ldap_document
end
private
def create_user_in_database
User.create!(
cn: @username,
ou: @domain,
email: @email,
password: @password,
password_confirmation: @password
)
end
def add_ldap_document
dn = "cn=#{@username},ou=kosmos.org,cn=users,dc=kosmos,dc=org"
attr = {

View File

@ -53,8 +53,11 @@ RSpec.describe "Signup", type: :feature do
expect(page).to have_content("Choose a password")
expect(CreateAccount).to receive(:call)
.with(username: "tony", email: "tony@example.com", password: "a-valid-password")
.and_return(true)
.with(
username: "tony", domain: "kosmos.org",
email: "tony@example.com", password: "a-valid-password",
invitation: Invitation.last
).and_return(true)
fill_in "user_password", with: "a-valid-password"
click_button "Create account"
@ -62,7 +65,6 @@ RSpec.describe "Signup", type: :feature do
expect(page).to have_content("confirm your address")
end
expect(page).to have_content("close this window or tab now")
expect(User.last.confirmed_at).to be_nil
end
scenario "Validation errors" do
@ -89,15 +91,17 @@ RSpec.describe "Signup", type: :feature do
expect(page).to have_content("Password is too short")
expect(CreateAccount).to receive(:call)
.with(username: "tony", email: "tony@example.com", password: "a-valid-password")
.and_return(true)
.with(
username: "tony", domain: "kosmos.org",
email: "tony@example.com", password: "a-valid-password",
invitation: Invitation.last
).and_return(true)
fill_in "user_password", with: "a-valid-password"
click_button "Create account"
within ".flash-msg.notice" do
expect(page).to have_content("confirm your address")
end
expect(User.last.cn).to eq("tony")
end
end
end

View File

@ -7,6 +7,22 @@ RSpec.describe CreateAccount, type: :model do
allow(service).to receive(:ldap_client).and_return(ldap_client_mock)
end
describe "#create_user_in_database" do
let(:service) { CreateAccount.new(
username: 'isaacnewton',
email: 'isaacnewton@example.com',
password: 'bright-ideas-in-autumn'
)}
it "creates a new user record in the akkounts database" do
expect(User.count).to eq(0)
service.send(:create_user_in_database)
expect(User.count).to eq(1)
expect(User.last.cn).to eq("isaacnewton")
expect(User.last.email).to eq("isaacnewton@example.com")
end
end
describe "#add_ldap_document" do
let(:service) { CreateAccount.new(
username: 'halfinney',