Signup supports using an existing identity

This commit is contained in:
Mike Dalessio
2025-06-16 13:24:54 -04:00
parent 73ba0c074f
commit 4d7cd3a8a7
2 changed files with 57 additions and 13 deletions
+21 -12
View File
@@ -3,22 +3,27 @@ class Signup
include ActiveModel::Attributes
include ActiveModel::Validations
attribute :full_name, :string
attribute :email_address, :string
attribute :password, :string
attribute :company_name, :string
# Input attribute
attr_accessor :company_name
attr_reader :signal_identity, :queenbee_account, :signal_account, :account, :user
# Input attributes when not using an existing identity
attr_accessor :full_name, :email_address, :password
# Input attribute when using an existing identity, output when creating new identity
attr_accessor :signal_identity
# Output attributes
attr_reader :queenbee_account, :signal_account, :account, :user
validate :validate_new_identity
def initialize(...)
super
@signal_identity = nil
@queenbee_account = nil
@account = nil
@user = nil
super
end
def process
@@ -41,8 +46,10 @@ class Signup
private
def create_signal_identity
SignalId::Database.on_master do
@signal_identity = build_new_identity.tap(&:save!)
unless signal_identity.present?
SignalId::Database.on_master do
@signal_identity = build_new_identity.tap(&:save!)
end
end
end
@@ -82,9 +89,11 @@ class Signup
end
def validate_new_identity
build_new_identity.tap do |identity|
unless identity.valid?
identity.errors.each { |error| errors.add(error.attribute, error.message) }
unless signal_identity.present?
build_new_identity.tap do |identity|
unless identity.valid?
identity.errors.each { |error| errors.add(error.attribute, error.message) }
end
end
end
end
+36 -1
View File
@@ -10,7 +10,7 @@ class SignupTest < ActiveSupport::TestCase
)
end
test "#process creates all the necessary objects" do
test "#process creates all the necessary objects for a new identity" do
Account.any_instance.expects(:setup_basic_template).once
assert @signup.process, @signup.errors.full_messages.to_sentence(words_connector: ". ")
@@ -24,12 +24,47 @@ class SignupTest < ActiveSupport::TestCase
assert @signup.signal_account
assert @signup.signal_account.persisted?
assert_equal @signup.signal_identity, @signup.signal_account.owner.identity
assert @signup.account
assert @signup.account.persisted?
assert @signup.user
assert @signup.user.persisted?
assert_equal @signup.user.signal_user, @signup.signal_account.owner
assert_includes ApplicationRecord.tenants, @signup.signal_account.subdomain
end
test "#process creates all the necessary objects for an existing identity" do
signal_identity = SignalId::Identity.find_by_email_address("david@37signals.com")
@signup = Signup.new(
signal_identity: signal_identity,
company_name: "Team LeMans",
)
Account.any_instance.expects(:setup_basic_template).once
assert @signup.process, @signup.errors.full_messages.to_sentence(words_connector: ". ")
assert_empty @signup.errors
assert @signup.signal_identity
assert_equal signal_identity, @signup.signal_identity
assert @signup.queenbee_account
assert @signup.queenbee_account.id
assert @signup.signal_account
assert @signup.signal_account.persisted?
assert_equal @signup.signal_identity, @signup.signal_account.owner.identity
assert @signup.account
assert @signup.account.persisted?
assert @signup.user
assert @signup.user.persisted?
assert_equal @signup.user.signal_user, @signup.signal_account.owner
assert_includes ApplicationRecord.tenants, @signup.signal_account.subdomain
end