require 'rails_helper' RSpec.describe CreateAccount, type: :model do describe "#create_user_in_database" do let(:service) { CreateAccount.new(account: { 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 "#update_invitation" do let(:invitation) { create :invitation } let(:service) { CreateAccount.new(account: { username: 'isaacnewton', email: 'isaacnewton@example.com', password: 'bright-ideas-in-autumn', invitation: invitation })} before(:each) do service.send(:update_invitation, 23) end it "marks the invitation as used" do expect(invitation.used_at).not_to be_nil end it "saves the invited user's ID" do expect(invitation.invited_user_id).to eq(23) end end describe "#add_ldap_document" do include ActiveJob::TestHelper let(:service) { CreateAccount.new(account: { username: 'halfinney', email: 'halfinney@example.com', password: 'remember-remember-the-5th-of-november' })} it "enqueues a job to create the LDAP user document" do service.send(:add_ldap_document) expect(enqueued_jobs.size).to eq(1) args = enqueued_jobs.first['arguments'] expect(args[0]).to eq('halfinney') expect(args[1]).to eq('kosmos.org') expect(args[2]).to eq('halfinney@example.com') expect(args[3]).to match(/^{SSHA512}.{171}=/) end after do clear_enqueued_jobs end end describe "#create_lndhub_account" do include ActiveJob::TestHelper let(:service) { CreateAccount.new(account: { username: 'halfinney', email: 'halfinney@example.com', password: 'bright-ideas-in-winter' })} let(:new_user) { create :user, cn: "halfinney", ou: "kosmos.org" } it "enqueues a job to create an LndHub account" do service.send(:create_lndhub_account, new_user) expect(enqueued_jobs.size).to eq(1) args = enqueued_jobs.first['arguments'] expect(args[0]['_aj_globalid']).to match('gid://akkounts/User') end after do clear_enqueued_jobs end end end