Signup supports using an existing identity
This commit is contained in:
+21
-12
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user