Save Snikket Instance after launch

Stephen Paul Weber created

Change summary

lib/registration.rb       | 14 ++++++++++----
lib/snikket.rb            |  2 +-
test/test_helper.rb       |  4 ++++
test/test_registration.rb |  3 ++-
4 files changed, 17 insertions(+), 6 deletions(-)

Detailed changes

lib/registration.rb 🔗

@@ -539,10 +539,11 @@ class Registration
 		end
 
 		class Snikket
-			def initialize(customer, tel, error: nil)
+			def initialize(customer, tel, error: nil, db: LazyObject.new { DB })
 				@customer = customer
 				@tel = tel
 				@error = error
+				@db = db
 			end
 
 			ACTION_VAR = "http://jabber.org/protocol/commands#actions"
@@ -572,9 +573,7 @@ class Registration
 				IQ_MANAGER.write(::Snikket::Launch.new(
 					nil, CONFIG[:snikket_hosting_api], domain: domain
 				)).then { |launched|
-					GetInvite.for(
-						::Snikket::CustomerInstance.for(@customer, domain, launched)
-					).then(&:write)
+					save_instance_and_wait(domain, launched)
 				}.catch { |e|
 					next EMPromise.reject(e) unless e.respond_to?(:text)
 
@@ -582,6 +581,13 @@ class Registration
 				}
 			end
 
+			def save_instance_and_wait(domain, launched)
+				instance = ::Snikket::CustomerInstance.for(@customer, domain, launched)
+				::Snikket::Repo.new(db: @db).put(instance).then do
+					GetInvite.for(instance).then(&:write)
+				end
+			end
+
 			class GetInvite
 				def self.for(instance)
 					instance.fetch_invite.then do |xmpp_uri|

lib/snikket.rb 🔗

@@ -138,7 +138,7 @@ module Snikket
 	end
 
 	class Repo
-		def initialize(db: DB)
+		def initialize(db: LazyObject.new { DB })
 			@db = db
 		end
 

test/test_helper.rb 🔗

@@ -309,6 +309,10 @@ class FakeDB
 		row = row.transform_keys(&:to_sym) if row && field_names_as == :symbol
 		EMPromise.resolve(row || default)
 	end
+
+	def exec(_, _)
+		EMPromise.resolve(nil)
+	end
 end
 
 class FakeLog

test/test_registration.rb 🔗

@@ -948,7 +948,8 @@ class RegistrationTest < Minitest::Test
 			@sgx = Minitest::Mock.new(TrivialBackendSgxRepo.new.get("test"))
 			@snikket = Registration::FinishOnboarding::Snikket.new(
 				customer,
-				"+15555550000"
+				"+15555550000",
+				db: FakeDB.new
 			)
 		end