diff --git a/app/controllers/signup_controller.rb b/app/controllers/signup_controller.rb index b332bbe..541c31d 100644 --- a/app/controllers/signup_controller.rb +++ b/app/controllers/signup_controller.rb @@ -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 diff --git a/app/services/create_account.rb b/app/services/create_account.rb index 474427a..c4a3d58 100644 --- a/app/services/create_account.rb +++ b/app/services/create_account.rb @@ -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 = { diff --git a/spec/features/signup_spec.rb b/spec/features/signup_spec.rb index 09ebcc5..07cfa09 100644 --- a/spec/features/signup_spec.rb +++ b/spec/features/signup_spec.rb @@ -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 diff --git a/spec/services/create_account_spec.rb b/spec/services/create_account_spec.rb index dad16fb..c691f75 100644 --- a/spec/services/create_account_spec.rb +++ b/spec/services/create_account_spec.rb @@ -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',