From 4d7cd3a8a745eff075cfbb4434df6707d795aba2 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Mon, 16 Jun 2025 13:24:54 -0400 Subject: [PATCH] Signup supports using an existing identity --- app/models/signup.rb | 33 +++++++++++++++++++++------------ test/models/signup_test.rb | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/app/models/signup.rb b/app/models/signup.rb index a56a5fcd8..194debfa8 100644 --- a/app/models/signup.rb +++ b/app/models/signup.rb @@ -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 diff --git a/test/models/signup_test.rb b/test/models/signup_test.rb index 1c77c1748..953628d92 100644 --- a/test/models/signup_test.rb +++ b/test/models/signup_test.rb @@ -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