From 27fa5721c26ff5b6634471344ca1015b581da3d6 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 30 May 2023 14:45:08 -0500 Subject: [PATCH] Fix for parent codes Put them in the right place and also check from the InviteCodes handler --- lib/parent_code_repo.rb | 2 +- lib/registration.rb | 26 ++++++++++++++++++++++---- test/test_registration.rb | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/lib/parent_code_repo.rb b/lib/parent_code_repo.rb index 4cc4d7d235aceffe86be69f847da2b676870246b..3807cc11d072842bdbf11c6365e662860ec87cd9 100644 --- a/lib/parent_code_repo.rb +++ b/lib/parent_code_repo.rb @@ -19,7 +19,7 @@ class ParentCodeRepo code = "p#{Multibases.pack('base32upper', SecureRandom.bytes(4))}" EMPromise.all([ @redis.set("jmp_customer_group_code-#{customer_id}", code), - @redis.hset("jmp_group_codes", code, customer_id) + @redis.hset("jmp_parent_codes", code, customer_id) ]).then { code } end end diff --git a/lib/registration.rb b/lib/registration.rb index b001261992cb4d4b2083ac4bde40880ea20f1eaa..6061395a3234562160bea245064fabb8d41f2b8d 100644 --- a/lib/registration.rb +++ b/lib/registration.rb @@ -429,7 +429,7 @@ class Registration msg = if customer.balance.positive? "Account balance not enough to cover the activation" end - new(customer, tel, error: msg) + new(customer, tel, error: msg, finish: Finish) end end @@ -444,10 +444,12 @@ class Registration required: true }].freeze - def initialize(customer, tel, error: nil, **) + def initialize(customer, tel, error: nil, finish: Finish, **) @customer = customer @tel = tel @error = error + @finish = finish + @parent_code_repo = ParentCodeRepo.new(REDIS) end def add_form(reply) @@ -484,8 +486,24 @@ class Registration end def verify(code) - InvitesRepo.new(DB, REDIS).claim_code(customer_id, code) do - @customer.activate_plan_starting_now + @parent_code_repo.find(code).then do |parent_customer_id| + if parent_customer_id + set_parent(parent_customer_id) + else + InvitesRepo.new(DB, REDIS).claim_code(customer_id, code) do + @customer.activate_plan_starting_now + end + end + end + end + + def set_parent(parent_customer_id) + @customer = @customer.with_plan( + @customer.plan_name, + parent_customer_id: parent_customer_id + ) + @customer.save_plan!.then do + self.class.for(@customer, @tel, finish: @finish) end end end diff --git a/test/test_registration.rb b/test/test_registration.rb index 1d89b139957b234d65418d18d1da79594d215171..09013e2288b96893c6652de3a0c8972c15ab29d9 100644 --- a/test/test_registration.rb +++ b/test/test_registration.rb @@ -749,6 +749,11 @@ class RegistrationTest < Minitest::Test EMPromise.resolve(nil), ["jmp_invite_tries-test"] ) + Registration::Payment::InviteCode::REDIS.expect( + :hget, + EMPromise.resolve(nil), + ["jmp_parent_codes", "abc"] + ) Command::COMMAND_MANAGER.expect( :write, EMPromise.resolve( @@ -782,6 +787,11 @@ class RegistrationTest < Minitest::Test EMPromise.resolve(0), ["jmp_invite_tries-test"] ) + Registration::Payment::InviteCode::REDIS.expect( + :hget, + EMPromise.resolve(nil), + ["jmp_parent_codes", "abc"] + ) Registration::Payment::InviteCode::DB.expect( :transaction, [] @@ -850,6 +860,11 @@ class RegistrationTest < Minitest::Test EMPromise.resolve(0), ["jmp_invite_tries-test"] ) + Registration::Payment::InviteCode::REDIS.expect( + :hget, + EMPromise.resolve(nil), + ["jmp_parent_codes", "abc"] + ) Registration::Payment::InviteCode::DB.expect( :transaction, [] @@ -918,6 +933,11 @@ class RegistrationTest < Minitest::Test EMPromise.resolve(11), ["jmp_invite_tries-test"] ) + Registration::Payment::InviteCode::REDIS.expect( + :hget, + EMPromise.resolve(nil), + ["jmp_parent_codes", "abc"] + ) Command::COMMAND_MANAGER.expect( :write, EMPromise.resolve(