diff --git a/lib/shopify_app/session/session_repository.rb b/lib/shopify_app/session/session_repository.rb index e02ff4771..d1652e7b1 100644 --- a/lib/shopify_app/session/session_repository.rb +++ b/lib/shopify_app/session/session_repository.rb @@ -23,6 +23,14 @@ def retrieve_user_session_by_shopify_user_id(user_id) user_storage.retrieve_by_shopify_user_id(user_id) end + def destroy_shop_session_by_domain(shopify_domain) + shop_storage.destroy_by_shopify_domain(shopify_domain) + end + + def destroy_user_session_by_shopify_user_id(user_id) + user_storage.destroy_by_shopify_user_id(user_id) + end + def store_shop_session(session) shop_storage.store(session) end @@ -73,18 +81,17 @@ def load_session(id) def delete_session(id) match = id.match(/^offline_(.*)/) - record = if match + if match domain = match[1] ShopifyApp::Logger.debug("Destroying session by domain - domain: #{domain}") - Shop.find_by(shopify_domain: match[1]) + destroy_shop_session_by_domain(domain) + else shopify_user_id = id.split("_").last ShopifyApp::Logger.debug("Destroying session by user - user_id: #{shopify_user_id}") - User.find_by(shopify_user_id: shopify_user_id) + destroy_user_session_by_shopify_user_id(shopify_user_id) end - record.destroy - true end diff --git a/lib/shopify_app/session/shop_session_storage.rb b/lib/shopify_app/session/shop_session_storage.rb index a1cc27ef7..f3cc08171 100644 --- a/lib/shopify_app/session/shop_session_storage.rb +++ b/lib/shopify_app/session/shop_session_storage.rb @@ -27,6 +27,10 @@ def retrieve_by_shopify_domain(domain) construct_session(shop) end + def destroy_by_shopify_domain(domain) + destroy_by(shopify_domain: domain) + end + private def construct_session(shop) diff --git a/lib/shopify_app/session/user_session_storage.rb b/lib/shopify_app/session/user_session_storage.rb index 78a77d1af..1cba9b2bf 100644 --- a/lib/shopify_app/session/user_session_storage.rb +++ b/lib/shopify_app/session/user_session_storage.rb @@ -28,6 +28,10 @@ def retrieve_by_shopify_user_id(user_id) construct_session(user) end + def destroy_by_shopify_user_id(user_id) + destroy_by(shopify_user_id: user_id) + end + private def construct_session(user) diff --git a/test/shopify_app/session/session_repository_test.rb b/test/shopify_app/session/session_repository_test.rb index 1c18bce48..2ed23a37f 100644 --- a/test/shopify_app/session/session_repository_test.rb +++ b/test/shopify_app/session/session_repository_test.rb @@ -140,21 +140,21 @@ class SessionRepositoryTest < ActiveSupport::TestCase end test(".delete_session destroys a shop record") do - shop = MockShopInstance.new(shopify_domain: "shop", shopify_token: "token") + SessionRepository.shop_storage = InMemoryShopSessionStore + mock_session_id = "offline_abra-shop" - Shop.expects(:find_by).with(shopify_domain: "shop").returns(shop) - shop.expects(:destroy) + InMemoryShopSessionStore.expects(:destroy_by_shopify_domain).with("abra-shop") - SessionRepository.delete_session("offline_shop") + SessionRepository.delete_session(mock_session_id) end test(".delete_session destroys a user record") do - user = MockUserInstance.new(shopify_domain: "shop", shopify_token: "token") + SessionRepository.user_storage = InMemoryUserSessionStore + mock_session_id = "test_shop.myshopify.com_1234" - User.expects(:find_by).with(shopify_user_id: "1234").returns(user) - user.expects(:destroy) + InMemoryUserSessionStore.expects(:destroy_by_shopify_user_id).with("1234") - SessionRepository.delete_session("shop_1234") + SessionRepository.delete_session(mock_session_id) end private diff --git a/test/shopify_app/session/shop_session_storage_test.rb b/test/shopify_app/session/shop_session_storage_test.rb index cecad0696..02bfc6524 100644 --- a/test/shopify_app/session/shop_session_storage_test.rb +++ b/test/shopify_app/session/shop_session_storage_test.rb @@ -40,6 +40,12 @@ class ShopSessionStorageTest < ActiveSupport::TestCase assert_equal expected_session.access_token, session.access_token end + test ".destroy_by_shopify_domain destroys shop session records by JWT" do + ShopMockSessionStore.expects(:destroy_by).with(shopify_domain: TEST_SHOPIFY_DOMAIN) + + ShopMockSessionStore.destroy_by_shopify_domain(TEST_SHOPIFY_DOMAIN) + end + test ".store can store shop session records" do mock_shop_instance = MockShopInstance.new(id: 12345) mock_shop_instance.stubs(:save!).returns(true) diff --git a/test/shopify_app/session/user_session_storage_test.rb b/test/shopify_app/session/user_session_storage_test.rb index 7f399f361..6f1037209 100644 --- a/test/shopify_app/session/user_session_storage_test.rb +++ b/test/shopify_app/session/user_session_storage_test.rb @@ -46,6 +46,12 @@ class UserSessionStorageTest < ActiveSupport::TestCase assert_equal expected_session.access_token, session.access_token end + test ".destroy_by_shopify_user_id destroys user session by shopify_user_id" do + UserMockSessionStore.expects(:destroy_by).with(shopify_user_id: TEST_SHOPIFY_USER_ID) + + UserMockSessionStore.destroy_by_shopify_user_id(TEST_SHOPIFY_USER_ID) + end + test ".store can store user session record" do mock_user_instance = MockUserInstance.new(shopify_user_id: 100) mock_user_instance.stubs(:save!).returns(true)